48 lines
No EOL
1.3 KiB
SQL
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); |