TeamVis Self-Host-Bundle v0.31.0
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
-- 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();
|
||||
Reference in New Issue
Block a user