- 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.
78 lines
2.6 KiB
PL/PgSQL
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;
|