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