From fb57a0792705109887cdc520f0e5f83603e2b439 Mon Sep 17 00:00:00 2001 From: Paul Chavard Date: Fri, 23 Nov 2018 19:22:33 +0100 Subject: [PATCH 1/4] Add stable_id to types_de_champ --- .../20181123181020_add_stable_id_to_types_de_champ.rb | 6 ++++++ db/schema.rb | 2 ++ 2 files changed, 8 insertions(+) create mode 100644 db/migrate/20181123181020_add_stable_id_to_types_de_champ.rb diff --git a/db/migrate/20181123181020_add_stable_id_to_types_de_champ.rb b/db/migrate/20181123181020_add_stable_id_to_types_de_champ.rb new file mode 100644 index 000000000..958eb90a2 --- /dev/null +++ b/db/migrate/20181123181020_add_stable_id_to_types_de_champ.rb @@ -0,0 +1,6 @@ +class AddStableIdToTypesDeChamp < ActiveRecord::Migration[5.2] + def change + add_column :types_de_champ, :stable_id, :bigint + add_index :types_de_champ, :stable_id + end +end diff --git a/db/schema.rb b/db/schema.rb index b8b98f83e..1d8759dfa 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -556,7 +556,9 @@ ActiveRecord::Schema.define(version: 2018_11_23_195208) do t.datetime "created_at" t.datetime "updated_at" t.jsonb "options" + t.bigint "stable_id" t.index ["private"], name: "index_types_de_champ_on_private" + t.index ["stable_id"], name: "index_types_de_champ_on_stable_id" end create_table "types_de_piece_justificative", id: :serial, force: :cascade do |t| From 1883c57c8744f841784a3386bf44d50197549b4e Mon Sep 17 00:00:00 2001 From: Paul Chavard Date: Tue, 27 Nov 2018 14:52:20 +0100 Subject: [PATCH 2/4] Add stable ids to types_de_champ after every update --- app/models/procedure.rb | 7 +++++++ app/models/type_de_champ.rb | 7 +++++++ spec/models/procedure_spec.rb | 5 +++++ spec/models/type_de_champ_shared_example.rb | 9 +++++++++ 4 files changed, 28 insertions(+) diff --git a/app/models/procedure.rb b/app/models/procedure.rb index 2498604cf..718342060 100644 --- a/app/models/procedure.rb +++ b/app/models/procedure.rb @@ -199,6 +199,7 @@ class Procedure < ApplicationRecord end def clone(admin, from_library) + populate_champ_stable_ids procedure = self.deep_clone(include: { types_de_piece_justificative: nil, @@ -358,6 +359,12 @@ class Procedure < ApplicationRecord gestionnaire || gestionnaires.first end + def populate_champ_stable_ids + TypeDeChamp.where(procedure: self, stable_id: nil).find_each do |type_de_champ| + type_de_champ.update_column(:stable_id, type_de_champ.id) + end + end + private def claim_path_ownership!(path) diff --git a/app/models/type_de_champ.rb b/app/models/type_de_champ.rb index c2d9a9ae6..61bf18695 100644 --- a/app/models/type_de_champ.rb +++ b/app/models/type_de_champ.rb @@ -36,6 +36,7 @@ class TypeDeChamp < ApplicationRecord store :options, accessors: [:cadastres, :quartiers_prioritaires, :parcelles_agricoles] after_initialize :set_dynamic_type + after_create :populate_stable_id attr_reader :dynamic_type @@ -117,6 +118,12 @@ class TypeDeChamp < ApplicationRecord private + def populate_stable_id + if !stable_id + update_column(:stable_id, id) + end + end + def remove_piece_justificative_template if type_champ != TypeDeChamp.type_champs.fetch(:piece_justificative) && piece_justificative_template.attached? piece_justificative_template.purge_later diff --git a/spec/models/procedure_spec.rb b/spec/models/procedure_spec.rb index aa9934e67..cb9f92ad8 100644 --- a/spec/models/procedure_spec.rb +++ b/spec/models/procedure_spec.rb @@ -424,6 +424,11 @@ describe Procedure do expect(subject.path).to be_nil end end + + it 'should keep types_de_champ ids stable' do + expect(subject.types_de_champ_ordered.first.id).not_to eq(procedure.types_de_champ_ordered.first.id) + expect(subject.types_de_champ_ordered.first.stable_id).to eq(procedure.types_de_champ_ordered.first.id) + end end describe '#publish!' do diff --git a/spec/models/type_de_champ_shared_example.rb b/spec/models/type_de_champ_shared_example.rb index 092527bbc..5fbceb3bd 100644 --- a/spec/models/type_de_champ_shared_example.rb +++ b/spec/models/type_de_champ_shared_example.rb @@ -39,6 +39,15 @@ shared_examples 'type_de_champ_spec' do it { is_expected.to allow_value('blabla').for(:description) } end + context 'stable_id' do + it { + type_de_champ = create(:type_de_champ_text) + expect(type_de_champ.id).to eq(type_de_champ.stable_id) + cloned_type_de_champ = type_de_champ.clone + expect(cloned_type_de_champ.stable_id).to eq(type_de_champ.stable_id) + } + end + context 'remove piece_justificative_template' do context 'when the tdc is piece_justificative' do let(:template_double) { double('template', attached?: attached, purge_later: true) } From 8d222757424d1cc68973c7552b62ae3f59dcd9ad Mon Sep 17 00:00:00 2001 From: Paul Chavard Date: Tue, 27 Nov 2018 14:52:53 +0100 Subject: [PATCH 3/4] Make type_de_champ API ids stable --- app/serializers/type_de_champ_serializer.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/serializers/type_de_champ_serializer.rb b/app/serializers/type_de_champ_serializer.rb index 152e908e1..b8ef6ecb7 100644 --- a/app/serializers/type_de_champ_serializer.rb +++ b/app/serializers/type_de_champ_serializer.rb @@ -4,4 +4,8 @@ class TypeDeChampSerializer < ActiveModel::Serializer :type_champ, :order_place, :description + + def id + object.stable_id || object.id + end end From c1a2506b018288dc4c7028f809c407ea7239e14f Mon Sep 17 00:00:00 2001 From: Paul Chavard Date: Tue, 27 Nov 2018 14:53:09 +0100 Subject: [PATCH 4/4] Add stable ids to all types de champ --- ...123181252_add_stable_id_to_types_de_champ.rake | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 lib/tasks/deployment/20181123181252_add_stable_id_to_types_de_champ.rake diff --git a/lib/tasks/deployment/20181123181252_add_stable_id_to_types_de_champ.rake b/lib/tasks/deployment/20181123181252_add_stable_id_to_types_de_champ.rake new file mode 100644 index 000000000..dbb3283dd --- /dev/null +++ b/lib/tasks/deployment/20181123181252_add_stable_id_to_types_de_champ.rake @@ -0,0 +1,15 @@ +namespace :after_party do + desc 'Deployment task: add_stable_id_to_types_de_champ' + task add_stable_id_to_types_de_champ: :environment do + types_de_champ = TypeDeChamp.where(stable_id: nil) + bar = RakeProgressbar.new(types_de_champ.count) + + types_de_champ.find_each do |type_de_champ| + type_de_champ.update_column(:stable_id, type_de_champ.id) + bar.inc + end + bar.finished + + AfterParty::TaskRecord.create version: '20181123181252' + end +end