From a08466a28ea0fbc7d5ffba2d4d304f3027157e4d Mon Sep 17 00:00:00 2001 From: aguhh18 Date: Tue, 6 Jan 2026 12:43:52 +0700 Subject: [PATCH] FIX(BE): update foreign key constraints to use ON DELETE NO ACTION for expense and marketing tables --- ...13501_alter_expense_fk_to_cascade.down.sql | 15 ++++++++ ...6113501_alter_expense_fk_to_cascade.up.sql | 16 +++++++++ ...13502_ensure_marketing_fk_cascade.down.sql | 20 +++++++++++ ...6113502_ensure_marketing_fk_cascade.up.sql | 35 +++++++++++++++++++ 4 files changed, 86 insertions(+) create mode 100644 internal/database/migrations/20260106113501_alter_expense_fk_to_cascade.down.sql create mode 100644 internal/database/migrations/20260106113501_alter_expense_fk_to_cascade.up.sql create mode 100644 internal/database/migrations/20260106113502_ensure_marketing_fk_cascade.down.sql create mode 100644 internal/database/migrations/20260106113502_ensure_marketing_fk_cascade.up.sql diff --git a/internal/database/migrations/20260106113501_alter_expense_fk_to_cascade.down.sql b/internal/database/migrations/20260106113501_alter_expense_fk_to_cascade.down.sql new file mode 100644 index 00000000..2a212b3b --- /dev/null +++ b/internal/database/migrations/20260106113501_alter_expense_fk_to_cascade.down.sql @@ -0,0 +1,15 @@ +-- Revert back to NO ACTION (RESTRICT behavior) +ALTER TABLE expense_nonstocks DROP CONSTRAINT IF EXISTS fk_expense_nonstocks_expense_id; + +ALTER TABLE expense_nonstocks + ADD CONSTRAINT fk_expense_nonstocks_expense_id + FOREIGN KEY (expense_id) REFERENCES expenses(id) + ON DELETE NO ACTION; + +-- Revert expense_realizations FK +ALTER TABLE expense_realizations DROP CONSTRAINT IF EXISTS fk_expense_realizations_nonstock_id; + +ALTER TABLE expense_realizations + ADD CONSTRAINT fk_expense_realizations_nonstock_id + FOREIGN KEY (expense_nonstock_id) REFERENCES expense_nonstocks(id) + ON DELETE NO ACTION; diff --git a/internal/database/migrations/20260106113501_alter_expense_fk_to_cascade.up.sql b/internal/database/migrations/20260106113501_alter_expense_fk_to_cascade.up.sql new file mode 100644 index 00000000..6567c5d2 --- /dev/null +++ b/internal/database/migrations/20260106113501_alter_expense_fk_to_cascade.up.sql @@ -0,0 +1,16 @@ +-- Drop existing FK constraints +ALTER TABLE expense_nonstocks DROP CONSTRAINT IF EXISTS fk_expense_nonstocks_expense_id; + +-- Recreate with ON DELETE CASCADE +ALTER TABLE expense_nonstocks + ADD CONSTRAINT fk_expense_nonstocks_expense_id + FOREIGN KEY (expense_id) REFERENCES expenses(id) + ON DELETE CASCADE; + +-- Drop and recreate expense_realizations FK +ALTER TABLE expense_realizations DROP CONSTRAINT IF EXISTS fk_expense_realizations_nonstock_id; + +ALTER TABLE expense_realizations + ADD CONSTRAINT fk_expense_realizations_nonstock_id + FOREIGN KEY (expense_nonstock_id) REFERENCES expense_nonstocks(id) + ON DELETE CASCADE; diff --git a/internal/database/migrations/20260106113502_ensure_marketing_fk_cascade.down.sql b/internal/database/migrations/20260106113502_ensure_marketing_fk_cascade.down.sql new file mode 100644 index 00000000..91ef5903 --- /dev/null +++ b/internal/database/migrations/20260106113502_ensure_marketing_fk_cascade.down.sql @@ -0,0 +1,20 @@ +-- Revert back to NO ACTION (for rollback safety) +DO $$ +BEGIN + ALTER TABLE marketing_products DROP CONSTRAINT IF EXISTS fk_marketing_products_marketing_id; + + ALTER TABLE marketing_products + ADD CONSTRAINT fk_marketing_products_marketing_id + FOREIGN KEY (marketing_id) REFERENCES marketings(id) + ON DELETE NO ACTION; +END $$; + +DO $$ +BEGIN + ALTER TABLE marketing_delivery_products DROP CONSTRAINT IF EXISTS fk_marketing_delivery_products_marketing_product_id; + + ALTER TABLE marketing_delivery_products + ADD CONSTRAINT fk_marketing_delivery_products_marketing_product_id + FOREIGN KEY (marketing_product_id) REFERENCES marketing_products(id) + ON DELETE NO ACTION; +END $$; diff --git a/internal/database/migrations/20260106113502_ensure_marketing_fk_cascade.up.sql b/internal/database/migrations/20260106113502_ensure_marketing_fk_cascade.up.sql new file mode 100644 index 00000000..801c841d --- /dev/null +++ b/internal/database/migrations/20260106113502_ensure_marketing_fk_cascade.up.sql @@ -0,0 +1,35 @@ +-- Ensure marketing_products FK is CASCADE (it should already be, but let's make sure) +DO $$ +BEGIN + -- Drop existing FK if exists + IF EXISTS ( + SELECT 1 FROM pg_constraint + WHERE conname = 'fk_marketing_products_marketing_id' + ) THEN + ALTER TABLE marketing_products DROP CONSTRAINT fk_marketing_products_marketing_id; + END IF; + + -- Recreate with ON DELETE CASCADE + ALTER TABLE marketing_products + ADD CONSTRAINT fk_marketing_products_marketing_id + FOREIGN KEY (marketing_id) REFERENCES marketings(id) + ON DELETE CASCADE; +END $$; + +-- Ensure marketing_delivery_products FK is CASCADE +DO $$ +BEGIN + -- Drop existing FK if exists + IF EXISTS ( + SELECT 1 FROM pg_constraint + WHERE conname = 'fk_marketing_delivery_products_marketing_product_id' + ) THEN + ALTER TABLE marketing_delivery_products DROP CONSTRAINT fk_marketing_delivery_products_marketing_product_id; + END IF; + + -- Recreate with ON DELETE CASCADE + ALTER TABLE marketing_delivery_products + ADD CONSTRAINT fk_marketing_delivery_products_marketing_product_id + FOREIGN KEY (marketing_product_id) REFERENCES marketing_products(id) + ON DELETE CASCADE; +END $$;