Evoluir o monolito atual para microsservicos com desenvolvimento local via Docker, mantendo:
- Organizacao atual: monorepo com
api/(Spring Boot) eweb/(frontend) neste repositorio; extracao futura pode voltar a multi-repo (um repositorio por servico) conforme as fases abaixo - Banco PostgreSQL unico compartilhado
- Isolamento por schema/tabela (ownership por servico)
- Integracao assincorna via RabbitMQ
- API monolitica Spring Boot com CRUD de catalogo.
- Publicacao de evento
OrderCreatedja existente. - Consumers de inventario e notificacao ainda no mesmo processo.
- Docker Compose na raiz do monorepo sobe app + web + Postgres + RabbitMQ.
Servicos previstos:
orderflow-catalog-apiorderflow-order-apiorderflow-inventory-workerorderflow-notification-workerorderflow-contracts(schemas/eventos)orderflow-local-dev(compose e scripts)
Cada servico possui ownership claro dos seus dados:
catalogschema: produtos e categoriasordersschema: pedidos e itensinventoryschema: reserva/baixa de estoquenotificationschema: log/outbox de notificacoes
Regras:
- Cada servico escreve apenas no proprio schema.
- Leitura cross-service por API/evento, nao por join direto.
- Usuario SQL por servico com grants restritos.
- Migracoes versionadas por servico (Flyway recomendado).
- Baseline tecnico
- Corrigir inconsistencias de build.
- Alinhar README com estado real e roadmap.
- Contratos
- Criar schemas de eventos no repo
orderflow-contracts.
- Criar schemas de eventos no repo
- Extracao de workers
- Mover consumers para
inventory-workerenotification-worker.
- Mover consumers para
- Extracao de APIs
- Separar catalogo e pedidos em servicos independentes.
- Hardening
- DLQ, idempotencia, observabilidade e pipeline CI.
Hoje o docker-compose.yml na raiz deste monorepo sobe Postgres, RabbitMQ, API e web. No alvo multi-repo, um repositorio orderflow-local-dev pode centralizar:
docker-compose.ymlpara todos os servicospostgreserabbitmq.env.example- scripts de bootstrap (
up,down,logs)
- Build local verde (
mvn test). - Subida local unica com Compose.
- Evento
order.createdprocessado por workers externos. - Documentacao atualizada em cada PR.