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