From 1b585f5e7c6991eeb5ad6dbaf56664c93f980fa7 Mon Sep 17 00:00:00 2001 From: Thomas Leese Date: Fri, 27 Sep 2024 09:43:49 +0100 Subject: [PATCH 1/2] Create TeamProgramme This adds a new model for representing the relationship between teams and programmes. We're going to change programmes to be global (to make it easier to compare vaccination records between different teams) so we need a join table to link programmes with teams. The follow up work will be to remove the `team_id` column from programmes and use this join table instead. --- app/models/team_programme.rb | 27 ++++++++++++++++++ .../20240927083819_create_team_programmes.rb | 13 +++++++++ db/schema.rb | 10 +++++++ erd.pdf | Bin 64250 -> 64797 bytes spec/factories/team_programmes.rb | 27 ++++++++++++++++++ spec/models/team_programme_spec.rb | 26 +++++++++++++++++ 6 files changed, 103 insertions(+) create mode 100644 app/models/team_programme.rb create mode 100644 db/migrate/20240927083819_create_team_programmes.rb create mode 100644 spec/factories/team_programmes.rb create mode 100644 spec/models/team_programme_spec.rb diff --git a/app/models/team_programme.rb b/app/models/team_programme.rb new file mode 100644 index 000000000..292a7ec32 --- /dev/null +++ b/app/models/team_programme.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: team_programmes +# +# id :bigint not null, primary key +# programme_id :bigint not null +# team_id :bigint not null +# +# Indexes +# +# index_team_programmes_on_programme_id (programme_id) +# index_team_programmes_on_team_id (team_id) +# index_team_programmes_on_team_id_and_programme_id (team_id,programme_id) UNIQUE +# +# Foreign Keys +# +# fk_rails_... (programme_id => programmes.id) +# fk_rails_... (team_id => teams.id) +# +class TeamProgramme < ApplicationRecord + audited + + belongs_to :programme + belongs_to :team +end diff --git a/db/migrate/20240927083819_create_team_programmes.rb b/db/migrate/20240927083819_create_team_programmes.rb new file mode 100644 index 000000000..73fbb768a --- /dev/null +++ b/db/migrate/20240927083819_create_team_programmes.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class CreateTeamProgrammes < ActiveRecord::Migration[7.2] + def change + # rubocop:disable Rails/CreateTableWithTimestamps + create_table :team_programmes do |t| + t.references :team, foreign_key: true, null: false + t.references :programme, foreign_key: true, null: false + t.index %i[team_id programme_id], unique: true + end + # rubocop:enable Rails/CreateTableWithTimestamps + end +end diff --git a/db/schema.rb b/db/schema.rb index 450760dca..25b610f25 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -486,6 +486,14 @@ t.index ["team_id"], name: "index_sessions_on_team_id" end + create_table "team_programmes", force: :cascade do |t| + t.bigint "team_id", null: false + t.bigint "programme_id", null: false + t.index ["programme_id"], name: "index_team_programmes_on_programme_id" + t.index ["team_id", "programme_id"], name: "index_team_programmes_on_team_id_and_programme_id", unique: true + t.index ["team_id"], name: "index_team_programmes_on_team_id" + end + create_table "teams", force: :cascade do |t| t.text "name", null: false t.datetime "created_at", null: false @@ -649,6 +657,8 @@ add_foreign_key "programmes_sessions", "sessions" add_foreign_key "session_dates", "sessions" add_foreign_key "sessions", "teams" + add_foreign_key "team_programmes", "programmes" + add_foreign_key "team_programmes", "teams" add_foreign_key "triage", "patient_sessions" add_foreign_key "triage", "programmes" add_foreign_key "triage", "users", column: "performed_by_user_id" diff --git a/erd.pdf b/erd.pdf index e93c2857e3e5de4efb2fd64fb0ca109149af3e9c..8b050b80209911bf9bafd1c4082c7b0a87f2ec63 100644 GIT binary patch delta 23252 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]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 delta 22709 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 diff --git a/spec/factories/team_programmes.rb b/spec/factories/team_programmes.rb new file mode 100644 index 000000000..5f8f1e553 --- /dev/null +++ b/spec/factories/team_programmes.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: team_programmes +# +# id :bigint not null, primary key +# programme_id :bigint not null +# team_id :bigint not null +# +# Indexes +# +# index_team_programmes_on_programme_id (programme_id) +# index_team_programmes_on_team_id (team_id) +# index_team_programmes_on_team_id_and_programme_id (team_id,programme_id) UNIQUE +# +# Foreign Keys +# +# fk_rails_... (programme_id => programmes.id) +# fk_rails_... (team_id => teams.id) +# +FactoryBot.define do + factory :team_programme do + team + programme + end +end diff --git a/spec/models/team_programme_spec.rb b/spec/models/team_programme_spec.rb new file mode 100644 index 000000000..57171c9f4 --- /dev/null +++ b/spec/models/team_programme_spec.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: team_programmes +# +# id :bigint not null, primary key +# programme_id :bigint not null +# team_id :bigint not null +# +# Indexes +# +# index_team_programmes_on_programme_id (programme_id) +# index_team_programmes_on_team_id (team_id) +# index_team_programmes_on_team_id_and_programme_id (team_id,programme_id) UNIQUE +# +# Foreign Keys +# +# fk_rails_... (programme_id => programmes.id) +# fk_rails_... (team_id => teams.id) +# +describe TeamProgramme do + subject(:team_programme) { build(:team_programme) } + + it { should be_valid } +end From 288221c1284b888a6b25c09a797b99047ffa2831 Mon Sep 17 00:00:00 2001 From: Thomas Leese Date: Fri, 27 Sep 2024 10:43:14 +0100 Subject: [PATCH 2/2] Update Rake task to create TeamProgramme We're going to changing programmes to remove the relationship to teams so we need to update the Rake task to support this. --- lib/tasks/programmes.rake | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/tasks/programmes.rake b/lib/tasks/programmes.rake index 1a8e80d4d..cc1b04c40 100644 --- a/lib/tasks/programmes.rake +++ b/lib/tasks/programmes.rake @@ -19,6 +19,8 @@ namespace :programmes do programme = Programme.create!(team:, type:, vaccines:) + TeamProgramme.create!(team:, programme:) + puts "New #{programme.name} programme with ID #{programme.id} created." puts "Vaccines: #{vaccines.map(&:brand).join(", ")}" end