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

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:

  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:

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

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

  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:

-- 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-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