Files
Compass/backend/supabase/private_user_seen_message_channels.sql
2025-10-24 01:04:18 +02:00

59 lines
1.8 KiB
SQL

CREATE TABLE IF NOT EXISTS private_user_seen_message_channels (
channel_id BIGINT NOT NULL,
created_time TIMESTAMPTZ DEFAULT now() NOT NULL,
id BIGINT GENERATED ALWAYS AS IDENTITY NOT NULL,
user_id TEXT NOT NULL,
CONSTRAINT private_user_seen_message_channels_pkey PRIMARY KEY (id)
);
-- Foreign Keys
ALTER TABLE private_user_seen_message_channels
ADD CONSTRAINT private_user_seen_message_channels_user_id_fkey
FOREIGN KEY (user_id)
REFERENCES users(id)
ON DELETE CASCADE;
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1
FROM pg_constraint
WHERE conname = 'channel_id_fkey'
AND conrelid = 'private_user_seen_message_channels'::regclass
) THEN
ALTER TABLE private_user_seen_message_channels
ADD CONSTRAINT channel_id_fkey
FOREIGN KEY (channel_id)
REFERENCES private_user_message_channels (id)
ON UPDATE CASCADE ON DELETE CASCADE;
END IF;
END$$;
-- Row Level Security
ALTER TABLE private_user_seen_message_channels ENABLE ROW LEVEL SECURITY;
-- Policies
DROP POLICY IF EXISTS "private member insert" ON private_user_seen_message_channels;
CREATE POLICY "private member insert" ON private_user_seen_message_channels
FOR INSERT
WITH CHECK (
(firebase_uid() IS NOT NULL)
AND can_access_private_messages(channel_id, firebase_uid())
);
DROP POLICY IF EXISTS "private member read" ON private_user_seen_message_channels;
CREATE POLICY "private member read" ON private_user_seen_message_channels
FOR SELECT
USING (
(firebase_uid() IS NOT NULL)
AND can_access_private_messages(channel_id, firebase_uid())
);
-- Indexes
CREATE INDEX IF NOT EXISTS user_seen_private_messages_created_time_desc_idx
ON public.private_user_seen_message_channels
USING btree (user_id, channel_id, created_time DESC);