mirror of
https://github.com/Growstuff/growstuff.git
synced 2026-06-01 04:38:27 -04:00
75 lines
1.9 KiB
Ruby
75 lines
1.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module SearchHarvests
|
|
extend ActiveSupport::Concern
|
|
|
|
included do
|
|
searchkick merge_mappings: true,
|
|
settings: { number_of_shards: 1, number_of_replicas: 0 },
|
|
mappings: {
|
|
properties: {
|
|
harvests_count: { type: :integer },
|
|
photos_count: { type: :integer },
|
|
created_at: { type: :integer },
|
|
harvested_at: { type: :date }
|
|
}
|
|
}
|
|
|
|
def search_data
|
|
{
|
|
slug:,
|
|
quantity:,
|
|
|
|
# crop
|
|
crop_id:,
|
|
crop_name:,
|
|
crop_slug: crop.slug,
|
|
|
|
# owner
|
|
owner_id:,
|
|
owner_login_name:,
|
|
owner_slug:,
|
|
plant_part_name: plant_part&.name,
|
|
|
|
# planting
|
|
planting_id:,
|
|
planting_slug: planting&.slug,
|
|
|
|
# photo
|
|
has_photos: photos.size.positive?,
|
|
thumbnail_url: default_photo&.thumbnail_url || crop.default_photo&.thumbnail_url,
|
|
|
|
# counts
|
|
photos_count: photos.count,
|
|
|
|
# timestamps
|
|
harvested_at:,
|
|
created_at: created_at.to_i
|
|
}
|
|
end
|
|
|
|
def self.homepage_records(limit)
|
|
records = []
|
|
owners = []
|
|
1..limit.times do
|
|
where = {
|
|
# Disabled for now so that more relevant harvests are
|
|
# surfaced; even if we're falling back to crop photos.
|
|
# photos_count: { gt: 0 },
|
|
owner_id: { not: owners }
|
|
}
|
|
one_record = search('*',
|
|
limit: 1,
|
|
where:,
|
|
boost_by: [:created_at],
|
|
load: false).first
|
|
return records if one_record.nil?
|
|
|
|
owners << one_record.owner_id
|
|
records << one_record
|
|
end
|
|
records
|
|
end
|
|
end
|
|
end
|