Update analytic to support new categories change

This commit is contained in:
2026-06-15 14:17:48 +07:00
parent 657a201fc0
commit 8c4d9c69d0
3 changed files with 52 additions and 8 deletions
@@ -0,0 +1,5 @@
DROP TRIGGER IF EXISTS trigger_validate_expense_item_expense_category ON expense_items;
DROP FUNCTION IF EXISTS validate_expense_item_expense_category();
ALTER TABLE expense_items
ALTER COLUMN purchase_category_id DROP NOT NULL;
@@ -0,0 +1,38 @@
DO $$
BEGIN
IF EXISTS (
SELECT 1
FROM expense_items ei
LEFT JOIN purchase_categories pc ON pc.id = ei.purchase_category_id
WHERE ei.purchase_category_id IS NULL
OR pc.id IS NULL
OR pc.type <> 'expense'
) THEN
RAISE EXCEPTION 'expense_items contains missing or non-expense purchase categories. Assign valid expense categories before running this migration.';
END IF;
END $$;
ALTER TABLE expense_items
ALTER COLUMN purchase_category_id SET NOT NULL;
CREATE OR REPLACE FUNCTION validate_expense_item_expense_category()
RETURNS TRIGGER AS $$
BEGIN
IF NOT EXISTS (
SELECT 1
FROM purchase_categories pc
WHERE pc.id = NEW.purchase_category_id
AND pc.type = 'expense'
) THEN
RAISE EXCEPTION 'expense_items.purchase_category_id must reference an expense purchase category';
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
DROP TRIGGER IF EXISTS trigger_validate_expense_item_expense_category ON expense_items;
CREATE TRIGGER trigger_validate_expense_item_expense_category
BEFORE INSERT OR UPDATE OF purchase_category_id ON expense_items
FOR EACH ROW
EXECUTE FUNCTION validate_expense_item_expense_category();