31 lines
1.2 KiB
MySQL
31 lines
1.2 KiB
MySQL
|
|
-- Smart-archive feature — add columns that capture WHO archived a client,
|
||
|
|
-- WHY, and WHAT decisions they made along the way (for the restore
|
||
|
|
-- wizard to attempt reversal).
|
||
|
|
--
|
||
|
|
-- archived_at already exists (since the original schema). The three new
|
||
|
|
-- columns are all nullable and default-friendly so existing archived
|
||
|
|
-- rows backfill cleanly: their reason/metadata stays NULL, which the
|
||
|
|
-- service treats as "legacy archive (no smart-archive metadata)".
|
||
|
|
|
||
|
|
ALTER TABLE clients ADD COLUMN IF NOT EXISTS archived_by text;
|
||
|
|
ALTER TABLE clients ADD COLUMN IF NOT EXISTS archive_reason text;
|
||
|
|
ALTER TABLE clients ADD COLUMN IF NOT EXISTS archive_metadata jsonb;
|
||
|
|
|
||
|
|
-- archived_by FK is SET NULL on user delete so the audit trail outlives
|
||
|
|
-- staff turnover. Not VALID immediately to keep the lock window short;
|
||
|
|
-- VALIDATE after the column is in place.
|
||
|
|
DO $$
|
||
|
|
BEGIN
|
||
|
|
IF NOT EXISTS (
|
||
|
|
SELECT 1 FROM pg_constraint WHERE conname = 'clients_archived_by_fk'
|
||
|
|
) THEN
|
||
|
|
ALTER TABLE clients
|
||
|
|
ADD CONSTRAINT clients_archived_by_fk
|
||
|
|
FOREIGN KEY (archived_by) REFERENCES "user"(id)
|
||
|
|
ON DELETE SET NULL
|
||
|
|
NOT VALID;
|
||
|
|
END IF;
|
||
|
|
END$$;
|
||
|
|
|
||
|
|
ALTER TABLE clients VALIDATE CONSTRAINT clients_archived_by_fk;
|