Erweitert user_migration_map (COR-02) additiv um status/rejected_by/ rejected_at + user_migration_map_audit, analog zu 0024 (tenant_migration_map, MAP-02). COR-02 liest weiterhin unveraendert approved_at IS NOT NULL. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
27 lines
1.3 KiB
SQL
27 lines
1.3 KiB
SQL
-- MAP-04: Freigabe-Workflow fuer user_migration_map (erweitert den
|
|
-- COR-02-Stub aus 0020/0023), analog zu 0024 (tenant_migration_map). status
|
|
-- ersetzt die reine approved_at-Pruefung um einen expliziten
|
|
-- Ablehnungs-Zustand; approved_at/approved_by bleiben bestehen, da COR-02
|
|
-- bereits darauf liest.
|
|
ALTER TABLE user_migration_map
|
|
ADD COLUMN status TEXT NOT NULL DEFAULT 'pending',
|
|
ADD COLUMN rejected_by TEXT,
|
|
ADD COLUMN rejected_at TIMESTAMPTZ,
|
|
ADD CONSTRAINT user_migration_map_status_check
|
|
CHECK (status IN ('pending', 'approved', 'rejected')),
|
|
ADD CONSTRAINT user_migration_map_status_approved_consistent
|
|
CHECK (status != 'approved' OR (approved_at IS NOT NULL AND approved_by IS NOT NULL)),
|
|
ADD CONSTRAINT user_migration_map_status_rejected_consistent
|
|
CHECK (status != 'rejected' OR (rejected_at IS NOT NULL AND rejected_by IS NOT NULL));
|
|
|
|
CREATE TABLE user_migration_map_audit (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
map_id BIGINT NOT NULL REFERENCES user_migration_map(id),
|
|
action TEXT NOT NULL CHECK (action IN ('approved', 'rejected')),
|
|
performed_by TEXT NOT NULL,
|
|
performed_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
note TEXT
|
|
);
|
|
|
|
CREATE INDEX user_migration_map_audit_map_id_idx ON user_migration_map_audit (map_id);
|