Skip to content

Visão geral da arquitetura

Organização por responsabilidade

CaminhoPapel
src/server.tsPonto de entrada da aplicação.
src/app.tsMontagem do Fastify, hooks globais e registro de rotas.
src/http/routes/Borda HTTP atual da aplicação.
src/domain/Entidades, value objects e use cases.
src/telemetry/SDK, auto-instrumentação e camada manual de observabilidade.
infra/Stack Docker e configurações operacionais.
docs/Documentação técnica da solução.

Fluxo de request no estado atual

txt
HTTP request
   ->
Fastify route
   ->
metadata de telemetria da rota
   ->
runObservedOperation()
   ->
regra principal
   ->
logs, métricas e spans
   ->
OTel Collector

Papel das funções centrais

FunçãoArquivoResponsabilidade
bootstrap()src/server.tsSobe a aplicação e registra log de início.
buildApp()src/app.tsCria a instância Fastify e conecta telemetria + rotas.
registerRoutes()src/http/routes/index.tsOrganiza o registro das rotas.
registerHttpTelemetry()src/telemetry/application-telemetry.tsHooks HTTP globais para rastreamento e métricas.
runObservedOperation()src/telemetry/application-telemetry.tsInstrumentação manual da operação principal.

Regras arquiteturais recomendadas

Regra de ouro

OpenTelemetry deve ficar concentrado na borda da aplicação e na camada de telemetria, não espalhado em entidades e value objects.

  • O domínio deve permanecer independente de Fastify e Docker.
  • Rotas devem declarar sua operação de forma semântica.
  • Controllers futuros podem chamar use cases, mas a observabilidade deve continuar centralizada.
  • Métricas devem usar atributos estáveis; contexto de alta cardinalidade deve ficar em spans e logs.

O que muda quando entrarem controllers

txt
Route
   ->
Controller
   ->
Use Case
   ->
Repository / DB / API externa

Nesse cenário:

  • a rota continua declarando config.telemetry
  • o controller passa a orquestrar entrada e saída
  • o use case continua focado em negócio
  • a instrumentação continua usando runObservedOperation() na borda

Documentação técnica do estado atual do projeto e da stack de observabilidade.