39 lines
1.8 KiB
SQL
39 lines
1.8 KiB
SQL
-- ====================================================================
|
|
-- 0051_organigram_versions — Versionierung des Organigramms
|
|
-- ====================================================================
|
|
-- Audit-Anforderung: Prüfer wollen jederzeit die aktuelle, datierte
|
|
-- Version sehen und ältere Stände nachvollziehen können.
|
|
--
|
|
-- Modell (Hybrid):
|
|
-- 1) organigram_versions: nummerierte, UNVERÄNDERLICHE Snapshots des
|
|
-- kompletten Organigramm-Stands (JSONB), erzeugt bei „Version
|
|
-- veröffentlichen". Analog job_description_versions (0048).
|
|
-- 2) change_log (0022): erfasst zusätzlich jede Einzeländerung an
|
|
-- positions/org_units/assignments/deputies/external_parties/
|
|
-- service_relations (Hash-gesichert) — für die lückenlose
|
|
-- Nachvollziehbarkeit der Änderungen zwischen zwei Versionen.
|
|
|
|
create table if not exists public.organigram_versions (
|
|
id uuid primary key default gen_random_uuid(),
|
|
version_number integer not null,
|
|
-- Vollständiger OrganigramSnapshot (lib/organigram-tree.ts) als JSON,
|
|
-- inkl. zum Zeitpunkt der Freigabe aufgelöster Personennamen — so ist
|
|
-- der Stand reproduzierbar, auch wenn Stammdaten sich später ändern.
|
|
snapshot jsonb not null,
|
|
published_at timestamptz not null default now(),
|
|
published_by text not null,
|
|
note text,
|
|
created_at timestamptz not null default now()
|
|
);
|
|
|
|
create unique index if not exists organigram_versions_number_idx
|
|
on public.organigram_versions (version_number desc);
|
|
|
|
-- RLS: admin-only (Default deny, kein anon-Grant) — wie 0048.
|
|
alter table public.organigram_versions enable row level security;
|
|
|
|
-- Service-Role umgeht RLS, braucht auf Self-Host aber explizite Grants.
|
|
grant select, insert, update, delete on
|
|
public.organigram_versions
|
|
to service_role;
|