Sistema de gerenciamento de tarefas implementado com Arquitetura Modular (Feature-based), Result Pattern e padrões avançados.
Este projeto segue a Arquitetura Modular, organizando o código por features/módulos verticais:
src/
├── core/ # Código compartilhado
│ ├── either.ts # Result Pattern
│ ├── base-entity.ts # Entidade base abstrata
│ └── domain-error.ts # Hierarquia de erros
│
├── modules/ # Módulos por feature
│ └── tasks/
│ ├── domain/ # Entidades e interfaces
│ ├── application/ # Services e DTOs
│ └── infra/ # Controllers e repositórios
│
├── infra/ # Infraestrutura compartilhada
│ ├── database/ # TypeORM
│ └── http/ # Fastify
└── config/ # Configurações
- Arquitetura Modular (Feature-based)
- Result Pattern (Either<Error, Success>)
- Command Pattern para comandos
- DTOs explícitos com validação Zod
- Enum TaskStatus (PENDING, COMPLETED, CANCELLED)
- BaseEntity abstrata com Template Method
- Hierarquia de erros customizada
- Controllers separados por módulo
- Adapter Pattern para repositórios
- Tratamento de erros funcional
| Aspecto | Esta Versão |
|---|---|
| Organização | Por módulos/features |
| Entidades | TaskEntity extends BaseEntity |
| Services | Result Pattern (Either) |
| Status | Enum (PENDING, COMPLETED, CANCELLED) |
| DTOs | Zod schemas explícitos |
| Erros | Hierarquia customizada |
| Controllers | Separados por módulo |
- POST
/users- Criar usuário - POST
/users/sessions- Login (JWT)
- POST
/tasks- Criar tarefa →Either<Error, TaskOutput> - GET
/tasks- Listar tarefas →Either<Error, TaskOutput[]> - PUT
/tasks/:id- Atualizar →Either<Error, TaskOutput> - DELETE
/tasks/:id- Deletar →Either<Error, void>
# Instalar dependências
npm install
# Configurar variáveis de ambiente
cp .env.example .env
# Executar migrations
npm run migration:run# Desenvolvimento
npm run dev
# Testes
npm test
# Build
npm run build
npm startEstrutura de testes compatível com a versão tradicional.
npm run test:appTaskEntity- Entidade com métodos de negócio específicosITaskRepository- Interface do repositórioTaskStatus- Enum de status
CreateTaskService- Criar tarefaListUserTasksService- Listar tarefasUpdateTaskService- Atualizar tarefaDeleteTaskService- Deletar tarefaTaskDTO- DTOs com validação Zod
TypeOrmTaskRepositoryAdapter- Implementação TypeORMTaskController- Handlers HTTP
- Result Pattern - Either<L, R>
- Command Pattern - UpdateTaskCommand, DeleteTaskCommand
- Adapter Pattern - TypeOrmTaskRepositoryAdapter
- Template Method - BaseEntity
- Factory Method - TaskEntity.build()
- Repository Pattern - ITaskRepository
- TypeScript
- Node.js
- Fastify
- TypeORM
- PostgreSQL
- JWT
- Bcrypt
- Zod (validação de DTOs)
- Vitest
TaskEntity.build(data) // Factory method
changeTitle(title) // Alterar título
changeDescription(desc) // Alterar descrição
markAsCompleted() // Marcar como concluída
markAsPending() // Voltar para pendente
cancel() // Cancelar tarefa
updateDetails(data) // Atualizar múltiplos campos
isOwnedBy(userId) // Verificar propriedade
isCompleted() // Verificar statusconst result = await service.execute(input);
if (result.isLeft()) {
// Tratar erro
return reply.status(400).send({ error: result.value.message });
}
// Sucesso
return reply.status(200).send(result.value);Arquitetura Modular - Feature-based com Result Pattern
ISC
- Versão Tradicional: Clean Architecture por camadas
- Esta Versão: Arquitetura Modular com Result Pattern