Browse Source

fix foreign key for org/scheme

pull/726/head
Ted-U 3 years ago
parent
commit
1d880812e9
  1. 6
      app/models/organisation.rb
  2. 4
      app/models/scheme.rb
  3. 2
      app/models/user.rb
  4. 2
      db/migrate/20220629105452_add_stock_owning_organisation_to_schemes.rb
  5. 15
      db/migrate/20220719122509_add_delete_cascade.rb
  6. 14
      db/schema.rb
  7. 5
      spec/features/organisation_spec.rb

6
app/models/organisation.rb

@ -1,11 +1,11 @@
class Organisation < ApplicationRecord class Organisation < ApplicationRecord
has_many :users, dependent: :destroy has_many :users, dependent: :delete_all
has_many :owned_case_logs, class_name: "CaseLog", foreign_key: "owning_organisation_id", dependent: :destroy has_many :owned_case_logs, class_name: "CaseLog", foreign_key: "owning_organisation_id", dependent: :delete_all
has_many :managed_case_logs, class_name: "CaseLog", foreign_key: "managing_organisation_id" has_many :managed_case_logs, class_name: "CaseLog", foreign_key: "managing_organisation_id"
has_many :data_protection_confirmations has_many :data_protection_confirmations
has_many :organisation_rent_periods has_many :organisation_rent_periods
has_many :owned_schemes, class_name: "Scheme", foreign_key: "owning_organisation_id", dependent: :destroy has_many :owned_schemes, class_name: "Scheme", foreign_key: "owning_organisation_id", dependent: :delete_all
has_many :managed_schemes, class_name: "Scheme", foreign_key: "managing_organisation_id" has_many :managed_schemes, class_name: "Scheme", foreign_key: "managing_organisation_id"
scope :search_by_name, ->(name) { where("name ILIKE ?", "%#{name}%") } scope :search_by_name, ->(name) { where("name ILIKE ?", "%#{name}%") }

4
app/models/scheme.rb

@ -1,8 +1,8 @@
class Scheme < ApplicationRecord class Scheme < ApplicationRecord
belongs_to :owning_organisation, class_name: "Organisation" belongs_to :owning_organisation, class_name: "Organisation"
belongs_to :managing_organisation, optional: true, class_name: "Organisation" belongs_to :managing_organisation, optional: true, class_name: "Organisation"
has_many :locations has_many :locations, dependent: :delete_all
has_many :case_logs has_many :case_logs, dependent: :delete_all
scope :filter_by_id, ->(id) { where(id: (id.start_with?("S") ? id[1..] : id)) } scope :filter_by_id, ->(id) { where(id: (id.start_with?("S") ? id[1..] : id)) }
scope :search_by_service_name, ->(name) { where("service_name ILIKE ?", "%#{name}%") } scope :search_by_service_name, ->(name) { where("service_name ILIKE ?", "%#{name}%") }

2
app/models/user.rb

@ -5,7 +5,7 @@ class User < ApplicationRecord
:trackable, :lockable, :two_factor_authenticatable, :confirmable, :timeoutable :trackable, :lockable, :two_factor_authenticatable, :confirmable, :timeoutable
belongs_to :organisation belongs_to :organisation
has_many :owned_case_logs, through: :organisation has_many :owned_case_logs, through: :organisation, dependent: :destroy
has_many :managed_case_logs, through: :organisation has_many :managed_case_logs, through: :organisation
has_paper_trail ignore: %w[last_sign_in_at has_paper_trail ignore: %w[last_sign_in_at

2
db/migrate/20220629105452_add_stock_owning_organisation_to_schemes.rb

@ -1,5 +1,5 @@
class AddStockOwningOrganisationToSchemes < ActiveRecord::Migration[7.0] class AddStockOwningOrganisationToSchemes < ActiveRecord::Migration[7.0]
def change def change
add_reference :schemes, :stock_owning_organisation, foreign_key: { to_table: :organisations } add_reference :schemes, :stock_owning_organisation, foreign_key: { to_table: :organisations }, column: "owning_organisation_id"
end end
end end

15
db/migrate/20220719122509_add_delete_cascade.rb

@ -0,0 +1,15 @@
class AddDeleteCascade < ActiveRecord::Migration[7.0]
def up
remove_foreign_key :schemes, :organisations, column: "managing_organisation_id"
remove_foreign_key :schemes, :organisations, column: "owning_organisation_id"
add_foreign_key :schemes, :organisations, column: "managing_organisation_id", on_delete: :cascade
add_foreign_key :schemes, :organisations, column: "owning_organisation_id", on_delete: :cascade
end
def down
remove_foreign_key :schemes, :organisations, column: "managing_organisation_id"
remove_foreign_key :schemes, :organisations, column: "owning_organisation_id"
add_foreign_key :schemes, :organisations, column: "managing_organisation_id"
add_foreign_key :schemes, :organisations, column: "owning_organisation_id"
end
end

14
db/schema.rb

@ -10,9 +10,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[7.0].define(version: 2022_07_19_122509) do
ActiveRecord::Schema[7.0].define(version: 2022_07_15_133937) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
@ -259,7 +257,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_07_15_133937) do
create_table "logs_exports", force: :cascade do |t| create_table "logs_exports", force: :cascade do |t|
t.datetime "created_at", default: -> { "CURRENT_TIMESTAMP" } t.datetime "created_at", default: -> { "CURRENT_TIMESTAMP" }
t.datetime "started_at", precision: nil, null: false t.datetime "started_at", null: false
t.integer "base_number", default: 1, null: false t.integer "base_number", default: 1, null: false
t.integer "increment_number", default: 1, null: false t.integer "increment_number", default: 1, null: false
t.boolean "empty_export", default: false, null: false t.boolean "empty_export", default: false, null: false
@ -301,9 +299,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_07_15_133937) do
t.integer "unspecified_units" t.integer "unspecified_units"
t.string "old_org_id" t.string "old_org_id"
t.integer "old_visible_id" t.integer "old_visible_id"
t.bigint "user_id"
t.index ["old_visible_id"], name: "index_organisations_on_old_visible_id", unique: true t.index ["old_visible_id"], name: "index_organisations_on_old_visible_id", unique: true
t.index ["user_id"], name: "index_organisations_on_user_id"
end end
create_table "schemes", force: :cascade do |t| create_table "schemes", force: :cascade do |t|
@ -385,7 +381,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_07_15_133937) do
add_foreign_key "case_logs", "locations" add_foreign_key "case_logs", "locations"
add_foreign_key "case_logs", "schemes" add_foreign_key "case_logs", "schemes"
add_foreign_key "locations", "schemes" add_foreign_key "locations", "schemes"
add_foreign_key "organisations", "users" add_foreign_key "schemes", "organisations", column: "managing_organisation_id", on_delete: :cascade
add_foreign_key "schemes", "organisations", column: "managing_organisation_id" add_foreign_key "schemes", "organisations", column: "owning_organisation_id", on_delete: :cascade
add_foreign_key "schemes", "organisations", column: "owning_organisation_id" add_foreign_key "users", "organisations", on_delete: :cascade
end end

5
spec/features/organisation_spec.rb

@ -226,7 +226,7 @@ RSpec.describe "User Features" do
describe "delete cascade" do describe "delete cascade" do
context "when the organisation is deleted" do context "when the organisation is deleted" do
let!(:organisation) { FactoryBot.create(:organisation) } let!(:organisation) { FactoryBot.create(:organisation) }
let!(:user) { FactoryBot.create(:user, :support, last_sign_in_at: Time.zone.now, organisation: organisation) } let!(:user) { FactoryBot.create(:user, :support, last_sign_in_at: Time.zone.now, organisation:) }
let!(:scheme_to_delete) { FactoryBot.create(:scheme, owning_organisation: user.organisation) } let!(:scheme_to_delete) { FactoryBot.create(:scheme, owning_organisation: user.organisation) }
let!(:log_to_delete) { FactoryBot.create(:case_log, owning_organisation: user.organisation) } let!(:log_to_delete) { FactoryBot.create(:case_log, owning_organisation: user.organisation) }
@ -241,11 +241,10 @@ RSpec.describe "User Features" do
context "when the organisation is deleted" do context "when the organisation is deleted" do
let!(:organisation) { FactoryBot.create(:organisation) } let!(:organisation) { FactoryBot.create(:organisation) }
let!(:user) { FactoryBot.create(:user, :support, last_sign_in_at: Time.zone.now, organisation: organisation) } let!(:user) { FactoryBot.create(:user, :support, last_sign_in_at: Time.zone.now, organisation:) }
let!(:scheme_to_delete) { FactoryBot.create(:scheme, owning_organisation: user.organisation) } let!(:scheme_to_delete) { FactoryBot.create(:scheme, owning_organisation: user.organisation) }
let!(:log_to_delete) { FactoryBot.create(:case_log, owning_organisation: user.organisation) } let!(:log_to_delete) { FactoryBot.create(:case_log, owning_organisation: user.organisation) }
it "child relationships ie logs, schemes and users are deleted too - database" do it "child relationships ie logs, schemes and users are deleted too - database" do
ActiveRecord::Base.connection.exec_query("DELETE FROM organisations WHERE id = #{organisation.id};") ActiveRecord::Base.connection.exec_query("DELETE FROM organisations WHERE id = #{organisation.id};")
expect { CaseLog.find(log_to_delete.id) }.to raise_error(ActiveRecord::RecordNotFound) expect { CaseLog.find(log_to_delete.id) }.to raise_error(ActiveRecord::RecordNotFound)

Loading…
Cancel
Save