# Configuração do Supabase Storage para Mensagens ## 1. Criar Bucket de Arquivos Execute no Supabase Dashboard ou SQL Editor: ```sql -- 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: 1. Acesse: Storage > Create bucket 2. Nome: `message-files` 3. Marque como "Public bucket" 4. Clique em "Create bucket" ## 2. Configurar Políticas de Storage Execute no SQL Editor: ```sql -- 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 1. Acesse: Database > Replication 2. Habilite Realtime para as seguintes tabelas: - `conversations` - `messages` - `user_presence` - `message_attachments` Ou execute no SQL Editor: ```sql -- 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: ```bash # No terminal do seu projeto psql -h .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: ```sql -- 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: 1. **Login como Paciente** - Acesse `/mensagens-paciente` - Deve carregar lista de conversas (vazia inicialmente) 2. **Enviar Mensagem de Texto** - Selecione uma conversa ou inicie nova - Digite mensagem e envie - Deve aparecer em tempo real 3. **Upload de Arquivo** - Clique no botão de anexo (📎) - Selecione arquivo (máx 10MB) - Deve fazer upload e enviar mensagem 4. **Verificar Realtime** - Abra em duas abas (paciente e médico) - Envie mensagem em uma aba - Deve aparecer na outra em tempo real 5. **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: ```sql -- Configurar limite de 10MB UPDATE storage.buckets SET file_size_limit = 10485760 WHERE id = 'message-files'; ``` ### Tipos de Arquivo Permitidos ```sql -- 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-files` foi 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