From b6b81a38d9e867ee1abadd55ef1872683255179d Mon Sep 17 00:00:00 2001 From: Nihal Mohammed Date: Fri, 22 Apr 2022 19:27:21 +0530 Subject: [PATCH 1/3] Migration to nullify spree_users_bill_address_id_fk foreign key on delete and remove addresses with empty phone. --- ...20220425102039_remove_bill_addresses_with_null_phone.rb | 7 +++++++ db/schema.rb | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20220425102039_remove_bill_addresses_with_null_phone.rb diff --git a/db/migrate/20220425102039_remove_bill_addresses_with_null_phone.rb b/db/migrate/20220425102039_remove_bill_addresses_with_null_phone.rb new file mode 100644 index 0000000000..5870d00d8f --- /dev/null +++ b/db/migrate/20220425102039_remove_bill_addresses_with_null_phone.rb @@ -0,0 +1,7 @@ +class RemoveBillAddressesWithNullPhone < ActiveRecord::Migration[6.1] + def change + remove_foreign_key "spree_users", "spree_addresses", column: "bill_address_id", name: "spree_users_bill_address_id_fk" + add_foreign_key "spree_users", "spree_addresses", column: "bill_address_id", name: "spree_users_bill_address_id_fk", on_delete: :nullify + execute("DELETE from spree_addresses WHERE phone IS NULL AND id IN(SELECT bill_address_id FROM spree_users)") + end +end diff --git a/db/schema.rb b/db/schema.rb index 010059c3d6..edfd135051 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -1300,7 +1300,7 @@ ActiveRecord::Schema.define(version: 2022_06_02_013938) do add_foreign_key "spree_tax_rates", "spree_zones", column: "zone_id", name: "spree_tax_rates_zone_id_fk" add_foreign_key "spree_taxons", "spree_taxonomies", column: "taxonomy_id", name: "spree_taxons_taxonomy_id_fk" add_foreign_key "spree_taxons", "spree_taxons", column: "parent_id", name: "spree_taxons_parent_id_fk" - add_foreign_key "spree_users", "spree_addresses", column: "bill_address_id", name: "spree_users_bill_address_id_fk" + add_foreign_key "spree_users", "spree_addresses", column: "bill_address_id", name: "spree_users_bill_address_id_fk", on_delete: :nullify add_foreign_key "spree_users", "spree_addresses", column: "ship_address_id", name: "spree_users_ship_address_id_fk" add_foreign_key "spree_variants", "spree_products", column: "product_id", name: "spree_variants_product_id_fk" add_foreign_key "spree_zone_members", "spree_zones", column: "zone_id", name: "spree_zone_members_zone_id_fk" From 870eb8961e2a14ab3099e8a2646351d43cec0a5c Mon Sep 17 00:00:00 2001 From: Nihal Mohammed Date: Tue, 17 May 2022 00:42:42 +0530 Subject: [PATCH 2/3] Update migration --- ...9_remove_bill_addresses_with_null_phone.rb | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/db/migrate/20220425102039_remove_bill_addresses_with_null_phone.rb b/db/migrate/20220425102039_remove_bill_addresses_with_null_phone.rb index 5870d00d8f..282413a56c 100644 --- a/db/migrate/20220425102039_remove_bill_addresses_with_null_phone.rb +++ b/db/migrate/20220425102039_remove_bill_addresses_with_null_phone.rb @@ -1,7 +1,21 @@ class RemoveBillAddressesWithNullPhone < ActiveRecord::Migration[6.1] - def change - remove_foreign_key "spree_users", "spree_addresses", column: "bill_address_id", name: "spree_users_bill_address_id_fk" - add_foreign_key "spree_users", "spree_addresses", column: "bill_address_id", name: "spree_users_bill_address_id_fk", on_delete: :nullify - execute("DELETE from spree_addresses WHERE phone IS NULL AND id IN(SELECT bill_address_id FROM spree_users)") + class BillAddress < ActiveRecord::Base + self.table_name "spree_addresses" + + scope :invalid, -> { where(phone: nil) } + end + + class SpreeUser < ActiveRecord::Base + belongs_to :bill_address + + def self.invalid_bill_address_ids + joins(:bill_address).merge(BillAddress.invalid).pluck(:bill_address_id) + end + end + + def up + address_ids = SpreeUser.invalid_bill_address_ids + SpreeUser.where(bill_address_id: address_ids).update_all(bill_address_id: nil) + BillAddress.where(id: address_ids).delete_all end end From d27d98419fc96d1e039401d87d1c33b811224a5e Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 17 May 2022 16:45:19 +1000 Subject: [PATCH 3/3] Fix typo in address migration --- .../20220425102039_remove_bill_addresses_with_null_phone.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/migrate/20220425102039_remove_bill_addresses_with_null_phone.rb b/db/migrate/20220425102039_remove_bill_addresses_with_null_phone.rb index 282413a56c..f0d767f95a 100644 --- a/db/migrate/20220425102039_remove_bill_addresses_with_null_phone.rb +++ b/db/migrate/20220425102039_remove_bill_addresses_with_null_phone.rb @@ -1,6 +1,6 @@ class RemoveBillAddressesWithNullPhone < ActiveRecord::Migration[6.1] class BillAddress < ActiveRecord::Base - self.table_name "spree_addresses" + self.table_name = "spree_addresses" scope :invalid, -> { where(phone: nil) } end