6 changed files with 102 additions and 1 deletions
@ -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 |
||||
@ -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 |
||||
@ -0,0 +1,3 @@
|
||||
json.array!(@documents) do |document| |
||||
json.extract! document, *%i[id reference_number title short_title doc_date year] |
||||
end |
||||
@ -0,0 +1 @@
|
||||
json.(@document, *%i[id reference_number title short_title doc_date year]) |
||||
Loading…
Reference in new issue