diff --git a/app/controllers/api/jurisprudence/cited_ins_controller.rb b/app/controllers/api/jurisprudence/cited_ins_controller.rb new file mode 100644 index 0000000..c2a7dec --- /dev/null +++ b/app/controllers/api/jurisprudence/cited_ins_controller.rb @@ -0,0 +1,32 @@ +module Api + module Jurisprudence + class CitedInsController < ::Api::BaseController + load_resource :document, class: "Cdao::Jurisprudence", id_param: :jurisprudence_id + + def index + authorize! :read, @document + + response = { data: [] } + + document = @document + where = { enabled: true, state: "published" } + + document.class.citing_docs_of(document, where).group_by { |a| a.class.name }.each do |klass, docs| + klass = klass.gsub("Cdao::", "") + library = Cdao::Library.find_by(document_type: klass) + + response[:data] << { + library: { + document_type: klass, + display_name: library.try(:display_name).presence || "", + name: library.try(:name).presence || "", + }, + documents: docs.map { |doc| doc.to_builder(current_ability).attributes! } + } + end + + render json: response + end + end + end +end diff --git a/app/controllers/api/jurisprudence/cross_references_controller.rb b/app/controllers/api/jurisprudence/cross_references_controller.rb new file mode 100644 index 0000000..2133be0 --- /dev/null +++ b/app/controllers/api/jurisprudence/cross_references_controller.rb @@ -0,0 +1,33 @@ +module Api + module Jurisprudence + class CrossReferencesController < ::Api::BaseController + load_resource :document, class: "Cdao::Jurisprudence", id_param: :jurisprudence_id + + def index + authorize! :read, @document + + response = { data: [] } + + document = @document + where = { enabled: true, state: "published" } + + document.class.cited_docs_of(document, where).group_by { |a| a.class.name }.each do |klass, docs| + klass = klass.gsub("Cdao::", "") + library = Cdao::Library.find_by(document_type: klass) + + response[:data] << { + library: { + document_type: klass, + display_name: library.try(:display_name).presence || "", + name: library.try(:name).presence || "", + }, + data_id_prefix: "#{klass}-", + documents: docs.map { |doc| doc.to_builder(current_ability).attributes! } + } + end + + render json: response + end + end + end +end diff --git a/app/models/cdao/jurisprudence.rb b/app/models/cdao/jurisprudence.rb index b9ebcb9..34793b7 100644 --- a/app/models/cdao/jurisprudence.rb +++ b/app/models/cdao/jurisprudence.rb @@ -46,6 +46,21 @@ class Cdao::Jurisprudence < Cdao::Base end cited_docs end + + def clean_reference_number + (reference_number.presence || "").gsub(//, "") + end + + def to_builder(ability = nil) + Jbuilder.new do |doc| + doc.(self, *%i[id title short_title]) + doc.docdate docdate.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 def subjects doctrines.map(&:subjects).flatten.uniq diff --git a/config/routes.rb b/config/routes.rb index bec78e8..33aa817 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -26,6 +26,11 @@ Rails.application.routes.draw do resources :subject_indexes namespace :api, defaults: { format: :json } do - resources :jurisprudences, only: %i[index show] + resources :jurisprudences, only: %i[index show] do + scope module: :jurisprudence do + resources :cited_ins, only: %i[index show] + resources :cross_references, only: %i[index show] + end + end end end