- 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.
4.0 KiB
4.0 KiB
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
- Acesse o Supabase Dashboard
- Selecione seu projeto (yuanqfswhberkoevtmfr)
Passo 2: Criar a tabela
- No menu lateral, clique em SQL Editor
- Clique em New Query
- Copie todo o conteúdo do arquivo
scripts/create-messages-table.sql - Cole no editor SQL
- Clique em Run ou pressione
Ctrl+Enter
O script irá:
- Criar a tabela
messagescom 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
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áriogetMessagesBetweenUsers()- Busca mensagens entre dois usuáriossendMessage()- Envia uma mensagemmarkMessagesAsRead()- Marca mensagens como lidassubscribeToMessages()- Inscreve para receber mensagens em tempo real
Segurança
O sistema implementa Row Level Security (RLS) no Supabase com as seguintes políticas:
- Leitura: Usuários só podem ver mensagens que enviaram ou receberam
- Inserção: Usuários só podem enviar mensagens como remetentes
- Atualização: Usuários só podem atualizar mensagens que receberam (para marcar como lidas)
- Exclusão: Usuários só podem excluir mensagens que enviaram
Uso
Médico enviando mensagem para paciente:
- Acesse o painel do médico
- Clique na aba "Mensagens"
- Selecione um paciente da lista ou de conversas recentes
- Digite a mensagem e clique em "Enviar"
Paciente enviando mensagem para médico:
- Acesse o acompanhamento do paciente
- Clique na aba "Mensagens"
- Selecione um médico da lista ou de conversas recentes
- 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
messagesestá na publicaçãosupabase_realtime - Confira o console do navegador para erros de conexão WebSocket
- Teste a conexão com o Supabase