Skip to content

Arquivos — Endpoints

Base URL: /api/files

Permissões: todos os perfis autenticados

O upload de arquivos é feito diretamente para o Firebase Storage pelo frontend. A API apenas registra os metadados do arquivo após o upload.


GET /api/files

Lista arquivos da empresa com paginação.

Query params:

ParâmetroTipoDescrição
pageintegerPágina (padrão: 1)
pageSizeintegerItens por página
searchstringBusca por nome do arquivo
contentTypestringFiltro por tipo MIME (ex: image/jpeg, application/pdf)

Resposta 200:

json
{
  "data": [
    {
      "id": "l1m2n3o4-...",
      "fileName": "contrato-joao-ap001.pdf",
      "storagePath": "companies/empresa-id/contracts/contrato-joao-ap001.pdf",
      "url": "https://storage.googleapis.com/imobitalk-app.appspot.com/...",
      "contentType": "application/pdf",
      "sizeBytes": 204800,
      "uploadedBy": "admin@imob.com",
      "createdAt": "2026-05-20T10:00:00Z"
    }
  ],
  "page": 1,
  "pageSize": 20,
  "total": 18,
  "totalPages": 1,
  "hasNext": false,
  "hasPrevious": false
}

POST /api/files

Registra metadados de um arquivo após upload no Firebase Storage.

Fluxo de upload:

1. Frontend faz upload direto para Firebase Storage
   → getDownloadURL() retorna a URL pública

2. Frontend chama POST /api/files com os metadados

3. API salva FileAsset no banco

Body:

json
{
  "fileName": "foto-sala-ap001.jpg",
  "storagePath": "companies/empresa-id/properties/ap001/foto-sala.jpg",
  "url": "https://storage.googleapis.com/imobitalk-app.appspot.com/...",
  "contentType": "image/jpeg",
  "sizeBytes": 512000
}
CampoTipoObrigatório
fileNamestringSim
storagePathstringSim
urlstringSim
contentTypestringSim
sizeByteslongSim

Resposta 201:

json
{
  "id": "l1m2n3o4-...",
  "fileName": "foto-sala-ap001.jpg",
  "url": "https://storage.googleapis.com/...",
  "contentType": "image/jpeg",
  "sizeBytes": 512000,
  "createdAt": "2026-05-20T10:00:00Z"
}

DELETE /api/files/:id

Remove o registro de metadados (soft delete).

O arquivo no Firebase Storage deve ser excluído separadamente pelo frontend via SDK.

Resposta 204: Sem conteúdo.


Exemplo de upload no Angular

typescript
// file.service.ts
async uploadFile(file: File, path: string): Promise<FileAsset> {
  // 1. Upload para Firebase Storage
  const storageRef = ref(this.storage, path);
  const snapshot = await uploadBytes(storageRef, file);
  const url = await getDownloadURL(snapshot.ref);

  // 2. Registrar metadados na API
  return this.http.post<FileAsset>(`${this.apiUrl}/files`, {
    fileName: file.name,
    storagePath: snapshot.ref.fullPath,
    url,
    contentType: file.type,
    sizeBytes: file.size,
  }).toPromise();
}

Tipos de arquivo aceitos

TipoMIME Types
Imagensimage/jpeg, image/png, image/webp
Documentosapplication/pdf
Planilhasapplication/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

Tamanho máximo: 10 MB por arquivo (configurável no Firebase Storage).

Documentação do FastGivr SystemImob