Browse Source

Implement documents API

pull/17/head
Angel Aviel Domaoan 4 years ago committed by Angel Aviel Domaoan
parent
commit
197892cd93
  1. 45
      app/controllers/api/documents_controller.rb
  2. 50
      app/models/cdao/document.rb
  3. 2
      app/models/cdao/jurisprudence.rb
  4. 3
      app/views/api/documents/index.json.jbuilder
  5. 1
      app/views/api/documents/show.json.jbuilder
  6. 2
      config/routes.rb

45
app/controllers/api/documents_controller.rb

@ -0,0 +1,45 @@
module Api
class DocumentsController < BaseController
load_and_authorize_resource :document, class: "Cdao::Document", only: %i[show]
authorize_resource :document, class: "Cdao::Document", only: %i[index]
def index
search = document_search(search_params)
@documents = search.results
respond_with @documents
end
def show
respond_with @document
end
private
def document_search(search_params)
fulltext_fields = %i[reference_number title short_title].freeze
search = Cdao::Document.search do
fulltext search_params[:q], fields: fulltext_fields if search_params[:q].present?
fulltext_fields.each do |field|
fulltext search_params[field], fields: [field] if search_params[field].present?
end
with(:year, search_params[:year].to_i) if search_params[:year].present?
order_by :doc_date, :desc
order_by :year, :desc
paginate page: search_params[:page] || 1, per_page: search_params[:per_page] || 20
end
search
end
def search_params
params.permit(:reference_number, :title, :short_title, :year, :q, :page, :per_page)
end
end
end

50
app/models/cdao/document.rb

@ -0,0 +1,50 @@
class Cdao::Document < Cdao::Base
self.table_name = "documents"
alias_attribute :docdate, :doc_date
alias_attribute :short_title, :title
def year
doc_date.present? ? doc_date.year : 0
end
def clean_reference_number
(reference_number.presence || "").gsub(/<!--\d+-->/, "")
end
def to_builder(ability = nil)
Jbuilder.new do |doc|
doc.(self, *%i[id title short_title])
doc.doc_date doc_date.presence || "0000-00-00"
doc.year year.presence || 0
doc.reference_number clean_reference_number
doc.display_reference_number clean_reference_number.presence || short_title.presence || title
doc.url Rails.application.routes.url_helpers.document_path(self)
end
end
searchable do
text :reference_number, stored: true
text :title, stored: true
text :short_title, stored: true
string :reference_number
string :title do
(title.present? ? title.first(32760).strip : short_title).titleize
end
string :short_title do
(short_title.presence || title.first(32760).strip).titleize
end
date :doc_date
date :search_doc_date do
doc_date.presence || Date.new(year.presence || 0)
end
integer :id
integer :year
integer :search_year do
year.present? && year > 0 ? year : (doc_date.try :year)
end
end
end

2
app/models/cdao/jurisprudence.rb

@ -58,7 +58,7 @@ class Cdao::Jurisprudence < Cdao::Base
doc.year year.presence || 0 doc.year year.presence || 0
doc.reference_number clean_reference_number doc.reference_number clean_reference_number
doc.display_reference_number clean_reference_number.presence || short_title.presence || title doc.display_reference_number clean_reference_number.presence || short_title.presence || title
doc.url Rails.application.routes.url_helpers.document_path(self) doc.url Rails.application.routes.url_helpers.jurisprudence_path(self)
end end
end end

3
app/views/api/documents/index.json.jbuilder

@ -0,0 +1,3 @@
json.array!(@documents) do |document|
json.extract! document, *%i[id reference_number title short_title doc_date year]
end

1
app/views/api/documents/show.json.jbuilder

@ -0,0 +1 @@
json.(@document, *%i[id reference_number title short_title doc_date year])

2
config/routes.rb

@ -34,6 +34,8 @@ Rails.application.routes.draw do
namespace :api, defaults: { format: :json } do namespace :api, defaults: { format: :json } do
resources :doctrines, only: %i[index show] resources :doctrines, only: %i[index show]
resources :documents, only: %i[index show]
resources :jurisprudences, only: %i[index show] do resources :jurisprudences, only: %i[index show] do
get :years, on: :collection get :years, on: :collection

Loading…
Cancel
Save