5.4 KiB
5.4 KiB
Configuração do Supabase Storage para Mensagens
1. Criar Bucket de Arquivos
Execute no Supabase Dashboard ou SQL Editor:
-- Criar bucket para arquivos de mensagens
INSERT INTO storage.buckets (id, name, public)
VALUES ('message-files', 'message-files', true);
Ou crie manualmente no painel do Supabase:
- Acesse: Storage > Create bucket
- Nome:
message-files - Marque como "Public bucket"
- Clique em "Create bucket"
2. Configurar Políticas de Storage
Execute no SQL Editor:
-- Política para upload (usuários autenticados podem fazer upload)
CREATE POLICY "Authenticated users can upload files"
ON storage.objects FOR INSERT
TO authenticated
WITH CHECK (
bucket_id = 'message-files' AND
auth.uid()::text = (storage.foldername(name))[1]
);
-- Política para leitura (qualquer pessoa pode baixar arquivos públicos)
CREATE POLICY "Anyone can download files"
ON storage.objects FOR SELECT
TO public
USING (bucket_id = 'message-files');
-- Política para atualização (usuários podem atualizar seus próprios arquivos)
CREATE POLICY "Users can update their own files"
ON storage.objects FOR UPDATE
TO authenticated
USING (
bucket_id = 'message-files' AND
auth.uid()::text = (storage.foldername(name))[1]
);
-- Política para exclusão (usuários podem deletar seus próprios arquivos)
CREATE POLICY "Users can delete their own files"
ON storage.objects FOR DELETE
TO authenticated
USING (
bucket_id = 'message-files' AND
auth.uid()::text = (storage.foldername(name))[1]
);
3. Configurar Realtime no Supabase
- Acesse: Database > Replication
- Habilite Realtime para as seguintes tabelas:
conversationsmessagesuser_presencemessage_attachments
Ou execute no SQL Editor:
-- Habilitar Realtime para tabelas
ALTER PUBLICATION supabase_realtime ADD TABLE conversations;
ALTER PUBLICATION supabase_realtime ADD TABLE messages;
ALTER PUBLICATION supabase_realtime ADD TABLE user_presence;
ALTER PUBLICATION supabase_realtime ADD TABLE message_attachments;
4. Executar Migrations
Execute a migration SQL criada:
# No terminal do seu projeto
psql -h <seu-host>.supabase.co -U postgres -d postgres -f supabase/migrations/create_messaging_system.sql
Ou copie e cole o conteúdo de create_messaging_system.sql no SQL Editor do Supabase Dashboard.
5. Verificar Instalação
Execute no SQL Editor para verificar:
-- Verificar tabelas criadas
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name IN ('conversations', 'messages', 'user_presence', 'message_attachments', 'message_notifications');
-- Verificar bucket criado
SELECT * FROM storage.buckets WHERE id = 'message-files';
-- Verificar políticas RLS
SELECT schemaname, tablename, policyname
FROM pg_policies
WHERE tablename IN ('conversations', 'messages', 'user_presence');
-- Verificar funções criadas
SELECT routine_name
FROM information_schema.routines
WHERE routine_schema = 'public'
AND routine_name IN ('get_user_conversations', 'get_or_create_conversation', 'mark_messages_as_read');
6. Testar Sistema
Após setup, teste:
-
Login como Paciente
- Acesse
/mensagens-paciente - Deve carregar lista de conversas (vazia inicialmente)
- Acesse
-
Enviar Mensagem de Texto
- Selecione uma conversa ou inicie nova
- Digite mensagem e envie
- Deve aparecer em tempo real
-
Upload de Arquivo
- Clique no botão de anexo (📎)
- Selecione arquivo (máx 10MB)
- Deve fazer upload e enviar mensagem
-
Verificar Realtime
- Abra em duas abas (paciente e médico)
- Envie mensagem em uma aba
- Deve aparecer na outra em tempo real
-
Status Online/Offline
- Indicador verde deve aparecer quando usuário está online
- Deve mudar para offline ao fechar aba
7. Configurações Opcionais
Limites de Upload
Para limitar tamanho de arquivos no bucket:
-- Configurar limite de 10MB
UPDATE storage.buckets
SET file_size_limit = 10485760
WHERE id = 'message-files';
Tipos de Arquivo Permitidos
-- Permitir apenas certos tipos de arquivo
UPDATE storage.buckets
SET allowed_mime_types = ARRAY[
'image/jpeg',
'image/png',
'image/gif',
'application/pdf',
'application/msword',
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'text/plain'
]::text[]
WHERE id = 'message-files';
Troubleshooting
Erro: "new row violates row-level security policy"
- Verifique se as políticas RLS estão configuradas corretamente
- Verifique se o usuário está autenticado
Erro: "storage bucket not found"
- Verifique se o bucket
message-filesfoi criado - Verifique se o nome está correto no código
Mensagens não aparecem em tempo real
- Verifique se Realtime está habilitado nas tabelas
- Verifique se há erros no console do browser
- Verifique conexão do Supabase Realtime
Upload falha
- Verifique políticas de storage
- Verifique tamanho do arquivo (máx 10MB)
- Verifique tipo MIME do arquivo
Estrutura de Pastas no Storage
message-files/
├── messages/
│ ├── {conversation_id}/
│ │ ├── {user_id}_{timestamp}.pdf
│ │ ├── {user_id}_{timestamp}.jpg
│ │ └── ...
Cada arquivo é salvo com:
- Nome único:
{user_id}_{timestamp}.{extensão} - Path:
messages/{conversation_id}/{nome_unico} - URL pública acessível via Supabase Storage