O projeto segue uma arquitetura com camadas bem definidas para aplicação, domínio, infraestrutura e apresentação. Cada camada tem uma responsabilidade específica:
Example :/src
├── /application
│ ├── /commands # Orquestra as operações e lógica de alto nível
│ ├── /jobs # Jobs executados com base em eventos
│ ├── /use-cases # Casos de uso simples e bem definidos
│ └── /services # Lógica de negócios e processamento de jobs e agregações de casos de uso
│
├── /domain
│ ├── /entities # Entidades de negócios e lógica principal do domínio
│ ├── /repositories # Interfaces de repositórios para acesso a dados
│ ├── /events # Eventos de domínio tratados pela aplicação
│ └── /value-objects # Objetos de valor imutáveis que representam conceitos de domínio
│
├── /infra
│ ├── /kafka # Cliente Kafka e configuração
│ ├── /persistence # Implementação de repositórios e acesso ao banco de dados
│ └── /queue-handlers # Consumidores de eventos de filas Kafka
│
├── /presentation
│ ├── /controllers # Controladores que lidam com requisições e respostas da API
│ └── /dtos # Objetos de Transferência de Dados para entrada/saída
│
└── /config # Configurações da aplicação, logging, variáveis de ambiente