Este projeto foi desenvolvido para servir como base de uma API backend moderna utilizando TypeScript + Express + Docker, com foco em uma arquitetura modular, escalável e alinhada com boas práticas de engenharia de software.
Durante o desenvolvimento, foram aplicados conceitos que favorecem:
- alta coesão
- baixo acoplamento
- manutenibilidade
- princípios SOLID (principalmente SRP, DIP e LSP)
- Service Layer (separação de regras de negócio)
- Repository Pattern (abstração de acesso ao banco)
- DTOs e Mappers (contratos de entrada/saída e transformação de dados)
- Tratamento centralizado de erros (middlewares + erros personalizados)
- Testes unitários com Jest
- Ambiente completo com Docker + Docker Compose
- Node
- TypeScript
- Express
- TypeORM
- MySQL
- Jest
- Docker + Docker Compose
O projeto segue uma estrutura modular, com separação clara de responsabilidades:
src/
├── controllers/ # Coordena Request/Response
├── services/ # Regras de negócio
├── repositories/ # Acesso ao banco (TypeORM)
├── dtos/ # Contratos de entrada e saída
├── mappers/ # Entity → DTO
├── middlewares/ # Tratamento global
├── errors/ # Erros padronizados
├── database/ # Data source, entities e migrations
└── routes/ # Definição das rotas Route → Validation → Controller → Service → Repository → Database
→ Service → Controller → Response DTO → Client
Errors → Error Middleware → Standard Response - Node + npm (opcionais)
- Ambiente Linux/WSL
- Docker + Docker Compose
git clone https://github.com/luanmarcosdev/tscontainer
cd tscontainerNecessário apenas se quiser rodar o servidor ou os testes diretamente na máquina (sem Docker).
npm installO docker-compose já inicia a API em modo desenvolvimento junto com o banco MySQL.
docker-compose up -d --buildOs testes deste projeto estão utilizando mocks (obrigado Repository :P), portanto não dependem do banco de dados.
- Rode os testes localmente caso tenha instalado as dependencias na maquina
npm run test- Rode os testes dentro do container
docker exec -it ts-container-api npm run testdocker exec -it ts-container-api npm run migration:runhttp://localhost:3000| Método | Rota | Descrição |
|---|---|---|
| GET | /users | Lista usuários |
| POST | /users | Cria usuário |
| PUT | /users/:id | Atualiza usuário |
| DELETE | /users/:id | Remove usuário |