# Sistema de Mensagens - MediConnect ## Configuração do Supabase Para habilitar o sistema de mensagens entre médicos e pacientes, você precisa criar a tabela `messages` no Supabase. ### Passo 1: Acessar o Supabase 1. Acesse o [Supabase Dashboard](https://app.supabase.com) 2. Selecione seu projeto (yuanqfswhberkoevtmfr) ### Passo 2: Criar a tabela 1. No menu lateral, clique em **SQL Editor** 2. Clique em **New Query** 3. Copie todo o conteúdo do arquivo `scripts/create-messages-table.sql` 4. Cole no editor SQL 5. Clique em **Run** ou pressione `Ctrl+Enter` O script irá: - Criar a tabela `messages` com os campos necessários - Criar índices para otimizar as consultas - Configurar Row Level Security (RLS) para garantir que usuários só vejam suas próprias mensagens - Habilitar Realtime para receber mensagens instantaneamente ### Estrutura da Tabela ```sql messages ├── id (UUID, PK) ├── sender_id (UUID, FK -> users.id) ├── receiver_id (UUID, FK -> users.id) ├── content (TEXT) ├── read (BOOLEAN) ├── created_at (TIMESTAMPTZ) └── updated_at (TIMESTAMPTZ) ``` ## Funcionalidades Implementadas ### Para Médicos (PainelMedico) - Ver lista de pacientes disponíveis para iniciar conversa - Ver conversas recentes com pacientes - Enviar e receber mensagens em tempo real - Ver contador de mensagens não lidas - Marcar mensagens como lidas automaticamente ### Para Pacientes (AcompanhamentoPaciente) - Ver lista de médicos disponíveis para iniciar conversa - Ver conversas recentes com médicos - Enviar e receber mensagens em tempo real - Ver contador de mensagens não lidas - Marcar mensagens como lidas automaticamente ## Componentes Criados ### ChatMessages Componente reutilizável que gerencia: - Lista de conversas - Interface de chat - Envio de mensagens - Recebimento em tempo real via Supabase Realtime - Marcação automática de mensagens como lidas ### messageService Serviço que fornece métodos para: - `getConversations()` - Lista conversas do usuário - `getMessagesBetweenUsers()` - Busca mensagens entre dois usuários - `sendMessage()` - Envia uma mensagem - `markMessagesAsRead()` - Marca mensagens como lidas - `subscribeToMessages()` - Inscreve para receber mensagens em tempo real ## Segurança O sistema implementa Row Level Security (RLS) no Supabase com as seguintes políticas: 1. **Leitura**: Usuários só podem ver mensagens que enviaram ou receberam 2. **Inserção**: Usuários só podem enviar mensagens como remetentes 3. **Atualização**: Usuários só podem atualizar mensagens que receberam (para marcar como lidas) 4. **Exclusão**: Usuários só podem excluir mensagens que enviaram ## Uso ### Médico enviando mensagem para paciente: 1. Acesse o painel do médico 2. Clique na aba "Mensagens" 3. Selecione um paciente da lista ou de conversas recentes 4. Digite a mensagem e clique em "Enviar" ### Paciente enviando mensagem para médico: 1. Acesse o acompanhamento do paciente 2. Clique na aba "Mensagens" 3. Selecione um médico da lista ou de conversas recentes 4. Digite a mensagem e clique em "Enviar" ## Notificações em Tempo Real O sistema usa Supabase Realtime para entregar mensagens instantaneamente. Quando uma nova mensagem chega: - A lista de conversas é atualizada automaticamente - Se a conversa está aberta, a mensagem aparece imediatamente - O contador de mensagens não lidas é atualizado ## Troubleshooting ### Mensagens não aparecem - Verifique se a tabela foi criada corretamente no Supabase - Verifique se o Realtime está habilitado para a tabela `messages` - Confira se as políticas RLS estão ativas ### Erro ao enviar mensagem - Verifique se o usuário está autenticado - Confirme que o sender_id e receiver_id são válidos - Verifique as permissões RLS no Supabase ### Mensagens não chegam em tempo real - Verifique se a tabela `messages` está na publicação `supabase_realtime` - Confira o console do navegador para erros de conexão WebSocket - Teste a conexão com o Supabase