From 5704d93544b0f72bb37329758891f77682cba6a5 Mon Sep 17 00:00:00 2001 From: Angel Aviel Domaoan Date: Tue, 15 Feb 2022 02:46:40 +0000 Subject: [PATCH] Implement DoctrineJurisprudence --- .../api/jurisprudence/doctrines_controller.rb | 40 -------------- app/controllers/doctrines_controller.rb | 2 +- .../jurisprudence/doctrines_controller.rb | 52 ------------------- app/models/cdao/jurisprudence.rb | 3 +- app/models/doctrine.rb | 3 ++ app/models/doctrine_jurisprudence.rb | 6 +++ config/routes.rb | 8 +-- ...15021520_create_doctrine_jurisprudences.rb | 15 ++++++ db/seeds.rb | 7 +++ 9 files changed, 35 insertions(+), 101 deletions(-) delete mode 100644 app/controllers/jurisprudence/doctrines_controller.rb create mode 100644 app/models/doctrine_jurisprudence.rb create mode 100644 db/migrate/20220215021520_create_doctrine_jurisprudences.rb diff --git a/app/controllers/api/jurisprudence/doctrines_controller.rb b/app/controllers/api/jurisprudence/doctrines_controller.rb index d8b8532..7da8951 100644 --- a/app/controllers/api/jurisprudence/doctrines_controller.rb +++ b/app/controllers/api/jurisprudence/doctrines_controller.rb @@ -11,46 +11,6 @@ module Api def show respond_with @doctrine end - - def create - attrs = resource_params.to_unsafe_h.deep_symbolize_keys - subject_ids = attrs.delete(:subject_ids) - - @doctrine = @jurisprudence.doctrines.new(attrs) - - if @doctrine.save - @doctrine.subject_ids = subject_ids if subject_ids.present? - - respond_with @doctrine - else - render errors: @doctrine.errors, status: 422 - end - end - - def update - attrs = resource_params.to_unsafe_h.deep_symbolize_keys - subject_ids = attrs.delete(:subject_ids) - - if @doctrine.update(attrs) - @doctrine.subject_ids = subject_ids if subject_ids.present? - - respond_with @doctrine - else - render errors: @doctrine.errors, status: 422 - end - end - - def destroy - @doctrine.destroy - - respond_with @doctrine - end - - private - - def resource_params - params.permit(:content, subject_ids: []) - end end end end diff --git a/app/controllers/doctrines_controller.rb b/app/controllers/doctrines_controller.rb index b943d91..38934c5 100644 --- a/app/controllers/doctrines_controller.rb +++ b/app/controllers/doctrines_controller.rb @@ -26,6 +26,6 @@ class DoctrinesController < ApplicationController private def search_params - params.permit(subject_ids: []) + params.permit(jurisprudence_ids: [], subject_ids: []) end end \ No newline at end of file diff --git a/app/controllers/jurisprudence/doctrines_controller.rb b/app/controllers/jurisprudence/doctrines_controller.rb deleted file mode 100644 index 52314c6..0000000 --- a/app/controllers/jurisprudence/doctrines_controller.rb +++ /dev/null @@ -1,52 +0,0 @@ -class Jurisprudence::DoctrinesController < ApplicationController - load_and_authorize_resource :jurisprudence, class: "Cdao::Jurisprudence" - load_and_authorize_resource :doctrine, class: "Doctrine", through: :jurisprudence - - def create - attrs = resource_params.to_unsafe_h.deep_symbolize_keys - subject_ids = attrs.delete(:subject_ids) - - @doctrine = @jurisprudence.doctrines.new(attrs) - - respond_to do |format| - if @doctrine.save - @doctrine.subject_ids = subject_ids if subject_ids.present? - - format.html { redirect_to document_doctrine_path(@jurisprudence, @doctrine), notice: "Doctrine was successfully created." } - else - format.html { redirect_to document_doctrine_path(@jurisprudence) } - end - end - end - - def update - attrs = resource_params.to_unsafe_h.deep_symbolize_keys - subject_ids = attrs.delete(:subject_ids) - - respond_to do |format| - if @doctrine.update(attrs) - @doctrine.subject_ids = subject_ids if subject_ids.present? - - format.html { redirect_to document_doctrine_path(@jurisprudence, @doctrine), notice: "Doctrine was successfully updated." } - else - format.html { redirect_to document_doctrine_path(@jurisprudence) } - end - end - end - - def destroy - respond_to do |format| - if @doctrine.destroy - format.html { redirect_to document_path(@jurisprudence), notice: "Doctrine was successfully destroyed." } - else - format.html { redirect_to document_path(@jurisprudence), alert: @doctrine.errors.full_messages } - end - end - end - - private - - def resource_params - params.permit(:content, subject_ids: []) - end -end diff --git a/app/models/cdao/jurisprudence.rb b/app/models/cdao/jurisprudence.rb index c899c3d..152e307 100644 --- a/app/models/cdao/jurisprudence.rb +++ b/app/models/cdao/jurisprudence.rb @@ -3,7 +3,8 @@ class Cdao::Jurisprudence < Cdao::Base has_many :annotations, as: :document, dependent: :restrict_with_error - has_many :doctrines, as: :document, dependent: :restrict_with_error + has_many :doctrine_jurisprudences, dependent: :destroy + has_many :doctrines, through: :doctrine_jurisprudences has_many :annotation_documents, as: :document, dependent: :restrict_with_error has_many :annotations_as_cited, through: :annotation_documents, source: :annotation diff --git a/app/models/doctrine.rb b/app/models/doctrine.rb index c19ef57..c0e4296 100644 --- a/app/models/doctrine.rb +++ b/app/models/doctrine.rb @@ -1,6 +1,9 @@ class Doctrine < ApplicationRecord belongs_to :document, polymorphic: true, optional: false + has_many :doctrine_jurisprudences, dependent: :destroy + has_many :jurisprudences, through: :doctrine_jurisprudences + has_many :doctrine_subjects, dependent: :destroy has_many :subjects, through: :doctrine_subjects diff --git a/app/models/doctrine_jurisprudence.rb b/app/models/doctrine_jurisprudence.rb new file mode 100644 index 0000000..d2749b6 --- /dev/null +++ b/app/models/doctrine_jurisprudence.rb @@ -0,0 +1,6 @@ +class DoctrineJurisprudence < ApplicationRecord + acts_as_list column: :rank, scope: %i[doctrine_id] + + belongs_to :doctrine, optional: false + belongs_to :jurisprudence, class_name: "Cdao::Jurisprudence", optional: false +end diff --git a/config/routes.rb b/config/routes.rb index 193a577..6d08589 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -10,12 +10,6 @@ Rails.application.routes.draw do end end - resources :jurisprudences, only: [] do - scope module: :jurisprudence do - resources :doctrines, only: %i[create update destroy] - end - end - resources :documents, only: %i[index show] do get :search, on: :collection @@ -48,7 +42,7 @@ Rails.application.routes.draw do scope module: :jurisprudence do resources :cited_ins, only: %i[index show] resources :cross_references, only: %i[index show] - resources :doctrines + resources :doctrines, only: %i[index show] end end end diff --git a/db/migrate/20220215021520_create_doctrine_jurisprudences.rb b/db/migrate/20220215021520_create_doctrine_jurisprudences.rb new file mode 100644 index 0000000..ff48b2b --- /dev/null +++ b/db/migrate/20220215021520_create_doctrine_jurisprudences.rb @@ -0,0 +1,15 @@ +class CreateDoctrineJurisprudences < ActiveRecord::Migration[6.1] + def change + create_table :doctrine_jurisprudences do |t| + t.references :doctrine, null: false + t.references :jurisprudence, null: false + t.integer :rank, null: false, default: 1 + + t.timestamps + end + + add_index :doctrine_jurisprudences, %i[doctrine_id jurisprudence_id], + name: "index_doctrine_jurisprudences_uniqueness", + unique: true + end +end diff --git a/db/seeds.rb b/db/seeds.rb index 534fdb4..1702114 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -54,3 +54,10 @@ Cdao::Subject.find_each.with_index do |subject, index| annotation_document.document = Cdao::Jurisprudence.last(index + 101).first annotation_document.save end + +Doctrine.find_each do |doctrine| + doc = doctrine.document + ids = doc.doctrine_ids + ids << doctrine.id + doc.doctrine_ids = ids.uniq +end