riseup-squad18/scripts/create-messages-table.sql
Seu Nome 04c6de47d5 feat: update Supabase connection details and enhance messaging functionality
- Changed Supabase URL and anon key for the connection.
- Added a cache buster file for page caching management.
- Integrated ChatMessages component into AcompanhamentoPaciente and MensagensMedico pages for improved messaging interface.
- Created new MensagensPaciente page for patient messaging.
- Updated PainelMedico to include messaging functionality with patients.
- Enhanced message service to support conversation retrieval and message sending.
- Added a test HTML file for Supabase connection verification and message table interaction.
2025-11-26 00:06:50 -03:00

78 lines
2.6 KiB
PL/PgSQL

-- Limpar objetos existentes (se houver)
DROP POLICY IF EXISTS "Users can view their own messages" ON public.messages;
DROP POLICY IF EXISTS "Users can send messages" ON public.messages;
DROP POLICY IF EXISTS "Users can update received messages" ON public.messages;
DROP POLICY IF EXISTS "Users can delete sent messages" ON public.messages;
DROP TRIGGER IF EXISTS messages_updated_at ON public.messages;
DROP FUNCTION IF EXISTS update_messages_updated_at();
DROP TABLE IF EXISTS public.messages;
-- Criar tabela de mensagens no schema public
CREATE TABLE public.messages (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
sender_id UUID NOT NULL,
receiver_id UUID NOT NULL,
content TEXT NOT NULL,
read BOOLEAN DEFAULT false,
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now()
);
-- Criar índices para melhorar performance
CREATE INDEX idx_messages_sender ON public.messages(sender_id);
CREATE INDEX idx_messages_receiver ON public.messages(receiver_id);
CREATE INDEX idx_messages_created_at ON public.messages(created_at DESC);
CREATE INDEX idx_messages_read ON public.messages(read);
-- Índice composto para queries de conversas
CREATE INDEX idx_messages_conversation
ON public.messages(sender_id, receiver_id, created_at DESC);
-- Habilitar RLS (Row Level Security)
ALTER TABLE public.messages ENABLE ROW LEVEL SECURITY;
-- Política: Usuários podem ver mensagens que enviaram ou receberam
CREATE POLICY "Users can view their own messages"
ON public.messages
FOR SELECT
USING (
auth.uid() = sender_id OR
auth.uid() = receiver_id
);
-- Política: Usuários podem inserir mensagens onde são remetentes
CREATE POLICY "Users can send messages"
ON public.messages
FOR INSERT
WITH CHECK (auth.uid() = sender_id);
-- Política: Usuários podem atualizar mensagens que receberam (para marcar como lida)
CREATE POLICY "Users can update received messages"
ON public.messages
FOR UPDATE
USING (auth.uid() = receiver_id);
-- Política: Usuários podem deletar mensagens que enviaram
CREATE POLICY "Users can delete sent messages"
ON public.messages
FOR DELETE
USING (auth.uid() = sender_id);
-- Função para atualizar updated_at automaticamente
CREATE OR REPLACE FUNCTION update_messages_updated_at()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = now();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- Trigger para atualizar updated_at
CREATE TRIGGER messages_updated_at
BEFORE UPDATE ON public.messages
FOR EACH ROW
EXECUTE FUNCTION update_messages_updated_at();
-- Habilitar realtime para a tabela messages
ALTER PUBLICATION supabase_realtime ADD TABLE public.messages;