Files
Pat-Manager/supabase/migrations/20260322000000_assessment_finalization.sql
2026-03-23 20:49:30 +01:00

46 lines
1.7 KiB
PL/PgSQL

alter table public.assessments
add column if not exists is_finalized boolean not null default false,
add column if not exists finalized_at timestamptz,
add column if not exists finalization_reminder_sent_at timestamptz;
create index if not exists idx_assessments_user_id_finalization
on public.assessments (user_id, is_finalized, created_at desc);
create index if not exists idx_assessments_open_finalization_reminders
on public.assessments (created_at)
where is_finalized = false and finalization_reminder_sent_at is null;
create or replace function public.guard_assessment_finalization()
returns trigger as $$
begin
if tg_op = 'UPDATE' and old.is_finalized then
if new.pat_type is distinct from old.pat_type
or new.datum is distinct from old.datum
or new.name is distinct from old.name
or new.exercises is distinct from old.exercises
or new.is_finalized is distinct from old.is_finalized
or new.finalized_at is distinct from old.finalized_at then
raise exception 'Finalisierte Bewertungen koennen nicht mehr geaendert werden.';
end if;
end if;
if new.is_finalized then
if tg_op = 'INSERT' then
new.finalized_at := coalesce(new.finalized_at, now());
else
new.finalized_at := coalesce(new.finalized_at, old.finalized_at, now());
end if;
new.finalization_reminder_sent_at := null;
else
new.finalized_at := null;
end if;
return new;
end;
$$ language plpgsql;
drop trigger if exists trg_assessments_finalization_guard on public.assessments;
create trigger trg_assessments_finalization_guard
before insert or update on public.assessments
for each row execute function public.guard_assessment_finalization();