21 lines
898 B
PL/PgSQL
21 lines
898 B
PL/PgSQL
-- Create a table to record which notifications have been pushed by the edge function
|
|
CREATE TABLE IF NOT EXISTS public.notification_pushes (
|
|
notification_id uuid PRIMARY KEY,
|
|
pushed_at timestamptz NOT NULL DEFAULT now()
|
|
);
|
|
|
|
-- Helper function: try to mark a notification as pushed. Returns true if the
|
|
-- insert succeeded (i.e. this notification was not previously pushed), false
|
|
-- if it already existed.
|
|
CREATE OR REPLACE FUNCTION public.try_mark_notification_pushed(p_notification_id uuid)
|
|
RETURNS boolean LANGUAGE plpgsql AS $$
|
|
BEGIN
|
|
INSERT INTO public.notification_pushes(notification_id) VALUES (p_notification_id)
|
|
ON CONFLICT DO NOTHING;
|
|
RETURN FOUND; -- true if insert happened, false if ON CONFLICT prevented insert
|
|
END;
|
|
$$;
|
|
|
|
-- index for quick lookup by pushed_at if needed
|
|
CREATE INDEX IF NOT EXISTS idx_notification_pushes_pushed_at ON public.notification_pushes(pushed_at);
|