diff --git a/app/controllers/api/base_controller.rb b/app/controllers/api/base_controller.rb new file mode 100644 index 0000000..a500381 --- /dev/null +++ b/app/controllers/api/base_controller.rb @@ -0,0 +1,5 @@ +module Api + class BaseController < ApplicationController + respond_to :json + end +end diff --git a/app/controllers/api/jurisprudences_controller.rb b/app/controllers/api/jurisprudences_controller.rb new file mode 100644 index 0000000..61f9562 --- /dev/null +++ b/app/controllers/api/jurisprudences_controller.rb @@ -0,0 +1,39 @@ +module Api + class JurisprudencesController < BaseController + load_and_authorize_resource :jurisprudence, class: "Cdao::Jurisprudence" + skip_load_resource :jurisprudence, only: %i[index] + + def index + attrs = %i[id reference_number title docdate ponente edited short_title year].freeze + + fulltext_fields = %i[reference_number title short_title].freeze + + search = Cdao::Jurisprudence.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 + + order_by :doc_date + order_by :year + + paginate page: params[:page] || 1, per_page: params[:per_page] || 20 + end + + @jurisprudences = search.results + + respond_with @jurisprudences + end + + def show + respond_with @jurisprudence + end + + private + + def search_params + params.permit(:reference_number, :title, :short_title, :q, :page, :per_page) + end + end +end diff --git a/app/models/ability.rb b/app/models/ability.rb index 79728a8..2d804bb 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -6,6 +6,10 @@ class Ability clear_aliased_actions user ||= User.new + + if user.persisted? + can :display, Cdao::Jurisprudence + end end def clear_aliased_actions @@ -22,4 +26,4 @@ class Ability alias_action :create, :update, to: :modify alias_action :display, :modify, to: :basic_manage end -end \ No newline at end of file +end diff --git a/app/views/api/jurisprudences/index.json.jbuilder b/app/views/api/jurisprudences/index.json.jbuilder new file mode 100644 index 0000000..9bc37fe --- /dev/null +++ b/app/views/api/jurisprudences/index.json.jbuilder @@ -0,0 +1,3 @@ +json.array!(@jurisprudences) do |jurisprudence| + json.extract! jurisprudence, *%i[id reference_number title docdate ponente edited short_title year] +end diff --git a/app/views/api/jurisprudences/show.json.jbuilder b/app/views/api/jurisprudences/show.json.jbuilder new file mode 100644 index 0000000..d272685 --- /dev/null +++ b/app/views/api/jurisprudences/show.json.jbuilder @@ -0,0 +1 @@ +json.(@jurisprudence, *%i[id reference_number title docdate ponente edited short_title year content]) diff --git a/config/routes.rb b/config/routes.rb index b0f7dd2..9592ae3 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,9 +1,13 @@ Rails.application.routes.draw do devise_for :users - + root to: "home#index" resources :case_doctrines resources :decisions resources :subject_indexes + + namespace :api, defaults: { format: :json } do + resources :jurisprudences, only: %i[index show] + end end