Este projeto é parte de um desafio técnico, focado em boas práticas de arquitetura, integração com Redis, mensageria (Kafka) e Clean Architecture em Node.js com TypeScript.
- Node.js + TypeScript
- Express
- MongoDB (via Mongoose)
- Redis
- Apache Kafka (via KafkaJS)
- Jest (Testes unitários e integração)
- Docker + Docker Compose
- Swagger (Documentação interativa)
- Clean Architecture + SOLID
Certifique-se de ter o Docker e Docker Compose instalados.
docker-compose up --buildIsso irá subir:
- API Node.js →
http://localhost:3000 - MongoDB →
mongo:27017 - Redis →
redis:6379 - Kafka + Zookeeper
Para parar e remover os containers:
docker-compose down --volumes| Método | Rota | Descrição |
|---|---|---|
| POST | /clientes |
Cadastra um novo cliente |
| GET | /clientes/:id |
Consulta um cliente por ID |
| PUT | /clientes/:id |
Atualiza um cliente |
| DELETE | /clientes/:id |
Remove um cliente |
| GET | /clientes |
Lista todos os clientes |
Acesse a documentação interativa no Swagger:
http://localhost:3000/api-docsVocê poderá visualizar e testar todos os endpoints diretamente pelo navegador.
O Swagger foi integrado usando
swagger-ui-express.
src/
├── domain/ # Entidades e contratos do domínio
├── application/ # Casos de uso, serviços e interfaces (ports)
├── infrastructure/ # Banco de dados, cache (Redis), Kafka
├── interfaces/ # Controllers e rotas (Express)
├── main/ # EntryPoint da aplicação
├── tests/ # Testes unitários e integração
npm run testOs testes incluem:
- Integração com MongoDB (em container)
- Cache Redis (mockado com Jest)
- Kafka Producer (mockado)
O projeto possui CI automatizado via GitHub Actions.
A cada push ou pull request na branch main, é executado um workflow que:
- Sobe os containers com Docker Compose.
- Aguarda os serviços estarem prontos.
- Executa linter e testes dentro do container da aplicação.
- Estrutura em Clean Architecture com forte separação de responsabilidades.
- Redis é usado para cachear clientes com TTL de 60 segundos.
- Kafka envia mensagens ao tópico
cliente.criadopara simular processamento assíncrono.
Desenvolvido por Lucas Silvestre
Contato: linkedin.com/in/silvestre | github.com/SilvestreL