From 8789fee3656a0aaae2f75cf72e97f77cec834cb6 Mon Sep 17 00:00:00 2001 From: Brenda Wallace Date: Fri, 20 Dec 2019 16:20:52 +1300 Subject: [PATCH] Seeds into elastic search --- app/controllers/seeds_controller.rb | 37 +++++++++++++++--------- app/models/concerns/seed_search.rb | 45 +++++++++++++++++++++++++++++ app/models/seed.rb | 1 + 3 files changed, 70 insertions(+), 13 deletions(-) create mode 100644 app/models/concerns/seed_search.rb diff --git a/app/controllers/seeds_controller.rb b/app/controllers/seeds_controller.rb index 450cc4331..5915c2461 100644 --- a/app/controllers/seeds_controller.rb +++ b/app/controllers/seeds_controller.rb @@ -8,14 +8,34 @@ class SeedsController < ApplicationController respond_to :rss, only: :index def index - @owner = Member.find_by(slug: params[:member_slug]) if params[:member_slug].present? - @crop = Crop.find_by(slug: params[:crop_slug]) if params[:crop_slug].present? - @planting = Planting.find_by(slug: params[:planting_id]) if params[:planting_id].present? + where = {} + + if params[:member_slug].present? + @owner = Member.find_by(slug: params[:member_slug]) + where['owner_id'] = @owner.id + end + + if params[:crop_slug].present? + @crop = Crop.find_by(slug: params[:crop_slug]) + where['crop_id'] = @crop.id + end + + if params[:planting_id].present? + @planting = Planting.find_by(slug: params[:planting_id]) + where['parent_planting'] = @planting.id + end @show_all = (params[:all] == '1') + where['finished'] = false unless @show_all @filename = csv_filename - @seeds = seeds.order(created_at: :desc).includes(:owner, :crop).paginate(page: params[:page]) + @seeds = Seed.search( + where: where, + page: params[:page], + limit: 30, + boost_by: [:created_at], + load: false + ) respond_with(@seeds) end @@ -66,15 +86,6 @@ class SeedsController < ApplicationController @seed = Seed.find(params[:slug]) end - def seeds - records = Seed.all - records = records.where(owner: @owner) if @owner.present? - records = records.where(crop: @crop) if @crop.present? - records = records.where(parent_planting: @planting) if @planting.present? - records = records.active unless @show_all - records - end - def seed_params params.require(:seed).permit( :crop_id, :description, :quantity, :plant_before, diff --git a/app/models/concerns/seed_search.rb b/app/models/concerns/seed_search.rb new file mode 100644 index 000000000..950b4742f --- /dev/null +++ b/app/models/concerns/seed_search.rb @@ -0,0 +1,45 @@ +module SeedSearch + extend ActiveSupport::Concern + + included do + searchkick merge_mappings: true, + mappings: { + properties: { + created_at: { type: :integer }, + photos_count: { type: :integer }, + tradable_to: { type: :text } + } + } + + scope :search_import, -> { includes(:owner, :crop, :parent_planting) } + + def search_data + { + slug: slug, + crop_slug: crop.slug, + crop_name: crop.name, + crop_id: crop_id, + owner_id: owner_id, + owner_name: owner.login_name, + tradable_to: tradable_to, + tradeable: tradable?, + parent_planting: parent_planting, + photos_count: photos.size, + has_photos: photos.size.positive?, + thumbnail_url: default_photo&.thumbnail_url, + finished: finished?, + created_at: created_at.to_i + } + end + + def self.homepage_records(limit) + search('*', + limit: limit, + where: { + photos_count: { gt: 0 } + }, + boost_by: [:created_at], + load: false) + end + end +end diff --git a/app/models/seed.rb b/app/models/seed.rb index cc1cecaa2..21970fba1 100644 --- a/app/models/seed.rb +++ b/app/models/seed.rb @@ -3,6 +3,7 @@ class Seed < ApplicationRecord include PhotoCapable include Finishable include Ownable + include SeedSearch friendly_id :seed_slug, use: %i(slugged finders) TRADABLE_TO_VALUES = %w(nowhere locally nationally internationally).freeze