From fb9e17bdc6738206c77157cf3f8f0a650d0975b6 Mon Sep 17 00:00:00 2001 From: Angel Aviel Domaoan Date: Fri, 4 Feb 2022 08:49:55 +0000 Subject: [PATCH] Implement Doctrine API --- app/controllers/api/doctrines_controller.rb | 18 ++++++++++++++---- app/controllers/api/documents_controller.rb | 15 --------------- app/models/doctrine.rb | 11 +++++++++-- app/views/api/doctrines/index.json.jbuilder | 3 +++ app/views/api/doctrines/show.json.jbuilder | 1 + config/application.yml | 6 +++++- config/routes.rb | 2 ++ 7 files changed, 34 insertions(+), 22 deletions(-) delete mode 100644 app/controllers/api/documents_controller.rb create mode 100644 app/views/api/doctrines/index.json.jbuilder create mode 100644 app/views/api/doctrines/show.json.jbuilder diff --git a/app/controllers/api/doctrines_controller.rb b/app/controllers/api/doctrines_controller.rb index 758d77d..e79e0f8 100644 --- a/app/controllers/api/doctrines_controller.rb +++ b/app/controllers/api/doctrines_controller.rb @@ -1,6 +1,7 @@ module Api class DoctrinesController < BaseController + load_and_authorize_resource :doctrine, class: "Doctrine", only: %i[show] authorize_resource :doctrine, class: "Doctrine", only: %i[index] def index @@ -11,25 +12,34 @@ module Api respond_with @doctrines end + def show + respond_with @doctrine + end + private def doctrine_search(search_params) - search = Sunspot.search(Doctrine) do - + 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]) if search_params[:subject_ids].present? with(:user_ids).any_of(search_params[:user_ids]) 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) + with(:created_at).between(Date.parse(search_params[:created_at])..Time.zone.today.to_date) end + + paginate page: search_params[:page] || 1, per_page: search_params[:per_page] || 20 end search end def search_params - params.permit(subject_ids: [], user_ids: [], :created_at) + params.permit(:created_at, :q, :page, :per_page, subject_ids: [], user_ids: []) end end end diff --git a/app/controllers/api/documents_controller.rb b/app/controllers/api/documents_controller.rb deleted file mode 100644 index 1c2e635..0000000 --- a/app/controllers/api/documents_controller.rb +++ /dev/null @@ -1,15 +0,0 @@ -module Api - class DocumentsController < BaseController - include JurisprudenceSearch - - authorize_resource :document, class: "Cdao::Document", only: %i[index] - - def index - search = jurisprudence_search(search_params) - - @jurisprudences = search.results - - respond_with @jurisprudences - end - end -end diff --git a/app/models/doctrine.rb b/app/models/doctrine.rb index c49efae..4763f47 100644 --- a/app/models/doctrine.rb +++ b/app/models/doctrine.rb @@ -27,7 +27,7 @@ class Doctrine < ApplicationRecord def subject_ids=(ids) ids = ids.map(&:to_i) - + ids.each do |subject_id| record = DoctrineSubject.find_or_initialize_by(doctrine_id: self.id, subject_id: subject_id) @@ -44,9 +44,16 @@ class Doctrine < ApplicationRecord end searchable do + text :content + integer :document_id + integer :subject_ids, multiple: true - text :content + integer :user_ids, multiple: true do + paper_trail.originator.to_i + end + + date :created_at end end diff --git a/app/views/api/doctrines/index.json.jbuilder b/app/views/api/doctrines/index.json.jbuilder new file mode 100644 index 0000000..7350ca9 --- /dev/null +++ b/app/views/api/doctrines/index.json.jbuilder @@ -0,0 +1,3 @@ +json.array!(@doctrines) do |doctrine| + json.extract! doctrine, *%i[id content subject_ids created_at updated_at] +end diff --git a/app/views/api/doctrines/show.json.jbuilder b/app/views/api/doctrines/show.json.jbuilder new file mode 100644 index 0000000..5eeb838 --- /dev/null +++ b/app/views/api/doctrines/show.json.jbuilder @@ -0,0 +1 @@ +json.(@doctrine, *%i[id content subject_ids created_at updated_at]) diff --git a/config/application.yml b/config/application.yml index bb95687..d6e35d4 100644 --- a/config/application.yml +++ b/config/application.yml @@ -1,7 +1,7 @@ DATABASE_URL: '<%= Rails.application.credentials.DATABASE_URL %>' DATABASE_URL_CDAO: '<%= Rails.application.credentials.DATABASE_URL_CDAO %>' -SOLR_URL: '<%= Rails.application.credentials.SOLR_URL %>' +# SOLR_URL: '<%= Rails.application.credentials.SOLR_URL %>' SENTRY_DSN: '<%= Rails.application.credentials.SENTRY_DSN %>' REPORT_URI_URL: '<%= Rails.application.credentials.REPORT_URI_URL %>' @@ -9,3 +9,7 @@ REPORT_URI_URL: '<%= Rails.application.credentials.REPORT_URI_URL %>' RECAPTCHA_ENABLED: '<%= Rails.application.credentials.RECAPTCHA_ENABLED %>' RAILS_SERVE_STATIC_FILES: "true" + +REDIS_URL: "redis://redis:6379/1" + +SOLR_URL: "http://localhost:8983/solr/default" diff --git a/config/routes.rb b/config/routes.rb index 9810efc..6e71dc1 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -32,6 +32,8 @@ Rails.application.routes.draw do end namespace :api, defaults: { format: :json } do + resources :doctrines, only: %i[index show] + resources :jurisprudences, only: %i[index show] do get :years, on: :collection