Projeto desenvolvido para estudar NestJS e arquitetura modular, implementando uma API completa de gerenciamento de tarefas com autenticação JWT, validações, documentação Swagger e testes automatizados.
- Framework: NestJS (Node.js)
- Linguagem: TypeScript
- Banco de Dados: MySQL com TypeORM
- Autenticação: JWT (JSON Web Tokens)
- Documentação: Swagger/OpenAPI
- Validação: Class Validator, Class Transformer
- Testes: Jest (unit + e2e)
- Conceitos estudados:
- Arquitetura modular do NestJS
- Dependency Injection
- Guards e Middlewares
- DTOs e validação de dados
- Relacionamentos de banco de dados
- Autenticação e autorização
# Iniciar aplicação
npm run start:dev
# Acessar Swagger
http://localhost:4000/swagger
# Endpoints principais
POST /auth/register # Registro de usuário
POST /auth/login # Login e obtenção de JWT
GET /tasks # Listar tarefas (protegido)
POST /tasks # Criar tarefa (protegido)- Módulos: Organização em módulos independentes (Auth, User, Task, Project)
- Controllers: Gerenciamento de rotas e endpoints REST
- Services: Lógica de negócio e regras da aplicação
- Providers: Injeção de dependência e IoC container
- JWT Strategy: Implementação de autenticação com tokens
- Guards: Proteção de rotas com AuthGuard
- Passport: Integração com estratégias de autenticação
- Bcrypt: Hash de senhas para segurança
- TypeORM: Mapeamento objeto-relacional
- Relacionamentos: One-to-Many, Many-to-One
- Migrations: Controle de versão do schema
- Entities: Modelagem de dados com decorators
@Injectable()
export class TaskService {
constructor(
@InjectRepository(Task)
private taskRepository: Repository<Task>,
) {}
async findAll(): Promise<Task[]> {
return this.taskRepository.find();
}
}export class CreateTaskDto {
@IsNotEmpty()
@IsString()
title: string;
@IsOptional()
@IsString()
description?: string;
@IsEnum(TaskStatus)
status: TaskStatus;
}@Controller('tasks')
@UseGuards(AuthGuard('jwt'))
export class TaskController {
@Get()
@ApiBearerAuth()
async findAll(@GetUser() user: User): Promise<Task[]> {
return this.taskService.findAllByUser(user.id);
}
}src/
├── auth/ # Módulo de autenticação (JWT e estratégias)
├── user/ # Módulo de usuários (CRUD e validações)
├── task/ # Módulo de tarefas
├── project/ # Módulo de projetos
├── main.ts # Ponto de entrada da aplicação
└── ... # Outros módulos e configurações
test/
└── ... # Testes e2e da aplicação
- Node.js (v14 ou superior)
- NestJS CLI (
npm i -g @nestjs/cli) - MySQL
- Clone o repositório:
git clone <repo-url>
cd nest-taskmanager-app- Instale as dependências:
npm install- Configure o arquivo
.env:
JWT_SECRET='sua_chave_secreta'
DB_HOST=localhost
DB_PORT=3306
DB_USERNAME=dev-user
DB_PASSWORD=dev-pass
DB_DATABASE=db_taskmanager- Execute a aplicação:
npm run start:dev- Arquitetura modular: Organizar código em módulos coesos
- Injeção de dependência: Entender IoC container do NestJS
- TypeORM: Configurar relacionamentos e migrations
- JWT: Implementar autenticação stateless
- Validação: Usar decorators para validação de DTOs
- NestJS Documentation
- TypeORM Documentation
- JWT.io - Entendimento de tokens JWT
- Swagger/OpenAPI
- Class Validator
- Implementar sistema de notificações
- Adicionar filtros avançados de busca
- Criar dashboard com métricas
- Implementar WebSockets para updates real-time
- Adicionar sistema de permissões (RBAC)
- Integrar com frontend React
- React Task Manager - Frontend da aplicação
- Front Task Manager - Interface HTML/CSS/JS
- Node Task Manager - Versão com Node.js puro
Desenvolvido por: Felipe Macedo
Contato: contato.dev.macedo@gmail.com
GitHub: FelipeMacedo
LinkedIn: felipemacedo1
💡 Reflexão: Este projeto foi essencial para dominar NestJS e arquiteturas enterprise em Node.js. A experiência com dependency injection, guards e TypeORM estabeleceu bases sólidas para desenvolvimento backend moderno.