Migrations
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
-- Chat messages for swap request bargaining
|
||||
CREATE TABLE IF NOT EXISTS chat_messages (
|
||||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
thread_id uuid NOT NULL,
|
||||
sender_id uuid NOT NULL REFERENCES auth.users(id),
|
||||
body text NOT NULL,
|
||||
created_at timestamptz NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE INDEX idx_chat_messages_thread ON chat_messages (thread_id, created_at);
|
||||
|
||||
-- Auto-generate chat_thread_id on swap_requests if null
|
||||
ALTER TABLE swap_requests ALTER COLUMN chat_thread_id SET DEFAULT gen_random_uuid();
|
||||
|
||||
-- Backfill existing swap_requests that have no chat_thread_id
|
||||
UPDATE swap_requests SET chat_thread_id = gen_random_uuid() WHERE chat_thread_id IS NULL;
|
||||
|
||||
-- Enable realtime
|
||||
ALTER PUBLICATION supabase_realtime ADD TABLE chat_messages;
|
||||
|
||||
-- RLS
|
||||
ALTER TABLE chat_messages ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- Users can read messages for swap requests where they are requester or recipient
|
||||
CREATE POLICY "chat_messages_select" ON chat_messages FOR SELECT TO authenticated
|
||||
USING (
|
||||
EXISTS (
|
||||
SELECT 1 FROM swap_requests sr
|
||||
WHERE sr.chat_thread_id = chat_messages.thread_id
|
||||
AND (sr.requester_id = auth.uid() OR sr.recipient_id = auth.uid())
|
||||
)
|
||||
OR EXISTS (
|
||||
SELECT 1 FROM profiles p WHERE p.id = auth.uid() AND p.role IN ('admin', 'dispatcher')
|
||||
)
|
||||
);
|
||||
|
||||
-- Users can insert messages for swap requests where they are requester or recipient
|
||||
CREATE POLICY "chat_messages_insert" ON chat_messages FOR INSERT TO authenticated
|
||||
WITH CHECK (
|
||||
sender_id = auth.uid()
|
||||
AND EXISTS (
|
||||
SELECT 1 FROM swap_requests sr
|
||||
WHERE sr.chat_thread_id = chat_messages.thread_id
|
||||
AND (sr.requester_id = auth.uid() OR sr.recipient_id = auth.uid())
|
||||
)
|
||||
);
|
||||
Reference in New Issue
Block a user