diff --git a/db/migrate/20260530000000_change_payments_payer_to_person_organization.rb b/db/migrate/20260530000000_change_payments_payer_to_person_organization.rb index 96a28d81c..8040e7ee6 100644 --- a/db/migrate/20260530000000_change_payments_payer_to_person_organization.rb +++ b/db/migrate/20260530000000_change_payments_payer_to_person_organization.rb @@ -1,11 +1,28 @@ class ChangePaymentsPayerToPersonOrganization < ActiveRecord::Migration[8.1] - def change - remove_index :payments, name: "index_payments_on_payer" - remove_index :payments, name: "index_payments_on_payer_type_and_payer_id" + def up + remove_index :payments, name: "index_payments_on_payer", if_exists: true + remove_index :payments, name: "index_payments_on_payer_type_and_payer_id", if_exists: true - remove_column :payments, :payer_id + remove_column :payments, :payer_id, if_exists: true - add_reference :payments, :person, foreign_key: true - add_reference :payments, :organization, type: :integer, foreign_key: true + unless column_exists?(:payments, :person_id) + add_column :payments, :person_id, :bigint + end + add_index :payments, :person_id, if_not_exists: true + add_foreign_key :payments, :people, column: :person_id unless foreign_key_exists?(:payments, :people, column: :person_id) + unless column_exists?(:payments, :organization_id) + add_column :payments, :organization_id, :integer + end + add_index :payments, :organization_id, if_not_exists: true + add_foreign_key :payments, :organizations, column: :organization_id unless foreign_key_exists?(:payments, :organizations, column: :organization_id) + end + + def down + remove_reference :payments, :organization, foreign_key: true, if_exists: true + remove_reference :payments, :person, foreign_key: true, if_exists: true + + add_column :payments, :payer_id, :bigint unless column_exists?(:payments, :payer_id) + add_index :payments, [ :payer_type, :payer_id ], name: "index_payments_on_payer", if_not_exists: true + add_index :payments, [ :payer_type, :payer_id ], name: "index_payments_on_payer_type_and_payer_id", if_not_exists: true end end