mirror of
https://github.com/jjbrunton/Sauci.git
synced 2026-10-31 18:19:43 +00:00
65 lines
1.8 KiB
SQL
65 lines
1.8 KiB
SQL
-- Create messages table
|
|
CREATE TABLE IF NOT EXISTS public.messages (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
match_id UUID NOT NULL REFERENCES public.matches(id) ON DELETE CASCADE,
|
|
user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
|
|
content TEXT,
|
|
media_path TEXT,
|
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
CONSTRAINT content_or_media CHECK (content IS NOT NULL OR media_path IS NOT NULL)
|
|
);
|
|
|
|
-- RLS for messages
|
|
ALTER TABLE public.messages ENABLE ROW LEVEL SECURITY;
|
|
|
|
CREATE POLICY "Users can view messages in their matches"
|
|
ON public.messages
|
|
FOR SELECT
|
|
USING (
|
|
EXISTS (
|
|
SELECT 1 FROM public.matches m
|
|
WHERE m.id = messages.match_id
|
|
AND m.couple_id IN (
|
|
SELECT couple_id FROM public.profiles
|
|
WHERE id = auth.uid()
|
|
)
|
|
)
|
|
);
|
|
|
|
CREATE POLICY "Users can insert messages in their matches"
|
|
ON public.messages
|
|
FOR INSERT
|
|
WITH CHECK (
|
|
auth.uid() = user_id AND
|
|
EXISTS (
|
|
SELECT 1 FROM public.matches m
|
|
WHERE m.id = messages.match_id
|
|
AND m.couple_id IN (
|
|
SELECT couple_id FROM public.profiles
|
|
WHERE id = auth.uid()
|
|
)
|
|
)
|
|
);
|
|
|
|
-- Storage bucket for chat media
|
|
INSERT INTO storage.buckets (id, name, public)
|
|
VALUES ('chat-media', 'chat-media', true)
|
|
ON CONFLICT (id) DO NOTHING;
|
|
|
|
-- Storage policies
|
|
CREATE POLICY "Users can upload chat media"
|
|
ON storage.objects
|
|
FOR INSERT
|
|
WITH CHECK (
|
|
bucket_id = 'chat-media' AND
|
|
auth.role() = 'authenticated'
|
|
);
|
|
|
|
CREATE POLICY "Users can view chat media"
|
|
ON storage.objects
|
|
FOR SELECT
|
|
USING (bucket_id = 'chat-media');
|
|
|
|
-- Realtime
|
|
alter publication supabase_realtime add table messages;
|