C4 - Componentes (L3)
Introdução ao documento
Este documento descreve os componentes internos do serviço dhedalos-api-onboarding-express com foco em impacto operacional e pontos de quebra.
Evidência: src/server.ts:1
Evidência: src/server.ts:162
Versionamento
- Versão do documento:
2.0.0. - Última atualização:
2026-03-18. Evidência: codex-promts.md:163
Referencial teórico
- C4 Model (nível de componente).
- Mermaid para representação dos fluxos. Evidência: /home/hilton/Documentos/weef/docs-hub/docs/standard/micro-repo.md:12
Responsabilidade do serviço/app
- Expor endpoint de callback para WhatsApp Flows (
POST /) com decrypt/encrypt. - Expor endpoints de OTP e envio de templates protegidos por token de serviço.
- Expor webhook Meta para recebimento de eventos e resposta automatizada.
- Gerenciar fila assíncrona para envio de link de grupo. Evidência: src/server.ts:102 Evidência: src/server.ts:162 Evidência: src/routes/webhook.ts:10 Evidência: src/workers/groupLinkDispatchWorker.ts:171
Dependências (DB, cache, fila, storage, externos)
- DB/Storage: SQLite (
database.sqlite) via Sequelize. - Cache: não identificado cache dedicado no runtime atual.
- Fila: tabela
GroupLinkDispatchQueue+ worker com polling in-process. - Externos: WhatsApp Cloud API, WordPress API, Sebrae API e ViaCEP. Evidência: src/config/database.ts:5 Evidência: src/config/database.ts:8 Evidência: src/models/groupLinkDispatchQueue.ts:122 Evidência: src/workers/groupLinkDispatchWorker.ts:182 Evidência: src/features/api/whatsapp/sendFlowTemplate.ts:10 Evidência: src/features/api/wp/getCourseDetails.ts:13 Evidência: src/features/api/sebrae/getPersonCompanies.ts:12 Evidência: src/features/api/viacep/getAdressByCep.ts:11
Componentes internos agrupados por camada
Camada de entrada HTTP
src/server.ts: bootstrap do Express, middlewares globais, healthchecks, montagem de rotas.src/routes/*: handlers de recursos (otp,sendTemplate,sendGroupLink,webhook). Evidência: src/server.ts:36 Evidência: src/server.ts:167 Evidência: src/routes/otp.ts:1
Camada de orquestração de fluxo
src/flows/personal.ts: fluxo de onboarding pessoa física.src/flows/business.ts: fluxo de onboarding empresarial com integrações condicionais.src/utils/flowSession.ts: parsing deflow_token. Evidência: src/server.ts:14 Evidência: src/server.ts:15 Evidência: src/utils/flowSession.ts:6
Camada de integração externa
src/features/api/whatsapp/*: envio de templates OTP/flow/link.src/features/api/wp/*: dados de curso, matrícula e perfil.src/features/api/sebrae/*esrc/features/api/viacep/*: enriquecimento de dados. Evidência: src/features/api/whatsapp/index.ts:1 Evidência: src/features/api/wp/index.ts:1 Evidência: src/features/api/sebrae/config.ts:3 Evidência: src/features/api/viacep/getAdressByCep.ts:11
Camada de dados e processamento assíncrono
src/models/otp.tsesrc/models/groupLinkDispatchQueue.ts: modelos persistentes.src/services/groupLinkDispatchQueue.ts: enfileiramento.src/workers/groupLinkDispatchWorker.ts: consumo e retry. Evidência: src/models/otp.ts:18 Evidência: src/models/groupLinkDispatchQueue.ts:60 Evidência: src/services/groupLinkDispatchQueue.ts:24 Evidência: src/workers/groupLinkDispatchWorker.ts:99
Fluxos críticos (3 a 5)
- Callback criptografado do WhatsApp Flow
POST /valida corpo e assinatura, decripta payload, decide fluxo (personal/business) e retorna resposta criptografada. Evidência: src/server.ts:114 Evidência: src/server.ts:128 Evidência: src/server.ts:331 Evidência: src/server.ts:159
- Geração e validação de OTP
POST /otpgera código e validade de 15 min, persiste e dispara template WhatsApp;POST /otp/confirmationvalida existência/expiração. Evidência: src/routes/otp.ts:11 Evidência: src/routes/otp.ts:17 Evidência: src/routes/otp.ts:27 Evidência: src/routes/otp.ts:37
- Onboarding e matrícula (fluxos personal/business)
- Fluxos consultam status de matrícula, atualizam perfil WP, verificam disponibilidade de turma, matriculam e retornam telas. Evidência: src/flows/personal.ts:85 Evidência: src/flows/personal.ts:134 Evidência: src/flows/personal.ts:192 Evidência: src/flows/business.ts:169 Evidência: src/flows/business.ts:602
- Envio assíncrono de link de grupo
- Após matrícula, o serviço enfileira envio e o worker processa com tentativas e reprogramação em falhas. Evidência: src/flows/personal.ts:207 Evidência: src/flows/business.ts:639 Evidência: src/workers/groupLinkDispatchWorker.ts:121 Evidência: src/workers/groupLinkDispatchWorker.ts:136
- Webhook Meta inbound/outbound
POST /webhookrecebe mensagem, responde texto e marca como lida via Graph API. Evidência: src/routes/webhook.ts:16 Evidência: src/routes/webhook.ts:29 Evidência: src/routes/webhook.ts:54
Diagrama Mermaid (C4-like)
Evidência: src/server.ts:12 Evidência: src/services/groupLinkDispatchQueue.ts:36 Evidência: src/workers/groupLinkDispatchWorker.ts:101 Evidência: src/features/api/wp/getCourseDetails.ts:13
Pendências
- Confirmar se a separação entre tabela
Otp(model) eOtps(migration) é intencional. - Confirmar necessidade de worker dedicado separado de
server.tspara isolamento de falhas em produção. Evidência: src/models/otp.ts:33 Evidência: src/migrations/20240807154411-create-otp.mjs:5 Evidência: src/server.ts:82