Skip to content

Commit 434d998

Browse files
committed
Add school_id column
This adds a `school_id` column to the `patient_locations` table which will eventually replace the `location_id` column. We're doing this because the plan is for the patient-location association to belong an explicit patient-school association, while the association between patients and clinics is built using a different mechanism. Jira-Issue: MAV-7114 Jira-Issue: MAV-7113
1 parent 7de67c7 commit 434d998

5 files changed

Lines changed: 51 additions & 0 deletions

File tree

app/models/patient_location.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,24 @@
1111
# updated_at :datetime not null
1212
# location_id :bigint not null
1313
# patient_id :bigint not null
14+
# school_id :bigint
1415
#
1516
# Indexes
1617
#
1718
# idx_on_location_id_academic_year_patient_id_3237b32fa0 (location_id,academic_year,patient_id) UNIQUE
1819
# idx_on_patient_id_location_id_academic_year_08a1dc4afe (patient_id,location_id,academic_year) UNIQUE
20+
# idx_on_patient_id_school_id_academic_year_652216fa07 (patient_id,school_id,academic_year) UNIQUE
21+
# idx_on_school_id_academic_year_patient_id_c647e75f26 (school_id,academic_year,patient_id) UNIQUE
1922
# index_patient_locations_on_location_id (location_id)
2023
# index_patient_locations_on_location_id_and_academic_year (location_id,academic_year)
24+
# index_patient_locations_on_school_id (school_id)
25+
# index_patient_locations_on_school_id_and_academic_year (school_id,academic_year)
2126
#
2227
# Foreign Keys
2328
#
2429
# fk_rails_... (location_id => locations.id)
2530
# fk_rails_... (patient_id => patients.id)
31+
# fk_rails_... (school_id => locations.id)
2632
#
2733

2834
class PatientLocation < ApplicationRecord
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# frozen_string_literal: true
2+
3+
class AddSchoolToPatientLocations < ActiveRecord::Migration[8.1]
4+
disable_ddl_transaction!
5+
6+
def change
7+
add_reference :patient_locations,
8+
:school,
9+
foreign_key: {
10+
to_table: :locations
11+
}
12+
13+
add_index :patient_locations,
14+
%i[school_id academic_year],
15+
algorithm: :concurrently
16+
17+
add_index :patient_locations,
18+
%i[school_id academic_year patient_id],
19+
unique: true,
20+
algorithm: :concurrently
21+
22+
add_index :patient_locations,
23+
%i[patient_id school_id academic_year],
24+
unique: true,
25+
algorithm: :concurrently
26+
end
27+
end

db/schema.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -652,11 +652,16 @@
652652
t.daterange "date_range", default: -::Float::INFINITY...::Float::INFINITY, null: false
653653
t.bigint "location_id", null: false
654654
t.bigint "patient_id", null: false
655+
t.bigint "school_id"
655656
t.datetime "updated_at", null: false
656657
t.index ["location_id", "academic_year", "patient_id"], name: "idx_on_location_id_academic_year_patient_id_3237b32fa0", unique: true
657658
t.index ["location_id", "academic_year"], name: "index_patient_locations_on_location_id_and_academic_year"
658659
t.index ["location_id"], name: "index_patient_locations_on_location_id"
659660
t.index ["patient_id", "location_id", "academic_year"], name: "idx_on_patient_id_location_id_academic_year_08a1dc4afe", unique: true
661+
t.index ["patient_id", "school_id", "academic_year"], name: "idx_on_patient_id_school_id_academic_year_652216fa07", unique: true
662+
t.index ["school_id", "academic_year", "patient_id"], name: "idx_on_school_id_academic_year_patient_id_c647e75f26", unique: true
663+
t.index ["school_id", "academic_year"], name: "index_patient_locations_on_school_id_and_academic_year"
664+
t.index ["school_id"], name: "index_patient_locations_on_school_id"
660665
end
661666

662667
create_table "patient_merge_log_entries", force: :cascade do |t|
@@ -1166,6 +1171,7 @@
11661171
add_foreign_key "patient_changesets", "locations", column: "school_id"
11671172
add_foreign_key "patient_changesets", "patients"
11681173
add_foreign_key "patient_locations", "locations"
1174+
add_foreign_key "patient_locations", "locations", column: "school_id"
11691175
add_foreign_key "patient_locations", "patients"
11701176
add_foreign_key "patient_merge_log_entries", "patients", on_delete: :cascade
11711177
add_foreign_key "patient_merge_log_entries", "users"

spec/factories/patient_locations.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,24 @@
1111
# updated_at :datetime not null
1212
# location_id :bigint not null
1313
# patient_id :bigint not null
14+
# school_id :bigint
1415
#
1516
# Indexes
1617
#
1718
# idx_on_location_id_academic_year_patient_id_3237b32fa0 (location_id,academic_year,patient_id) UNIQUE
1819
# idx_on_patient_id_location_id_academic_year_08a1dc4afe (patient_id,location_id,academic_year) UNIQUE
20+
# idx_on_patient_id_school_id_academic_year_652216fa07 (patient_id,school_id,academic_year) UNIQUE
21+
# idx_on_school_id_academic_year_patient_id_c647e75f26 (school_id,academic_year,patient_id) UNIQUE
1922
# index_patient_locations_on_location_id (location_id)
2023
# index_patient_locations_on_location_id_and_academic_year (location_id,academic_year)
24+
# index_patient_locations_on_school_id (school_id)
25+
# index_patient_locations_on_school_id_and_academic_year (school_id,academic_year)
2126
#
2227
# Foreign Keys
2328
#
2429
# fk_rails_... (location_id => locations.id)
2530
# fk_rails_... (patient_id => patients.id)
31+
# fk_rails_... (school_id => locations.id)
2632
#
2733
FactoryBot.define do
2834
factory :patient_location do

spec/models/patient_location_spec.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,24 @@
1111
# updated_at :datetime not null
1212
# location_id :bigint not null
1313
# patient_id :bigint not null
14+
# school_id :bigint
1415
#
1516
# Indexes
1617
#
1718
# idx_on_location_id_academic_year_patient_id_3237b32fa0 (location_id,academic_year,patient_id) UNIQUE
1819
# idx_on_patient_id_location_id_academic_year_08a1dc4afe (patient_id,location_id,academic_year) UNIQUE
20+
# idx_on_patient_id_school_id_academic_year_652216fa07 (patient_id,school_id,academic_year) UNIQUE
21+
# idx_on_school_id_academic_year_patient_id_c647e75f26 (school_id,academic_year,patient_id) UNIQUE
1922
# index_patient_locations_on_location_id (location_id)
2023
# index_patient_locations_on_location_id_and_academic_year (location_id,academic_year)
24+
# index_patient_locations_on_school_id (school_id)
25+
# index_patient_locations_on_school_id_and_academic_year (school_id,academic_year)
2126
#
2227
# Foreign Keys
2328
#
2429
# fk_rails_... (location_id => locations.id)
2530
# fk_rails_... (patient_id => patients.id)
31+
# fk_rails_... (school_id => locations.id)
2632
#
2733

2834
describe PatientLocation do

0 commit comments

Comments
 (0)