Newer
Older
module SearchService
class LearningObject < Model
def search
::LearningObject.includes([:license, :tags, :taggings, :publisher, :language]).search(query: mount_query, order: order_hash, page: @search.page, per_page: @search.results_per_page)
end
def autocomplete
params = { where: { state: validate_object },
fields: ['name^10', 'description', 'author'] }
result = ::LearningObject.search(@search.query, autocomplete_params.merge(params))
thumbnail = proc { |obj| obj.default_thumbnail }
type = proc { |obj| obj.object_type.try(:name) }
autocomplete_render(result, type, thumbnail)
end
private
def search_fields
[:name, :description, :author, :object_type]
end
def mount_filter
filter = []
filter << { in: { tags: @search.tags } } unless @search.tags.blank?
filter << { in: { subjects: @search.subjects } } unless @search.subjects.blank?
filter << { in: { educational_stages: @search.educational_stages } } unless @search.educational_stages.blank?
filter << { in: { object_type: @search.types } } unless @search.types.blank?
filter << { term: { state: validate_object } }
filter
end
def order_hash
case @search.order
when 'author' then { author: { order: :asc, unmapped_type: :string } }
when 'publicationasc' then { published_at: { order: :asc, unmapped_type: :timestamp } }
when 'publicationdesc' then { published_at: { order: :desc, unmapped_type: :timestamp } }
when 'title' then { name: { order: :asc, unmapped_type: :string } }
end
end
def validate_object
return ::LearningObject.states[:published] unless !@user.nil? && @user.is_admin?
::LearningObject.states.values