infoalloggi-monorepo/apps/db/migrations/51_typing.up.sql
2026-05-06 14:59:31 +02:00

48 lines
No EOL
1.3 KiB
SQL

CREATE TABLE IF NOT EXISTS public.typing_status
(
chatid uuid NOT NULL,
userid uuid NOT NULL,
username text NOT NULL,
last_ping timestamp without time zone NOT NULL DEFAULT now()
);
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM pg_constraint
WHERE conname = 'typing_status_pkey'
AND conrelid = 'public.typing_status'::regclass
) THEN
ALTER TABLE public.typing_status
ADD CONSTRAINT typing_status_pkey PRIMARY KEY (chatid,userid);
END IF;
END $$;
DO $$ BEGIN IF NOT EXISTS (
SELECT 1 FROM pg_constraint
WHERE conname = 'typing_user'
AND conrelid = 'public.typing_status'::regclass
) THEN
ALTER TABLE public.typing_status
ADD CONSTRAINT typing_user
FOREIGN KEY (userid) REFERENCES public.users (id)
ON UPDATE CASCADE ON DELETE CASCADE;
END IF;
END $$;
DO $$ BEGIN IF NOT EXISTS (
SELECT 1 FROM pg_constraint
WHERE conname = 'typing_chat'
AND conrelid = 'public.typing_status'::regclass
) THEN
ALTER TABLE public.typing_status
ADD CONSTRAINT typing_chat
FOREIGN KEY (chatid) REFERENCES public.chats (chatid)
ON UPDATE CASCADE ON DELETE CASCADE;
END IF;
END $$;
CREATE INDEX IF NOT EXISTS typing_status_chat_lastping_idx
ON typing_status (chatid, last_ping DESC);