Uma API REST robusta para gerenciamento de tarefas construída com TypeScript puro e Clean Architecture, sem dependências externas de frameworks.
O Task Control é uma aplicação backend que demonstra a implementação de Clean Architecture e Domain-Driven Design (DDD) usando apenas Node.js nativo e TypeScript.
- 🚫 Zero dependências externas de frameworks (apenas dev dependencies)
- 🏗️ Clean Architecture com separação clara de responsabilidades
- 🔷 Domain-Driven Design com entidades e casos de uso bem definidos
- 📦 TypeScript com configurações rigorosas e type safety
- 🗄️ Banco de dados em JSON com persistência automática
- 🔄 API REST completa com CRUD de tarefas
- ⚡ Hot reload para desenvolvimento
- 🎯 Arquitetura testável e desacoplada
O projeto segue os princípios da Clean Architecture de Robert C. Martin, organizado em camadas bem definidas:
src/
├── 🏢 domain/ # Camada de Domínio
├── 💼 application/ # Camada de Aplicação
├── 🔧 infrastructure/ # Camada de Infraestrutura
├── 🌐 presentation/ # Camada de Apresentação
└── 📦 shared/ # Recursos Compartilhados
- Responsabilidade: Contém as regras de negócio centrais
- Componentes:
- Entities: Entidade
Taskcom validações e métodos de negócio - Repositories: Interface
ITaskRepositorydefinindo contratos - Value Objects: Objetos de valor do domínio
- Domain Services: Serviços específicos do domínio
- Entities: Entidade
- Responsabilidade: Orquestração dos casos de uso da aplicação
- Componentes:
- Use Cases: Casos de uso implementados (Create, List, Update, Delete, Toggle)
- DTOs: Data Transfer Objects para comunicação entre camadas
- Interfaces: Contratos de serviços externos
- Responsabilidade: Implementação de detalhes técnicos
- Componentes:
- Database: Sistema de banco de dados em JSON
- Repositories: Implementação concreta do
TaskRepository - HTTP Server: Servidor HTTP nativo com middlewares
- External Services: Integrações externas
- Responsabilidade: Interface de comunicação (API REST)
- Componentes:
- Controllers: Controladores HTTP (
TaskController) - Routes: Definição de rotas e endpoints
- Middlewares: Middlewares de requisição
- Controllers: Controladores HTTP (
- Responsabilidade: Recursos utilizados por múltiplas camadas
- Componentes:
- Types: Tipos TypeScript compartilhados
- Utils: Utilitários e helpers
- Factories: Factories para injeção de dependência
- ✅ Criar tarefa com validações
- 📖 Listar tarefas com filtros e paginação
- ✏️ Atualizar tarefa parcial ou totalmente
- 🗑️ Excluir tarefa
- 🔄 Alternar status de completada
- 🔍 Busca por termo (título e descrição)
- 📄 Paginação configurável
- 🗂️ Filtros por status e data de criação
- 📊 Ordenação por diferentes campos
- 📈 Contagem total de registros
- ⚡ Validação de duplicatas
- TypeScript 5.9.2 - Linguagem principal
- Node.js >=18 - Runtime JavaScript
- ESModules - Sistema de módulos moderno
- Strict TypeScript - Configurações rigorosas
- Path Mapping - Imports limpos com aliases
- Source Maps - Debug facilitado
{
"@types/node": "^24.3.1",
"rimraf": "^6.0.1",
"ts-node": "^10.9.2",
"typescript": "^5.9.2"
}GET /healthPOST /tasks # Criar tarefa
GET /tasks # Listar tarefas (com filtros)
PUT /tasks/:id # Atualizar tarefa
DELETE /tasks/:id # Excluir tarefa
PATCH /tasks/:id/complete # Alternar status de completadaCriar uma tarefa:
curl -X POST http://localhost:3333/tasks \
-H "Content-Type: application/json" \
-d '{
"title": "Estudar Clean Architecture",
"description": "Implementar projeto seguindo os princípios da Clean Architecture"
}'Listar tarefas com filtros:
curl "http://localhost:3333/tasks?completed=false&search=estudar&page=1&limit=10"- Node.js >= 18
- npm ou yarn
git clone https://github.com/maykonsousa/task-control.git
cd task-controlnpm installnpm run dev# Compilar o projeto
npm run build
# Executar a versão compilada
npm startnpm run dev # Desenvolvimento com hot reload
npm run build # Compilar TypeScript para JavaScript
npm start # Executar versão compilada
npm run clean # Limpar pasta dist
npm run type-check # Verificar tipos sem compilartask-control/
├── 📄 package.json
├── 📄 tsconfig.json
├── 📄 db.json # Banco de dados JSON
├── 📁 dist/ # Código compilado
├── 📁 node_modules/ # Dependências
└── 📁 src/
├── 📄 server.ts # Ponto de entrada
├── 📁 domain/ # Regras de negócio
│ ├── 📁 entities/
│ ├── 📁 repositories/
│ └── 📁 services/
├── 📁 application/ # Casos de uso
│ ├── 📁 use-cases/
│ └── 📁 dtos/
├── 📁 infrastructure/ # Detalhes técnicos
│ ├── 📁 database/
│ ├── 📁 http/
│ └── 📁 repositories/
├── 📁 presentation/ # Interface HTTP
│ ├── 📁 controllers/
│ └── 📁 routes/
└── 📁 shared/ # Recursos compartilhados
├── 📁 factories/
├── 📁 types/
└── 📁 utils/
curl http://localhost:3333/healthcurl -X POST http://localhost:3333/tasks \
-H "Content-Type: application/json" \
-d '{
"title": "Minha primeira tarefa",
"description": "Testando a API de controle de tarefas"
}'- Independência de frameworks - Sem dependência de libs externas
- Testabilidade - Código desacoplado e injetável
- Independência de UI - Lógica separada da apresentação
- Independência de banco - Repository pattern
- Regra de dependência - Dependências apontam para dentro
- Ubiquitous Language - Linguagem comum do domínio
- Entities - Objetos com identidade
- Value Objects - Objetos sem identidade
- Domain Services - Serviços do domínio
- Repository Pattern - Abstração de persistência
- S - Single Responsibility Principle
- O - Open/Closed Principle
- L - Liskov Substitution Principle
- I - Interface Segregation Principle
- D - Dependency Inversion Principle
- Performance - Menos overhead de bibliotecas
- Segurança - Menor superfície de ataque
- Controle - Total controle sobre o código
- Aprendizado - Entendimento profundo do Node.js
- Manutenibilidade - Código organizado e limpo
- Testabilidade - Fácil de testar cada camada
- Flexibilidade - Fácil de trocar implementações
- Escalabilidade - Estrutura para crescimento
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Maykon Sousa
- GitHub: @maykonsousa
- LinkedIn: Maykon Sousa