Files
1356/supabase/migrations/003_activity_triggers.sql
T
2026-01-03 18:38:17 +01:00

76 lines
2.2 KiB
PL/PgSQL

-- Function to automatically log goal creation activity
CREATE OR REPLACE FUNCTION log_goal_created()
RETURNS TRIGGER AS $$
BEGIN
INSERT INTO public.activities (user_id, type, payload)
VALUES (
NEW.owner_id,
'goal_created',
jsonb_build_object(
'goal_id', NEW.id,
'goal_title', NEW.title
)
);
RETURN NEW;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;
-- Trigger for goal creation
CREATE TRIGGER on_goal_created
AFTER INSERT ON public.goals
FOR EACH ROW
EXECUTE FUNCTION log_goal_created();
-- Function to automatically log goal completion activity
CREATE OR REPLACE FUNCTION log_goal_completed()
RETURNS TRIGGER AS $$
BEGIN
IF NEW.completed = true AND (OLD.completed IS NULL OR OLD.completed = false) THEN
INSERT INTO public.activities (user_id, type, payload)
VALUES (
NEW.owner_id,
'goal_completed',
jsonb_build_object(
'goal_id', NEW.id,
'goal_title', NEW.title,
'progress', NEW.progress
)
);
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;
-- Trigger for goal completion
CREATE TRIGGER on_goal_completed
AFTER UPDATE ON public.goals
FOR EACH ROW
WHEN (NEW.completed IS DISTINCT FROM OLD.completed)
EXECUTE FUNCTION log_goal_completed();
-- Function to automatically log countdown start activity
CREATE OR REPLACE FUNCTION log_countdown_started()
RETURNS TRIGGER AS $$
BEGIN
IF NEW.countdown_start_date IS NOT NULL AND (OLD.countdown_start_date IS NULL) THEN
INSERT INTO public.activities (user_id, type, payload)
VALUES (
NEW.id,
'countdown_started',
jsonb_build_object(
'start_date', NEW.countdown_start_date,
'end_date', NEW.countdown_end_date
)
);
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;
-- Trigger for countdown start
CREATE TRIGGER on_countdown_started
AFTER UPDATE ON public.users
FOR EACH ROW
WHEN (NEW.countdown_start_date IS DISTINCT FROM OLD.countdown_start_date)
EXECUTE FUNCTION log_countdown_started();