riseup-squad18/supabase/SETUP_STORAGE.md
2025-12-06 19:13:27 -03:00

216 lines
5.4 KiB
Markdown

# 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 <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:
```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