-- Direct messages table CREATE TABLE public.direct_messages ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), sender_id UUID NOT NULL, recipient_id UUID NOT NULL, message TEXT NOT NULL, read_at TIMESTAMPTZ, created_at TIMESTAMPTZ NOT NULL DEFAULT now() ); -- Index for conversation lookups CREATE INDEX idx_dm_sender ON public.direct_messages(sender_id, created_at DESC); CREATE INDEX idx_dm_recipient ON public.direct_messages(recipient_id, created_at DESC); CREATE INDEX idx_dm_conversation ON public.direct_messages( LEAST(sender_id, recipient_id), GREATEST(sender_id, recipient_id), created_at DESC ); -- Enable RLS ALTER TABLE public.direct_messages ENABLE ROW LEVEL SECURITY; -- Users can read messages they sent or received CREATE POLICY "Users can read own messages" ON public.direct_messages FOR SELECT TO authenticated USING (auth.uid() = sender_id OR auth.uid() = recipient_id); -- Users can insert messages where they are the sender CREATE POLICY "Users can send messages" ON public.direct_messages FOR INSERT TO authenticated WITH CHECK (auth.uid() = sender_id); -- Users can update messages they received (for marking read) CREATE POLICY "Recipients can mark messages read" ON public.direct_messages FOR UPDATE TO authenticated USING (auth.uid() = recipient_id) WITH CHECK (auth.uid() = recipient_id); -- Enable realtime ALTER PUBLICATION supabase_realtime ADD TABLE public.direct_messages;