diff --git a/supabase/migrations/20251012174000_1a20a630-c848-4db3-8249-3c304283bc2c.sql b/supabase/migrations/20251012174000_1a20a630-c848-4db3-8249-3c304283bc2c.sql new file mode 100644 index 00000000..39990a6a --- /dev/null +++ b/supabase/migrations/20251012174000_1a20a630-c848-4db3-8249-3c304283bc2c.sql @@ -0,0 +1,61 @@ +-- Enable pg_net extension for HTTP requests from triggers +CREATE EXTENSION IF NOT EXISTS pg_net; + +-- Create function to notify moderators when a new submission is created +CREATE OR REPLACE FUNCTION public.notify_moderators_on_new_submission() +RETURNS TRIGGER +LANGUAGE plpgsql +SECURITY DEFINER +SET search_path = public +AS $$ +DECLARE + submitter_profile record; + function_url text; +BEGIN + -- Get submitter's username or display name + SELECT username, display_name INTO submitter_profile + FROM public.profiles + WHERE user_id = NEW.user_id; + + -- Build the function URL + function_url := 'https://ydvtmnrszybqnbcqbdcy.supabase.co/functions/v1/notify-moderators-submission'; + + -- Call edge function asynchronously (doesn't block submission) + -- Using pg_net to make HTTP request without blocking + PERFORM net.http_post( + url := function_url, + headers := jsonb_build_object( + 'Content-Type', 'application/json', + 'Authorization', 'Bearer ' || current_setting('request.headers', true)::json->>'authorization' + ), + body := jsonb_build_object( + 'submission_id', NEW.id, + 'submission_type', NEW.submission_type, + 'submitter_name', COALESCE(submitter_profile.display_name, submitter_profile.username, 'Anonymous'), + 'action', COALESCE((NEW.content->>'action')::text, 'create') + ) + ); + + RETURN NEW; +EXCEPTION + WHEN OTHERS THEN + -- Log error but don't fail the submission + RAISE WARNING 'Failed to notify moderators: %', SQLERRM; + RETURN NEW; +END; +$$; + +-- Create trigger on content_submissions +DROP TRIGGER IF EXISTS notify_moderators_on_submission ON public.content_submissions; + +CREATE TRIGGER notify_moderators_on_submission + AFTER INSERT ON public.content_submissions + FOR EACH ROW + EXECUTE FUNCTION public.notify_moderators_on_new_submission(); + +-- Add comment for documentation +COMMENT ON FUNCTION public.notify_moderators_on_new_submission() IS + 'Automatically notifies all moderators via Novu when a new submission enters the moderation queue'; + +COMMENT ON TRIGGER notify_moderators_on_submission ON public.content_submissions IS + 'Triggers moderator notifications for new submissions'; \ No newline at end of file