Files
atlas-seller-kit/packages/database/migrations/045_pricing_snapshot_guards.sql
2026-09-28 17:34:33 +08:00

19 lines
1.1 KiB
PL/PgSQL

SET search_path TO atlas, public;
ALTER TABLE product_variant_platform_listings ADD CONSTRAINT valid_pricing_requires_quote CHECK(NOT pricing_valid OR pricing_quote_id IS NOT NULL);
-- 确认后只新增报价切换引用,不允许修改历史金额或规则快照。
CREATE FUNCTION prevent_confirmed_pricing_mutation() RETURNS trigger LANGUAGE plpgsql SET search_path = atlas, public AS $$
BEGIN
IF TG_TABLE_NAME='pricing_quotes' THEN
IF OLD.status='confirmed' THEN RAISE EXCEPTION '已确认报价不可改写' USING ERRCODE='23514'; END IF;
ELSE
IF EXISTS(SELECT 1 FROM pricing_quotes WHERE id=OLD.quote_id AND workspace_id=OLD.workspace_id AND status='confirmed') THEN
RAISE EXCEPTION '已确认候选快照不可改写' USING ERRCODE='23514';
END IF;
END IF;
RETURN NEW;
END $$;
CREATE TRIGGER confirmed_quote_immutable BEFORE UPDATE ON pricing_quotes FOR EACH ROW EXECUTE FUNCTION prevent_confirmed_pricing_mutation();
CREATE TRIGGER confirmed_option_immutable BEFORE UPDATE ON pricing_quote_options FOR EACH ROW EXECUTE FUNCTION prevent_confirmed_pricing_mutation();