You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
educoder/app/services/search_service.rb

64 lines
1.7 KiB

class SearchService < ApplicationService
include ElasticsearchAble
attr_reader :params
def initialize(params)
@params = params
end
def call
# return [] if keyword.blank?
modal_name.search(keyword, search_options)
end
private
def modal_name
@_modal_name ||=
case params[:type].to_s.strip
when 'shixun' then Shixun
when 'course' then Course
when 'subject' then Subject
when 'memo' then Memo
else Shixun
end
end
def search_options
model_options = {
includes: modal_name.searchable_includes
}
model_options.deep_merge!(where: { status: 2 }) if modal_name == Shixun
model_options.deep_merge!(extra_options)
model_options.deep_merge!(default_options)
model_options
end
def extra_options
case params[:type].to_s.strip
when 'shixun' then
5 years ago
if Laboratory.current.main_site?
not_shixun_ids = Shixun.joins(:laboratory_shixuns).where("laboratory_shixuns.laboratory_id != #{Laboratory.current.id}")
shixun_ids = Shixun.where.not(id: not_shixun_ids).pluck(:id)
else
shixun_ids = Laboratory.current.shixuns.pluck(:id)
end
{ where: { id: shixun_ids } }
when 'subject' then
5 years ago
if Laboratory.current.main_site?
not_subject_ids = Subject.joins(:laboratory_subjects).where("laboratory_subjects.laboratory_id != #{Laboratory.current.id}")
subject_ids = Subject.where.not(id: not_subject_ids).pluck(:id)
else
subject_ids = Laboratory.current.subjects.pluck(:id)
end
{ where: { id: subject_ids } }
when 'course' then
{ where: { laboratory_id: Laboratory.current.id } }
else
{}
end
end
end