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