caterium-app/ops/sql/SUPABASE-V17.7.0-ERROR-TELEMETRY-HYGIENE.sql
pavlov346346-source f8bb0a78b4
Caterium v17.7.0 — architecture foundation
Introduce the first data layer, move order auto-completion to server cron with legacy/cloud compatibility, clean error telemetry, update PWA/versioning, and add regression coverage.
2026-09-08 13:24:34 +03:00

31 lines
1.8 KiB
PL/PgSQL

create or replace function public.sun_v17_log_error(p_workspace uuid, p_client_id text, p_app_version text, p_level text, p_message text, p_stack text, p_context jsonb default '{}'::jsonb)
returns uuid
language plpgsql
security definer
set search_path='public' as $$
declare v_id uuid; v_url text:=coalesce(p_context->>'url',''); v_message text:=left(coalesce(p_message,'Unknown error'),4000); v_level text:=left(coalesce(p_level,'error'),30); v_version text:=left(coalesce(p_app_version,''),80);
begin
if p_workspace is not null and public.sun_member_role(p_workspace) is null then raise exception 'Access denied'; end if;
if v_url ~* '^file:' then return null; end if;
select e.id into v_id from public.sun_v17_error_events e
where e.workspace_id is not distinct from p_workspace
and e.user_id is not distinct from auth.uid()
and coalesce(e.app_version,'')=v_version
and coalesce(e.level,'error')=v_level
and e.message=v_message
and e.created_at>=now()-interval '5 minutes'
order by e.created_at desc limit 1;
if v_id is not null then return v_id; end if;
insert into public.sun_v17_error_events(workspace_id,user_id,client_id,app_version,level,message,stack,context)
values(p_workspace,auth.uid(),left(p_client_id,120),v_version,v_level,v_message,left(coalesce(p_stack,''),12000),coalesce(p_context,'{}'::jsonb)) returning id into v_id;
return v_id;
end;$$;
delete from public.sun_v17_error_events where coalesce(context->>'url','') ~* '^file:';
do $$ declare v_job bigint; begin
select jobid into v_job from cron.job where jobname='caterium-error-retention';
if v_job is not null then perform cron.unschedule(v_job); end if;
perform cron.schedule('caterium-error-retention','23 3 * * *',$cron$delete from public.sun_v17_error_events where created_at < now()-interval '30 days';$cron$);
end$$;