Skip to content

Laurowd/To-do-list

Repository files navigation

ToDo List - Arquitetura Modular

Sistema de gerenciamento de tarefas implementado com Arquitetura Modular (Feature-based), Result Pattern e padrões avançados.

Arquitetura

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

Características Avançadas

  • 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

Diferenças da Versão Tradicional

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

Funcionalidades

Autenticação

  • POST /users - Criar usuário
  • POST /users/sessions - Login (JWT)

Tarefas (Novo Result Pattern)

  • 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>

Instalação

# Instalar dependências
npm install

# Configurar variáveis de ambiente
cp .env.example .env

# Executar migrations
npm run migration:run

Execução

# Desenvolvimento
npm run dev

# Testes
npm test

# Build
npm run build
npm start

Testes

Estrutura de testes compatível com a versão tradicional.

npm run test:app

Módulo Tasks

Domain Layer

  • TaskEntity - Entidade com métodos de negócio específicos
  • ITaskRepository - Interface do repositório
  • TaskStatus - Enum de status

Application Layer

  • CreateTaskService - Criar tarefa
  • ListUserTasksService - Listar tarefas
  • UpdateTaskService - Atualizar tarefa
  • DeleteTaskService - Deletar tarefa
  • TaskDTO - DTOs com validação Zod

Infrastructure Layer

  • TypeOrmTaskRepositoryAdapter - Implementação TypeORM
  • TaskController - Handlers HTTP

Padrões de Design

  1. Result Pattern - Either<L, R>
  2. Command Pattern - UpdateTaskCommand, DeleteTaskCommand
  3. Adapter Pattern - TypeOrmTaskRepositoryAdapter
  4. Template Method - BaseEntity
  5. Factory Method - TaskEntity.build()
  6. Repository Pattern - ITaskRepository

Tecnologias

  • TypeScript
  • Node.js
  • Fastify
  • TypeORM
  • PostgreSQL
  • JWT
  • Bcrypt
  • Zod (validação de DTOs)
  • Vitest

Métodos de Negócio (TaskEntity)

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 status

Result Pattern

const 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);

Autor

Arquitetura Modular - Feature-based com Result Pattern

Licença

ISC


Versões

  • Versão Tradicional: Clean Architecture por camadas
  • Esta Versão: Arquitetura Modular com Result Pattern

About

API de tarefas em TypeScript com Fastify, PostgreSQL, TypeORM, JWT, Zod, Docker e testes.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages