From ed94454df8caa808aba74be61c99fbe4a57b4de9 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Fri, 3 Oct 2025 17:54:41 +0000 Subject: [PATCH] Implement broadcast-based Realtime --- ...5_6c778ee2-8718-4f0c-9b70-608f01eb24dd.sql | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 supabase/migrations/20251003175425_6c778ee2-8718-4f0c-9b70-608f01eb24dd.sql diff --git a/supabase/migrations/20251003175425_6c778ee2-8718-4f0c-9b70-608f01eb24dd.sql b/supabase/migrations/20251003175425_6c778ee2-8718-4f0c-9b70-608f01eb24dd.sql new file mode 100644 index 00000000..38b9d048 --- /dev/null +++ b/supabase/migrations/20251003175425_6c778ee2-8718-4f0c-9b70-608f01eb24dd.sql @@ -0,0 +1,108 @@ +-- Create Broadcast Authorization Policy +CREATE POLICY "Moderators can receive broadcasts" +ON "realtime"."messages" +FOR SELECT +TO authenticated +USING (public.check_realtime_access()); + +-- Create Trigger Functions for Broadcast +CREATE OR REPLACE FUNCTION public.broadcast_content_submission_changes() +RETURNS trigger +SECURITY DEFINER +LANGUAGE plpgsql +AS $$ +BEGIN + PERFORM realtime.broadcast_changes( + 'moderation:content_submissions', + TG_OP, + TG_OP, + TG_TABLE_NAME, + TG_TABLE_SCHEMA, + NEW, + OLD + ); + RETURN NULL; +END; +$$; + +CREATE OR REPLACE FUNCTION public.broadcast_submission_item_changes() +RETURNS trigger +SECURITY DEFINER +LANGUAGE plpgsql +AS $$ +BEGIN + PERFORM realtime.broadcast_changes( + 'moderation:submission_items', + TG_OP, + TG_OP, + TG_TABLE_NAME, + TG_TABLE_SCHEMA, + NEW, + OLD + ); + RETURN NULL; +END; +$$; + +CREATE OR REPLACE FUNCTION public.broadcast_report_changes() +RETURNS trigger +SECURITY DEFINER +LANGUAGE plpgsql +AS $$ +BEGIN + PERFORM realtime.broadcast_changes( + 'moderation:reports', + TG_OP, + TG_OP, + TG_TABLE_NAME, + TG_TABLE_SCHEMA, + NEW, + OLD + ); + RETURN NULL; +END; +$$; + +CREATE OR REPLACE FUNCTION public.broadcast_review_changes() +RETURNS trigger +SECURITY DEFINER +LANGUAGE plpgsql +AS $$ +BEGIN + PERFORM realtime.broadcast_changes( + 'moderation:reviews', + TG_OP, + TG_OP, + TG_TABLE_NAME, + TG_TABLE_SCHEMA, + NEW, + OLD + ); + RETURN NULL; +END; +$$; + +-- Create Triggers +CREATE TRIGGER broadcast_content_submission_changes +AFTER INSERT OR UPDATE OR DELETE +ON public.content_submissions +FOR EACH ROW +EXECUTE FUNCTION public.broadcast_content_submission_changes(); + +CREATE TRIGGER broadcast_submission_item_changes +AFTER INSERT OR UPDATE OR DELETE +ON public.submission_items +FOR EACH ROW +EXECUTE FUNCTION public.broadcast_submission_item_changes(); + +CREATE TRIGGER broadcast_report_changes +AFTER INSERT OR UPDATE OR DELETE +ON public.reports +FOR EACH ROW +EXECUTE FUNCTION public.broadcast_report_changes(); + +CREATE TRIGGER broadcast_review_changes +AFTER INSERT OR UPDATE OR DELETE +ON public.reviews +FOR EACH ROW +EXECUTE FUNCTION public.broadcast_review_changes(); \ No newline at end of file