module DoctrineSearch def doctrine_search(search_params) fulltext_fields = %i[content].freeze search = ::Doctrine.search do fulltext search_params[:q], fields: fulltext_fields if search_params[:q].present? with(:subject_ids).any_of(search_params[:subject_ids].map(&:to_i)) if search_params[:subject_ids].present? with(:user_ids).any_of(search_params[:user_ids].map(&:to_i)) if search_params[:user_ids].present? if search_params[:created_at].present? with(:created_at).between(Date.parse(search_params[:created_at])..Time.zone.today.to_date) end if search_params[:created_at_start].present? && search_params[:created_at_end].blank? with(:created_at).between(Date.parse(search_params[:created_at_start])..Time.zone.today.to_date) end if search_params[:created_at_start].present? && search_params[:created_at_end].present? with(:created_at).between(Date.parse(search_params[:created_at_start])..Date.parse(search_params[:created_at_end])) end without(:id).any_of(search_params[:exclude_ids]) if search_params[:exclude_ids].present? order_by :search_year, :desc order_by :search_doc_date, :desc paginate page: search_params[:page] || 1, per_page: search_params[:per_page] || 20 end search end end