From 07d0df78142c1ce4eed32dec967a733a6d863c31 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Gaya?= <sebastien.gaya@gmail.com>
Date: Mon, 12 Feb 2024 16:59:57 +0100
Subject: [PATCH] reverse column names in habtm (#1620)

* reverse column names in habtm

* fix
---
 app/models/administration/location.rb         | 12 +++----
 .../education/program/with_locations.rb       |  4 +--
 app/models/education/school/with_locations.rb |  4 +--
 app/models/research/hal/author.rb             |  8 ++---
 app/models/research/laboratory.rb             |  4 +--
 app/models/research/publication.rb            | 10 +++---
 app/models/university/person/with_research.rb | 12 +++----
 ...931_reverse_column_names_in_join_tables.rb | 33 +++++++++++++++++
 db/schema.rb                                  | 36 +++++++++----------
 9 files changed, 78 insertions(+), 45 deletions(-)
 create mode 100644 db/migrate/20240209102931_reverse_column_names_in_join_tables.rb

diff --git a/app/models/administration/location.rb b/app/models/administration/location.rb
index 04460d8cd..521f01724 100644
--- a/app/models/administration/location.rb
+++ b/app/models/administration/location.rb
@@ -43,20 +43,20 @@ class Administration::Location < ApplicationRecord
 
   has_and_belongs_to_many :schools,
                           class_name: 'Education::School',
-                          foreign_key: :education_school_id,
-                          association_foreign_key: :administration_location_id
+                          foreign_key: :administration_location_id,
+                          association_foreign_key: :education_school_id
                           alias_method :education_schools, :schools
   has_and_belongs_to_many :programs,
                           class_name: 'Education::Program',
-                          foreign_key: :education_program_id,
-                          association_foreign_key: :administration_location_id
+                          foreign_key: :administration_location_id,
+                          association_foreign_key: :education_program_id
                           alias_method :education_programs, :programs
-  has_many                :diplomas, 
+  has_many                :diplomas,
                           -> { distinct },
                           through: :programs,
                           source: :diploma
                           alias_method :education_diplomas, :diplomas
-             
+
 
   scope :ordered, -> { order(:name) }
 
diff --git a/app/models/education/program/with_locations.rb b/app/models/education/program/with_locations.rb
index 9c03f1e9c..f2d3c74a8 100644
--- a/app/models/education/program/with_locations.rb
+++ b/app/models/education/program/with_locations.rb
@@ -4,8 +4,8 @@ module Education::Program::WithLocations
   included do
     has_and_belongs_to_many :administration_locations,
                             class_name: 'Administration::Location',
-                            foreign_key: :administration_location_id,
-                            association_foreign_key: :education_program_id
+                            foreign_key: :education_program_id,
+                            association_foreign_key: :administration_location_id
                             alias_method :locations, :administration_locations
   end
 
diff --git a/app/models/education/school/with_locations.rb b/app/models/education/school/with_locations.rb
index ac62adfde..d77be3a2d 100644
--- a/app/models/education/school/with_locations.rb
+++ b/app/models/education/school/with_locations.rb
@@ -4,8 +4,8 @@ module Education::School::WithLocations
   included do
     has_and_belongs_to_many :administration_locations,
                             class_name: 'Administration::Location',
-                            foreign_key: :administration_location_id,
-                            association_foreign_key: :education_school_id
+                            foreign_key: :education_school_id,
+                            association_foreign_key: :administration_location_id
                             alias_method :locations, :administration_locations
   end
 
diff --git a/app/models/research/hal/author.rb b/app/models/research/hal/author.rb
index d9ab7826d..638f28ca7 100644
--- a/app/models/research/hal/author.rb
+++ b/app/models/research/hal/author.rb
@@ -20,12 +20,12 @@ class Research::Hal::Author < ApplicationRecord
   include Sanitizable
 
   has_and_belongs_to_many :publications,
-                          foreign_key: 'research_publication_id',
-                          association_foreign_key: :research_hal_author_id
+                          foreign_key: :research_hal_author_id,
+                          association_foreign_key: :research_publication_id
   has_and_belongs_to_many :university_person_researchers,
                           class_name: 'University::Person',
-                          foreign_key: :university_person_id,
-                          association_foreign_key: :research_hal_author_id
+                          foreign_key: :research_hal_author_id,
+                          association_foreign_key: :university_person_id
   alias :researchers :university_person_researchers
 
   scope :ordered, -> { order(:last_name, :first_name, :docid)}
diff --git a/app/models/research/laboratory.rb b/app/models/research/laboratory.rb
index ec5f2b3ce..8700b476a 100644
--- a/app/models/research/laboratory.rb
+++ b/app/models/research/laboratory.rb
@@ -41,8 +41,8 @@ class Research::Laboratory < ApplicationRecord
 
   has_and_belongs_to_many :researchers,
                           class_name: 'University::Person::Researcher',
-                          foreign_key: :university_person_id,
-                          association_foreign_key: :research_laboratory_id
+                          foreign_key: :research_laboratory_id,
+                          association_foreign_key: :university_person_id
 
   validates :name, :address, :city, :zipcode, :country, presence: true
 
diff --git a/app/models/research/publication.rb b/app/models/research/publication.rb
index ce6064e3b..7aed742dd 100644
--- a/app/models/research/publication.rb
+++ b/app/models/research/publication.rb
@@ -38,13 +38,13 @@ class Research::Publication < ApplicationRecord
 
   has_and_belongs_to_many :researchers,
                           class_name: 'University::Person',
-                          foreign_key: :university_person_id,
-                          association_foreign_key: :research_publication_id
+                          foreign_key: :research_publication_id,
+                          association_foreign_key: :university_person_id
 
   has_and_belongs_to_many :authors,
                           class_name: 'Research::Hal::Author',
-                          foreign_key: :research_hal_author_id,
-                          association_foreign_key: :research_publication_id
+                          foreign_key: :research_publication_id,
+                          association_foreign_key: :research_hal_author_id
 
   scope :ordered, -> { order(publication_date: :desc)}
 
@@ -100,7 +100,7 @@ class Research::Publication < ApplicationRecord
     return if hal?
     self.authors_citeproc = researchers.map do |researcher|
       {
-        "family" => researcher.last_name, 
+        "family" => researcher.last_name,
         "given" => researcher.first_name
       }
     end
diff --git a/app/models/university/person/with_research.rb b/app/models/university/person/with_research.rb
index d70abcb3f..043d0fb37 100644
--- a/app/models/university/person/with_research.rb
+++ b/app/models/university/person/with_research.rb
@@ -4,8 +4,8 @@ module University::Person::WithResearch
   included do
     has_and_belongs_to_many :research_hal_authors,
                             class_name: 'Research::Hal::Author',
-                            foreign_key: :research_hal_author_id,
-                            association_foreign_key: :university_person_id
+                            foreign_key: :university_person_id,
+                            association_foreign_key: :research_hal_author_id
                             alias :hal_authors :research_hal_authors
 
     has_many                :authored_research_theses,
@@ -20,14 +20,14 @@ module University::Person::WithResearch
 
     has_and_belongs_to_many :research_publications,
                             class_name: 'Research::Publication',
-                            foreign_key: :research_publication_id,
-                            association_foreign_key: :university_person_id
+                            foreign_key: :university_person_id,
+                            association_foreign_key: :research_publication_id
                             alias :publications :research_publications
 
     has_and_belongs_to_many :research_laboratories,
                             class_name: 'Research::Laboratory',
-                            foreign_key: :research_laboratory_id,
-                            association_foreign_key: :university_person_id
+                            foreign_key: :university_person_id,
+                            association_foreign_key: :research_laboratory_id
                             alias :laboratories :research_laboratories
 
     scope :with_hal_identifier, -> { where.not(hal_form_identifier: [nil,'']) }
diff --git a/db/migrate/20240209102931_reverse_column_names_in_join_tables.rb b/db/migrate/20240209102931_reverse_column_names_in_join_tables.rb
new file mode 100644
index 000000000..dcaad004d
--- /dev/null
+++ b/db/migrate/20240209102931_reverse_column_names_in_join_tables.rb
@@ -0,0 +1,33 @@
+class ReverseColumnNamesInJoinTables < ActiveRecord::Migration[7.1]
+  def change
+    # research_hal_author_id, university_person_id
+    rename_column :research_hal_authors_university_people, :research_hal_author_id, :temporary_id
+    rename_column :research_hal_authors_university_people, :university_person_id, :research_hal_author_id
+    rename_column :research_hal_authors_university_people, :temporary_id, :university_person_id
+
+    # research_publication_id, university_person_id
+    rename_column :research_publications_university_people, :research_publication_id, :temporary_id
+    rename_column :research_publications_university_people, :university_person_id, :research_publication_id
+    rename_column :research_publications_university_people, :temporary_id, :university_person_id
+
+    # research_hal_author_id, research_publication_id
+    rename_column :research_hal_authors_publications, :research_hal_author_id, :temporary_id
+    rename_column :research_hal_authors_publications, :research_publication_id, :research_hal_author_id
+    rename_column :research_hal_authors_publications, :temporary_id, :research_publication_id
+
+    # research_laboratory_id, university_person_id
+    rename_column :research_laboratories_university_people, :research_laboratory_id, :temporary_id
+    rename_column :research_laboratories_university_people, :university_person_id, :research_laboratory_id
+    rename_column :research_laboratories_university_people, :temporary_id, :university_person_id
+
+    # administration_location_id, education_school_id
+    rename_column :administration_locations_education_schools, :administration_location_id, :temporary_id
+    rename_column :administration_locations_education_schools, :education_school_id, :administration_location_id
+    rename_column :administration_locations_education_schools, :temporary_id, :education_school_id
+
+    # administration_location_id, education_program_id
+    rename_column :administration_locations_education_programs, :administration_location_id, :temporary_id
+    rename_column :administration_locations_education_programs, :education_program_id, :administration_location_id
+    rename_column :administration_locations_education_programs, :temporary_id, :education_program_id
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 5915dd513..cfa78093a 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -77,17 +77,17 @@ ActiveRecord::Schema[7.1].define(version: 2024_02_09_135241) do
   end
 
   create_table "administration_locations_education_programs", id: false, force: :cascade do |t|
-    t.uuid "administration_location_id", null: false
     t.uuid "education_program_id", null: false
-    t.index ["administration_location_id", "education_program_id"], name: "index_location_program"
-    t.index ["education_program_id", "administration_location_id"], name: "index_program_location"
+    t.uuid "administration_location_id", null: false
+    t.index ["administration_location_id", "education_program_id"], name: "index_program_location"
+    t.index ["education_program_id", "administration_location_id"], name: "index_location_program"
   end
 
   create_table "administration_locations_education_schools", id: false, force: :cascade do |t|
-    t.uuid "administration_location_id", null: false
     t.uuid "education_school_id", null: false
-    t.index ["administration_location_id", "education_school_id"], name: "index_location_school"
-    t.index ["education_school_id", "administration_location_id"], name: "index_school_location"
+    t.uuid "administration_location_id", null: false
+    t.index ["administration_location_id", "education_school_id"], name: "index_school_location"
+    t.index ["education_school_id", "administration_location_id"], name: "index_location_school"
   end
 
   create_table "administration_qualiopi_criterions", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
@@ -774,17 +774,17 @@ ActiveRecord::Schema[7.1].define(version: 2024_02_09_135241) do
   end
 
   create_table "research_hal_authors_publications", id: false, force: :cascade do |t|
-    t.uuid "research_hal_author_id", null: false
     t.uuid "research_publication_id", null: false
-    t.index ["research_hal_author_id", "research_publication_id"], name: "hal_author_publication"
-    t.index ["research_publication_id", "research_hal_author_id"], name: "hal_publication_author"
+    t.uuid "research_hal_author_id", null: false
+    t.index ["research_hal_author_id", "research_publication_id"], name: "hal_publication_author"
+    t.index ["research_publication_id", "research_hal_author_id"], name: "hal_author_publication"
   end
 
   create_table "research_hal_authors_university_people", id: false, force: :cascade do |t|
-    t.uuid "research_hal_author_id", null: false
     t.uuid "university_person_id", null: false
-    t.index ["research_hal_author_id", "university_person_id"], name: "hal_author_person"
-    t.index ["university_person_id", "research_hal_author_id"], name: "hal_person_author"
+    t.uuid "research_hal_author_id", null: false
+    t.index ["research_hal_author_id", "university_person_id"], name: "hal_person_author"
+    t.index ["university_person_id", "research_hal_author_id"], name: "hal_author_person"
   end
 
   create_table "research_journal_paper_kinds", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
@@ -884,10 +884,10 @@ ActiveRecord::Schema[7.1].define(version: 2024_02_09_135241) do
   end
 
   create_table "research_laboratories_university_people", id: false, force: :cascade do |t|
-    t.uuid "research_laboratory_id", null: false
     t.uuid "university_person_id", null: false
-    t.index ["research_laboratory_id", "university_person_id"], name: "laboratory_person"
-    t.index ["university_person_id", "research_laboratory_id"], name: "person_laboratory"
+    t.uuid "research_laboratory_id", null: false
+    t.index ["research_laboratory_id", "university_person_id"], name: "person_laboratory"
+    t.index ["university_person_id", "research_laboratory_id"], name: "laboratory_person"
   end
 
   create_table "research_laboratory_axes", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
@@ -929,10 +929,10 @@ ActiveRecord::Schema[7.1].define(version: 2024_02_09_135241) do
   end
 
   create_table "research_publications_university_people", id: false, force: :cascade do |t|
-    t.uuid "research_publication_id", null: false
     t.uuid "university_person_id", null: false
-    t.index ["research_publication_id", "university_person_id"], name: "index_publication_person"
-    t.index ["university_person_id", "research_publication_id"], name: "index_person_publication"
+    t.uuid "research_publication_id", null: false
+    t.index ["research_publication_id", "university_person_id"], name: "index_person_publication"
+    t.index ["university_person_id", "research_publication_id"], name: "index_publication_person"
   end
 
   create_table "research_theses", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
-- 
GitLab