Skip to content

Contrato — API Pública (consulta)

API pública consumida pelo frontend (Angular). Expõe busca/filtro, detalhe com análise de custo, histórico e engajamento (favoritos/alertas). Exposta via Traefik/Cloudflare em api.technodevbr.com. Contrato formal (fonte da verdade — API-first): openapi-api.yaml.

Complementa a API de Ingestão (interna, coletor→backend). Esta é a de leitura para o usuário final.

Endpoints

MétodoRotaCaso de usoAuth
GET/api/v1/imoveisBuscarImoveisUseCase (filtros + espacial + paginação)público
GET/api/v1/imoveis/{id}ObterImovelUseCase (detalhe + análise + fotos)público
GET/api/v1/imoveis/{id}/historicoListarHistoricoPrecoUseCase (tendência)público
GET/POST/api/v1/favoritosListarFavoritosUseCase / FavoritarImovelUseCasesessão
DELETE/api/v1/favoritos/{imovelId}desfavoritarsessão
GET/POST/api/v1/alertaslistar / CriarAlertaUseCasesessão
PUT/DELETE/api/v1/alertas/{id}atualizar / removersessão
GET/oauth2/authorization/{provedor}inicia login social (Google/GitHub)público
GET/api/v1/auth/me · POST /api/v1/auth/logoutusuário atual / logoutsessão

Filtros da busca (GET /api/v1/imoveis)

Ligam a tela de busca ↔ ao BuscarImoveisUseCase:

ParâmetroDescrição
uf, cidade, tipo, modalidadeFiltros categóricos.
precoMin, precoMaxFaixa de preço.
descontoRealMinDesconto real mínimo (%) — considera o custo total, não o anunciado (RN-05).
ocupacao`ocupado
incluirEncerradosInclui vendido/removido (padrão false) — ver RN-09.
qBusca textual (endereço/bairro/cidade).
lat + lng + raioKmBusca por raio (PostGIS).
bboxBounding box para o mapa (minLng,minLat,maxLng,maxLat).
ordenarPor, ordem`descontoReal
page, sizePaginação (base 0; size ≤ 100).

Convenções

  • Versão no path (/api/v1); mudança incompatível → /api/v2.
  • Auth: login social OIDC (Google/GitHub); sessão em cookie HttpOnly (padrão BFF) + CSRF nas escritas. Sem senha, sem token no localStorage. Ver ADR-0013.
  • Erros: Problem Details (RFC 7807), application/problem+json — igual à API de ingestão.
  • Paginação no padrão content/page/size/totalElements/totalPages (compatível com Spring Data).
  • Tipos do frontend são gerados a partir deste YAML (ver Frontend).

Ver Backend (casos de uso) e Modelo de dados.