Stack tecnológica
| Camada | Tecnologia | Observações |
|---|---|---|
| Backend / API | Java 21 + Spring Boot 3 | Arquitetura hexagonal (ports & adapters) |
| Coleta / Automação | Python 3.12 | Pipeline de download + parsing do CSV |
| Frontend | Angular 17+ (standalone + signals) | UI, mapa e filtros |
| Banco | PostgreSQL 16 + PostGIS | Único banco relacional; dono do schema é o backend |
| Migrations | Flyway (no backend Java) | Versiona o schema; Python não altera schema |
| Mensageria | RabbitMQ | Processamento assíncrono (ver ADR-0005) |
| Cache | Redis | Cache de buscas quentes na API REST |
| Estilo (front) | SASS/SCSS | Estilização com variáveis/tokens (ver Frontend) |
| Empacotamento (dev) | Docker + Docker Compose | 1 container por serviço |
| Deploy (prod) | k3s + Argo CD (GitOps) | VPS Hostinger, Traefik/Cloudflare — ver Kubernetes & GitOps e Rede e exposição |
| Reverse proxy | Nginx | Serve o Angular e faz proxy /api → backend |
A decisão e os trade-offs estão registrados em ADR-0001 — Stack tecnológica.
Princípio de fronteira (Java ↔ Python)
O backend Java é o dono do banco/schema. O coletor Python não escreve direto nas tabelas de negócio; envia os dados por uma API de ingestão (POST /internal/ingest/...). Isso mantém regras e validações em um lugar só e evita dois sistemas acoplados ao mesmo schema.
Alternativa mais simples (MVP): o Python grava numa tabela de staging (
raw_*) e o backend normaliza. Evite dar ao Python acesso de escrita às tabelas de domínio.
Detalhes por serviço
- Backend (Java) — estrutura hexagonal e libs Maven.
- Collector (Python) — pipeline e libs.
- Frontend (Angular) — organização por feature e libs.
Catálogo completo de ferramentas
Ver Ferramentas para o toolchain open source completo (CI/CD, observabilidade, segurança, etc.).