ADR 0001 - Visão de Arquitetura do Serviço
Introdução ao documento
Este ADR registra as decisões arquiteturais principais observáveis no código atual do serviço de onboarding via WhatsApp. Evidência: src/server.ts:102 Evidência: src/flows/business.ts:132
Versionamento
- Versão do documento:
2.0.0. - Última atualização:
2026-03-18. - Status da decisão:
Aceito. Evidência: codex-promts.md:16
Referencial teórico
- Architecture Decision Records (ADR).
- C4 Model para documentação complementar. Evidência: docs/architecture/c4-component.md:1
Contexto
O serviço precisa:
- processar payloads criptografados do WhatsApp Flows;
- orquestrar regras de negócio de onboarding pessoal/empresarial;
- integrar múltiplas APIs externas;
- manter envio assíncrono de link de grupo com retry. Evidência: src/server.ts:142 Evidência: src/flows/personal.ts:52 Evidência: src/flows/business.ts:132 Evidência: src/workers/groupLinkDispatchWorker.ts:136
Decisão
- Manter arquitetura monolítica em Node.js/Express com módulos por responsabilidade (
routes,flows,features/api,workers). - Persistir localmente em SQLite via Sequelize.
- Implementar fila assíncrona com tabela própria e worker em polling no mesmo processo da API.
- Expor healthchecks HTTP para integração com probes Kubernetes. Evidência: src/server.ts:36 Evidência: src/server.ts:162 Evidência: src/config/database.ts:8 Evidência: src/models/groupLinkDispatchQueue.ts:122 Evidência: src/server.ts:82 Evidência: src/server.ts:168
Consequências
Positivas
- Simplicidade de deploy e operação inicial (um serviço principal com recursos internos).
- Menor acoplamento com infraestrutura externa de fila/cache. Evidência: Dockerfile:50 Evidência: src/workers/groupLinkDispatchWorker.ts:182
Negativas
- Worker e API compartilham processo, aumentando impacto de falhas e competição por recursos.
- Dependência de
db.sync()para criação de tabelas sem migration completa para fila. Evidência: src/server.ts:82 Evidência: src/server.ts:79 Evidência: src/models/groupLinkDispatchQueue.ts:122
Alternativas consideradas
- Separar worker em processo/serviço dedicado.
- Introduzir broker de mensagens externo (ex.: Redis/queue dedicada).
- Formalizar migrations completas para todas as entidades. Evidência: ecosystem.config.cjs:16 Evidência: helm/templates/secret.yaml:31 Evidência: src/migrations/20240807154411-create-otp.mjs:5
Pendências
- Confirmar roadmap de desacoplamento API/worker.
- Confirmar estratégia de migração para
GroupLinkDispatchQueue. Evidência: ecosystem.config.cjs:16 Evidência: src/models/groupLinkDispatchQueue.ts:122