Files
nexarch/migrations/0025_user_migration_map_approval.up.sql
patrickandClaude Sonnet 5 b098e99b30 MAP-04: migration fuer user_migration_map-freigabe-workflow
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>
2026-10-14 21:55:58 +00:00

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);