mirror of
https://github.com/Dvorinka/1356.git
synced 2026-06-04 03:52:57 +00:00
76 lines
2.2 KiB
PL/PgSQL
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();
|