Files
nexarch/workflow/migrations/tenant/0013_event_dispatch.up.sql
patrickandClaude Sonnet 5 6e586b9087
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (pull_request) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / Web (dms-browser) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (pull_request) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (pull_request) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (pull_request) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (pull_request) Canceled after 0s
CI / Web (pdf-viewer) (pull_request) Canceled after 0s
CI / Web (shl) (pull_request) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (pull_request) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (pull_request) Canceled after 0s
Supply-Chain-Scan (npm) / npm-audit (pull_request) Canceled after 0s
Core-Pflichttest-Gate / pflichttest-gate (pull_request) Canceled after 0s
RBAC-Rollenhierarchie-Pflichtgate / rbac-policy-invariant (pull_request) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (pull_request) Canceled after 0s
ENG-09: workflow-trigger nach upload und auto-regel
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-27 09:34:14 +02:00

39 lines
1.8 KiB
SQL

-- ENG-09: Ereignisvertrag (Tenant-Bindung, Idempotenz) und mandantenweite
-- Zuordnung von DMS-Ereignissen zu Aufgabe/Genehmigungslauf.
ALTER TABLE module_events ADD COLUMN tenant_slug TEXT NOT NULL DEFAULT '';
ALTER TABLE module_events ADD COLUMN dedupe_key TEXT NOT NULL DEFAULT '';
ALTER TABLE module_events ADD COLUMN event_version INT NOT NULL DEFAULT 1;
ALTER TABLE module_events ADD COLUMN occurred_at TIMESTAMPTZ NOT NULL DEFAULT now();
ALTER TABLE module_events ADD COLUMN accepted BOOLEAN NOT NULL DEFAULT true;
ALTER TABLE module_events ADD COLUMN rejected_reason TEXT;
ALTER TABLE module_events ADD COLUMN processed_at TIMESTAMPTZ;
-- Doppelte Zustellung desselben Ereignisses (mindestens einmal) faellt auf
-- dieselbe Zeile statt eine zweite anzulegen.
CREATE UNIQUE INDEX module_events_dedupe_key_idx ON module_events (dedupe_key) WHERE dedupe_key <> '';
-- Mandantenweite Zuordnung Ereignis -> Aufgabe/Genehmigungslauf.
CREATE TABLE event_task_rules (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
module_name TEXT NOT NULL,
object_type TEXT NOT NULL,
trigger TEXT NOT NULL,
kind TEXT NOT NULL CHECK (kind IN ('task', 'approval')),
assignee_type TEXT NOT NULL,
assignee_id TEXT NOT NULL,
title TEXT NOT NULL,
enabled BOOLEAN NOT NULL DEFAULT true,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
UNIQUE (module_name, object_type, trigger)
);
-- Nachweis, dass ein Ereignis genau einmal ausgeloest hat; die Zeile
-- entsteht in derselben Transaktion wie processed_at, damit ein Abbruch
-- zwischen Aufgabe-Anlegen und Markieren nicht zu einer Dublette fuehrt.
CREATE TABLE event_dispatch_log (
event_id UUID PRIMARY KEY REFERENCES module_events(id),
kind TEXT NOT NULL,
created_object_id TEXT NOT NULL,
dispatched_at TIMESTAMPTZ NOT NULL DEFAULT now()
);