snapshot of https://github.com/marmelab/atomic-crm.git (main, 2026-09-18; blobs > 131072B omitted)
Some checks failed
✅ Check / 🔬 ESLint (push) Failing after 21s
✅ Check / 🏷️ Typecheck (push) Failing after 11s
✅ Check / 🔎 Test (push) Failing after 11s
✅ Check / e2e-test (push) Failing after 11s
✅ Check / 🔨 Build (push) Failing after 11s
🚀 Deploy / 🚀 Deploy (doc) (push) Failing after 12s
🚀 Deploy / 🚀 Deploy (demo) (push) Failing after 12s
🚀 Deploy / 🚀 Deploy (supabase) (push) Failing after 18s
Some checks failed
✅ Check / 🔬 ESLint (push) Failing after 21s
✅ Check / 🏷️ Typecheck (push) Failing after 11s
✅ Check / 🔎 Test (push) Failing after 11s
✅ Check / e2e-test (push) Failing after 11s
✅ Check / 🔨 Build (push) Failing after 11s
🚀 Deploy / 🚀 Deploy (doc) (push) Failing after 12s
🚀 Deploy / 🚀 Deploy (demo) (push) Failing after 12s
🚀 Deploy / 🚀 Deploy (supabase) (push) Failing after 18s
This commit is contained in:
118
supabase/migrations/20260304104600_note_attachments_trigger.sql
Normal file
118
supabase/migrations/20260304104600_note_attachments_trigger.sql
Normal file
@@ -0,0 +1,118 @@
|
||||
-- Deletes attachment files from storage when note attachments are removed,
|
||||
-- either by deleting a note or by updating a note attachments list.
|
||||
CREATE EXTENSION IF NOT EXISTS pg_net;
|
||||
|
||||
DO $migration$
|
||||
BEGIN
|
||||
EXECUTE $url_sql$
|
||||
-- SQL triggers cannot read Edge Function env vars directly. Resolve the
|
||||
-- function URL from request context, and keep a local Docker fallback.
|
||||
CREATE OR REPLACE FUNCTION public.get_note_attachments_function_url()
|
||||
RETURNS text
|
||||
LANGUAGE plpgsql
|
||||
AS $function$
|
||||
DECLARE
|
||||
issuer text;
|
||||
function_url text;
|
||||
BEGIN
|
||||
issuer := coalesce(
|
||||
nullif(current_setting('request.jwt.claim.iss', true), ''),
|
||||
(
|
||||
coalesce(
|
||||
nullif(current_setting('request.jwt.claims', true), ''),
|
||||
'{}'
|
||||
)::jsonb ->> 'iss'
|
||||
)
|
||||
);
|
||||
issuer := nullif(issuer, '');
|
||||
IF issuer IS NOT NULL THEN
|
||||
issuer := rtrim(issuer, '/');
|
||||
IF right(issuer, 8) = '/auth/v1' THEN
|
||||
function_url :=
|
||||
left(issuer, length(issuer) - 8) || '/functions/v1/delete_note_attachments';
|
||||
|
||||
IF function_url LIKE 'http://127.0.0.1:%' THEN
|
||||
RETURN replace(
|
||||
function_url,
|
||||
'http://127.0.0.1:',
|
||||
'http://host.docker.internal:'
|
||||
);
|
||||
END IF;
|
||||
|
||||
IF function_url LIKE 'http://localhost:%' THEN
|
||||
RETURN replace(
|
||||
function_url,
|
||||
'http://localhost:',
|
||||
'http://host.docker.internal:'
|
||||
);
|
||||
END IF;
|
||||
|
||||
RETURN function_url;
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
RETURN 'http://host.docker.internal:54321/functions/v1/delete_note_attachments';
|
||||
END;
|
||||
$function$;
|
||||
$url_sql$;
|
||||
|
||||
EXECUTE $cleanup_sql$
|
||||
CREATE OR REPLACE FUNCTION public.cleanup_note_attachments()
|
||||
RETURNS trigger
|
||||
LANGUAGE plpgsql
|
||||
SECURITY DEFINER
|
||||
SET search_path TO ''
|
||||
AS $function$
|
||||
DECLARE
|
||||
payload jsonb;
|
||||
request_headers jsonb;
|
||||
auth_header text;
|
||||
BEGIN
|
||||
request_headers := coalesce(
|
||||
nullif(current_setting('request.headers', true), '')::jsonb,
|
||||
'{}'::jsonb
|
||||
);
|
||||
auth_header := request_headers ->> 'authorization';
|
||||
|
||||
IF auth_header IS NULL OR auth_header = '' THEN
|
||||
IF TG_OP = 'DELETE' THEN
|
||||
RETURN OLD;
|
||||
END IF;
|
||||
|
||||
RETURN NEW;
|
||||
END IF;
|
||||
|
||||
payload := jsonb_build_object(
|
||||
'old_record', OLD,
|
||||
'record', NEW,
|
||||
'type', TG_OP
|
||||
);
|
||||
|
||||
PERFORM net.http_post(
|
||||
url := public.get_note_attachments_function_url(),
|
||||
body := payload,
|
||||
params := '{}'::jsonb,
|
||||
headers := jsonb_build_object(
|
||||
'Content-Type',
|
||||
'application/json',
|
||||
'Authorization',
|
||||
auth_header
|
||||
),
|
||||
timeout_milliseconds := 10000
|
||||
);
|
||||
|
||||
IF TG_OP = 'DELETE' THEN
|
||||
RETURN OLD;
|
||||
END IF;
|
||||
|
||||
RETURN NEW;
|
||||
END;
|
||||
$function$;
|
||||
$cleanup_sql$;
|
||||
|
||||
EXECUTE 'CREATE TRIGGER on_contact_notes_deleted_delete_note_attachments AFTER DELETE ON public.contact_notes FOR EACH ROW EXECUTE FUNCTION public.cleanup_note_attachments()';
|
||||
EXECUTE 'CREATE TRIGGER on_deal_notes_deleted_delete_note_attachments AFTER DELETE ON public.deal_notes FOR EACH ROW EXECUTE FUNCTION public.cleanup_note_attachments()';
|
||||
EXECUTE 'CREATE TRIGGER on_contact_notes_attachments_updated_delete_note_attachments AFTER UPDATE ON public.contact_notes FOR EACH ROW WHEN (OLD.attachments IS DISTINCT FROM NEW.attachments) EXECUTE FUNCTION public.cleanup_note_attachments()';
|
||||
EXECUTE 'CREATE TRIGGER on_deal_notes_attachments_updated_delete_note_attachments AFTER UPDATE ON public.deal_notes FOR EACH ROW WHEN (OLD.attachments IS DISTINCT FROM NEW.attachments) EXECUTE FUNCTION public.cleanup_note_attachments()';
|
||||
END;
|
||||
$migration$;
|
||||
Reference in New Issue
Block a user