Files
teamvis-selfhost/supabase/migrations/0015_service_relations_cleanup.sql
T
2026-06-25 16:43:22 +02:00

48 lines
1.6 KiB
PL/PgSQL

-- Verwaiste service_relations entfernen, wenn Bereiche/Stellen
-- gelöscht werden.
-- ====================================================================
-- service_relations.scope_id ist polymorph (org_unit oder position),
-- daher kein direkter FK möglich. Stattdessen Trigger, die nach Delete
-- auf den Quell-Tabellen die scope_id aufräumen.
--
-- Strategie: NULL-out (statt cascade-delete), damit die service_relation
-- als Datensatz erhalten bleibt — der Admin sieht im Audit, dass die
-- Verknüpfung früher existierte und die Quelle weg ist. Die App-UI
-- zeigt sie als "(Bereich/Stelle gelöscht)".
create or replace function public.cleanup_service_relations_org_unit()
returns trigger
language plpgsql
as $$
begin
update public.service_relations
set scope_id = null
where scope_kind = 'org_unit' and scope_id = OLD.id;
return OLD;
end;
$$;
create or replace function public.cleanup_service_relations_position()
returns trigger
language plpgsql
as $$
begin
update public.service_relations
set scope_id = null
where scope_kind = 'position' and scope_id = OLD.id;
return OLD;
end;
$$;
drop trigger if exists trg_cleanup_service_relations_org_unit
on public.org_units;
create trigger trg_cleanup_service_relations_org_unit
before delete on public.org_units
for each row execute function public.cleanup_service_relations_org_unit();
drop trigger if exists trg_cleanup_service_relations_position
on public.positions;
create trigger trg_cleanup_service_relations_position
before delete on public.positions
for each row execute function public.cleanup_service_relations_position();