forgeplus/app/services/search_service.rb

52 lines
1.3 KiB
Ruby
Raw Permalink Normal View History

2020-03-09 00:40:16 +08:00
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!(extra_options)
model_options.deep_merge!(default_options)
model_options
end
def extra_options
case params[:type].to_s.strip
when 'shixun' then
{ where: { id: Laboratory.current.shixuns.where(public: 2, status: 2, fork_from: nil).or(Laboratory.current.shixuns.where(status: 2, id: User.current.shixuns)).pluck(:id) } }
when 'subject' then
{ where: { id: Laboratory.current.subjects.where(public: 2, status: 2)
.or( Laboratory.current.subjects.where(status: 2, id: User.current.subjects)).pluck(:id) } }
when 'course' then
{ where: { id: Laboratory.current.all_courses.pluck(:id) } }
else
{}
end
end
end