module Api class DoctrinesController < BaseController include DoctrineSearch load_and_authorize_resource :doctrine, class: "Doctrine" def index search = doctrine_search(search_params) @doctrines = search.results respond_with @doctrines end def show respond_with @doctrine end def create attrs = resource_params.to_unsafe_h.deep_symbolize_keys subject_ids = attrs.delete(:subject_ids) jurisprudence_ids = attrs.delete(:jurisprudence_ids) @doctrine = ::Doctrine.new(attrs) if @doctrine.save @doctrine.subject_ids = subject_ids if subject_ids.present? jurisprudence_ids.each do |jurisprudence_id| doctrine_jurisprudence = @doctrine.doctrine_jurisprudences.create(jurisprudence_id: jurisprudence_id) doctrine_jurisprudence.jurisprudence.index! if doctrine_jurisprudence.persisted? end respond_with @doctrine @doctrine.index! else render errors: @doctrine.errors, status: 422 end end def update attrs = resource_params.to_unsafe_h.deep_symbolize_keys subject_ids = attrs.delete(:subject_ids) if @doctrine.update(attrs) @doctrine.subject_ids = subject_ids if subject_ids.present? respond_with @doctrine @doctrine.index! else render errors: @doctrine.errors, status: 422 end end def destroy @doctrine.destroy respond_with @doctrine end def suggested_contents @doctrines = [] search = doctrine_search(search_params.to_unsafe_h.merge({ is_grouped_by_content: true, per_page: 100000 })) search.group(:content).groups.each do |group_by_content| group_by_content.results.each do |result| @doctrines << result end end respond_with @doctrines end private def resource_params params.permit(:content, :headnote, jurisprudence_ids: [], subject_ids: []) end def search_params params.permit(:created_at, :q, :page, :per_page, exclude_ids: [], subject_ids: [], user_ids: []) end end end