Skip to content

ADR-0001 — Stack tecnológica e fronteira Java/Python

  • Status: Aceito
  • Data: 2026-07-16

Contexto

Precisamos definir linguagens/frameworks para backend, coleta e frontend, e como esses serviços se relacionam com o banco de dados, mantendo regras de negócio coesas.

Decisão

  • Backend/API: Java 21 + Spring Boot 3, em arquitetura hexagonal.
  • Coleta: Python 3.12 (melhor ergonomia para scraping/parsing de dados).
  • Frontend: Angular 17+ (standalone + signals).
  • Banco: PostgreSQL 16 + PostGIS; migrations via Flyway no backend.
  • Fronteira: o backend Java é o dono do schema. O coletor Python não escreve direto nas tabelas de negócio; envia dados por uma API de ingestão (POST /internal/ingest/...).

Consequências

  • + Regras/validações centralizadas no backend; serviços desacoplados do schema.
  • + Cada linguagem no que faz melhor (Java para domínio/API; Python para coleta).
  • Overhead de manter dois runtimes e um contrato entre eles (mitigado por testes de contrato).
  • Alternativa de MVP: Python grava em tabela staging e o backend normaliza.

Alternativas consideradas

  • Tudo em Python (FastAPI) ou tudo em Node: menor custo cognitivo, mas o time quer Java no backend e Python na coleta.
  • Python escrevendo direto no banco: mais simples, porém acopla dois sistemas ao schema e espalha regras de negócio — rejeitado.