mirror of
https://github.com/jjbrunton/Sauci.git
synced 2026-10-31 18:19:43 +00:00
fix(ci): add missing discord notification migration file
Migration 20260127202703 was applied to prod via MCP but had no local file, causing supabase db push to fail with a version mismatch. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
25db338861
commit
f07f80b529
1 file changed
+142
@@ -0,0 +1,142 @@
|
|||||||
|
-- Helper function: sends a Discord notification via the send-discord-notification edge function
|
||||||
|
CREATE OR REPLACE FUNCTION public.notify_discord_event(p_event text, p_payload jsonb)
|
||||||
|
RETURNS void
|
||||||
|
LANGUAGE plpgsql
|
||||||
|
SECURITY DEFINER
|
||||||
|
AS $$
|
||||||
|
BEGIN
|
||||||
|
PERFORM net.http_post(
|
||||||
|
url := 'https://ckjcrkjpmhqhiucifukx.supabase.co/functions/v1/send-discord-notification',
|
||||||
|
headers := jsonb_build_object('Content-Type', 'application/json'),
|
||||||
|
body := jsonb_build_object(
|
||||||
|
'event', p_event,
|
||||||
|
'payload', p_payload
|
||||||
|
)
|
||||||
|
);
|
||||||
|
END;
|
||||||
|
$$;
|
||||||
|
|
||||||
|
-- Trigger function: new user signup
|
||||||
|
CREATE OR REPLACE FUNCTION public.notify_new_user_discord()
|
||||||
|
RETURNS trigger
|
||||||
|
LANGUAGE plpgsql
|
||||||
|
SECURITY DEFINER
|
||||||
|
AS $$
|
||||||
|
BEGIN
|
||||||
|
PERFORM public.notify_discord_event(
|
||||||
|
'new_user',
|
||||||
|
jsonb_build_object(
|
||||||
|
'user_id', NEW.id,
|
||||||
|
'name', NEW.name,
|
||||||
|
'email', NEW.email,
|
||||||
|
'created_at', NEW.created_at
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
RETURN NEW;
|
||||||
|
END;
|
||||||
|
$$;
|
||||||
|
|
||||||
|
-- Trigger function: couple paired (fires when second partner joins)
|
||||||
|
CREATE OR REPLACE FUNCTION public.notify_couple_paired_discord()
|
||||||
|
RETURNS trigger
|
||||||
|
LANGUAGE plpgsql
|
||||||
|
SECURITY DEFINER
|
||||||
|
AS $$
|
||||||
|
DECLARE
|
||||||
|
v_member_count integer;
|
||||||
|
v_profiles jsonb;
|
||||||
|
BEGIN
|
||||||
|
IF NEW.couple_id IS NULL OR OLD.couple_id IS NOT DISTINCT FROM NEW.couple_id THEN
|
||||||
|
RETURN NEW;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
SELECT COUNT(*)
|
||||||
|
INTO v_member_count
|
||||||
|
FROM public.profiles
|
||||||
|
WHERE couple_id = NEW.couple_id;
|
||||||
|
|
||||||
|
IF v_member_count = 2 THEN
|
||||||
|
SELECT jsonb_agg(
|
||||||
|
jsonb_build_object(
|
||||||
|
'id', p.id,
|
||||||
|
'name', p.name,
|
||||||
|
'email', p.email
|
||||||
|
)
|
||||||
|
ORDER BY p.created_at
|
||||||
|
)
|
||||||
|
INTO v_profiles
|
||||||
|
FROM public.profiles p
|
||||||
|
WHERE p.couple_id = NEW.couple_id;
|
||||||
|
|
||||||
|
PERFORM public.notify_discord_event(
|
||||||
|
'couple_paired',
|
||||||
|
jsonb_build_object(
|
||||||
|
'couple_id', NEW.couple_id,
|
||||||
|
'profiles', COALESCE(v_profiles, '[]'::jsonb),
|
||||||
|
'paired_at', now()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
RETURN NEW;
|
||||||
|
END;
|
||||||
|
$$;
|
||||||
|
|
||||||
|
-- Trigger function: feedback submitted
|
||||||
|
CREATE OR REPLACE FUNCTION public.notify_feedback_submitted_discord()
|
||||||
|
RETURNS trigger
|
||||||
|
LANGUAGE plpgsql
|
||||||
|
SECURITY DEFINER
|
||||||
|
AS $$
|
||||||
|
DECLARE
|
||||||
|
v_user jsonb;
|
||||||
|
BEGIN
|
||||||
|
SELECT jsonb_build_object(
|
||||||
|
'id', p.id,
|
||||||
|
'name', p.name,
|
||||||
|
'email', p.email
|
||||||
|
)
|
||||||
|
INTO v_user
|
||||||
|
FROM public.profiles p
|
||||||
|
WHERE p.id = NEW.user_id;
|
||||||
|
|
||||||
|
PERFORM public.notify_discord_event(
|
||||||
|
'feedback_submitted',
|
||||||
|
jsonb_build_object(
|
||||||
|
'feedback_id', NEW.id,
|
||||||
|
'user_id', NEW.user_id,
|
||||||
|
'type', NEW.type,
|
||||||
|
'title', NEW.title,
|
||||||
|
'description', NEW.description,
|
||||||
|
'status', NEW.status,
|
||||||
|
'screenshot_url', NEW.screenshot_url,
|
||||||
|
'question_id', NEW.question_id,
|
||||||
|
'created_at', NEW.created_at,
|
||||||
|
'user', v_user
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
RETURN NEW;
|
||||||
|
END;
|
||||||
|
$$;
|
||||||
|
|
||||||
|
-- Create triggers (drop first to be idempotent)
|
||||||
|
DROP TRIGGER IF EXISTS on_profile_created_discord ON public.profiles;
|
||||||
|
CREATE TRIGGER on_profile_created_discord
|
||||||
|
AFTER INSERT ON public.profiles
|
||||||
|
FOR EACH ROW
|
||||||
|
EXECUTE FUNCTION public.notify_new_user_discord();
|
||||||
|
|
||||||
|
DROP TRIGGER IF EXISTS on_profile_couple_paired_discord ON public.profiles;
|
||||||
|
CREATE TRIGGER on_profile_couple_paired_discord
|
||||||
|
AFTER UPDATE OF couple_id ON public.profiles
|
||||||
|
FOR EACH ROW
|
||||||
|
WHEN (OLD.couple_id IS DISTINCT FROM NEW.couple_id AND NEW.couple_id IS NOT NULL)
|
||||||
|
EXECUTE FUNCTION public.notify_couple_paired_discord();
|
||||||
|
|
||||||
|
DROP TRIGGER IF EXISTS on_feedback_submitted_discord ON public.feedback;
|
||||||
|
CREATE TRIGGER on_feedback_submitted_discord
|
||||||
|
AFTER INSERT ON public.feedback
|
||||||
|
FOR EACH ROW
|
||||||
|
EXECUTE FUNCTION public.notify_feedback_submitted_discord();
|
||||||
Reference in new issue
Block a user