Skip to main content

Arquitetura de storage

O módulo de upload usa MinIO (compatível com S3) com dois buckets de propósitos distintos:
Nunca salve Presigned URLs no banco de dados — elas expiram em 15 minutos. Salve apenas a key e gere a URL sob demanda via GET /upload/:recurso/:id/documento.

Limites


Status do MinIO

Endpoint público — não requer autenticação. Útil para verificar se o storage está operacional antes de iniciar uploads.
Resposta 200

Documentos do locatário

Upload

Aceita até 4 campos simultâneos via multipart/form-data. Todos vão para o bucket privado.
Resposta 201

Gerar URL de visualização

string
required
Tipo do documento: cpf, rg, comprovante, outros.
number
default:"0"
Índice do arquivo (somente para tipo=outros).
Resposta 200

Contrato assinado

Aceita apenas PDF. Vai para o bucket privado e atualiza o campo contratoAssinadoKey no Firestore.
Resposta 201

Gerar URL de visualização


Fotos do imóvel

Aceita até 10 arquivos por requisição. URLs permanentes no bucket público.
Resposta 201

Listar fotos


Mídias de inspeção

Aceita até 20 arquivos (fotos e vídeos). A API separa automaticamente em fotosKeys e videosKeys com base no mimetype.

URL de vídeo

Valida o vínculo entre a key e a inspeção antes de retornar a URL.

Fotos de inventário

Aceita até 10 arquivos por item. O campo fotosKeys armazena tanto fotos quanto vídeos.

Deletar arquivo

Remove o arquivo do MinIO e limpa a referência no Firestore em uma única operação.
string
required
Caminho completo do arquivo no MinIO (ex: uid123/imoveis/abc123/foto.jpg).
string
"true" se o arquivo está no bucket público. Padrão: bucket privado.

Coleções válidas

Resposta 200
A key deve sempre começar com o userId do usuário autenticado. Tentativas de deletar arquivos de outros usuários retornam 403 Forbidden.