Uma API RESTful para gerenciamento de tarefas construída com NestJS. Esta aplicação fornece um sistema backend robusto para gerenciar tarefas, incluindo autenticação de usuários, criação, atualização, filtragem e exclusão de tarefas.
- Framework: NestJS - Um framework progressivo do Node.js para construção de aplicações server-side eficientes, confiáveis e escaláveis.
- Banco de Dados: SQLite com TypeORM - Banco de dados relacional leve para desenvolvimento e testes.
- Autenticação: JWT (JSON Web Tokens) - Estratégia de autenticação segura usando Passport.js.
- Documentação: Swagger/OpenAPI - Documentação completa da API.
- Validação: Class-validator e class-transformer - Validação robusta de entradas.
O NestJS foi escolhido porque fornece uma arquitetura estruturada baseada nos conceitos do Angular. Isso garante um código bem organizado, escalável e fácil de manter. O suporte embutido ao TypeScript, injeção de dependência e design modular permite uma separação clara de responsabilidades e um código facilmente testável.
- Node.js (v16.x ou superior)
- npm (v8.x ou superior)
-
Clone o repositório
git clone https://github.com/rankioshi/TS-APIrest-AuthTask
-
Instale as dependências
npm install
Execute a aplicação em modo de observação:
npm run start:dev
Compile e execute a aplicação:
npm run build
npm run start:prod
A aplicação estará disponível em http://[::1]:3000
A documentação Swagger está disponível em http://[::1]:3000/api
quando a aplicação estiver em execução.
Registrar novo usuário
curl -X POST http://[::1]:3000/auth/register -H "Content-Type: application/json" -d '{"username": "testuser", "password": "Password123!"}'
Login
curl -X POST http://[::1]:3000/auth/login -H "Content-Type: application/json" -d '{"username": "testuser", "password": "Password123!"}'
Salve o token retornado para usar nas requisições seguintes
Criar uma tarefa
curl -X POST http://[::1]:3000/tasks -H "Content-Type: application/json" -H "Authorization: Bearer SEU_TOKEN_JWT" -d '{"title": "Completar projeto", "description": "Finalizar o projeto NestJS", "status": "OPEN"}'
Listar todas as tarefas
curl -X GET http://[::1]:3000/tasks -H "Authorization: Bearer SEU_TOKEN_JWT"
Filtrar tarefas por status
curl -X GET "http://[::1]:3000/tasks?status=IN_PROGRESS" -H "Authorization: Bearer SEU_TOKEN_JWT"
Buscar tarefa por id
curl -X GET http://[::1]:3000/tasks/1 -H "Authorization: Bearer SEU_TOKEN_JWT"
Atualizar uma tarefa
curl -X PUT http://[::1]:3000/tasks/1 -H "Content-Type: application/json" -H "Authorization: Bearer SEU_TOKEN_JWT" -d '{"status": "DONE"}'
Deletar uma tarefa
curl -X DELETE http://[::1]:3000/tasks/1 -H "Authorization: Bearer SEU_TOKEN_JWT"
Um arquivo de coleção para Insomnia ou Postman pode ser importado de docs/api-collection.json
(Observação: você precisa criar este arquivo separadamente).
A aplicação segue uma arquitetura modular com separação clara de responsabilidades:
- Módulo de Autenticação: Gerencia autenticação e autorização de usuários
- Módulo de Usuários: Gerencia a entidade usuário e suas operações
- Módulo de Tarefas: Funcionalidade principal de gerenciamento de tarefas
- Módulo Comum: Utilitários compartilhados, guards e decorators
A aplicação usa TypeORM com SQLite para persistência de dados:
- Entidade Usuário: Armazena credenciais e informações pessoais dos usuários
- Entidade Tarefa: Armazena detalhes das tarefas com relação ao usuário que a criou
- Senhas são criptografadas usando bcrypt
- Tokens JWT são usados para autenticação
- Guards protegem as rotas que exigem autenticação
- Validação garante integridade dos dados
Com mais tempo, as seguintes melhorias podem ser implementadas:
-
Migração de Banco de Dados: Implementar um sistema de migração para alterações de schema.
-
Testes: Aumentar a cobertura de testes unitários e e2e.
-
Filtragem Avançada: Implementar paginação e filtros mais complexos para tarefas.
-
Integração com PostgreSQL: Substituir o SQLite por PostgreSQL para ambientes de produção.
-
Cache: Implementar cache com Redis para dados frequentemente acessados.
-
Papéis de Usuário: Adicionar controle de acesso baseado em papéis (RBAC).
-
Logs e Monitoramento: Implementar sistema de logs com Winston ou Pino.
-
CI/CD: Criar pipelines de testes e deploy automatizados.
-
Dockerização: Containerizar a aplicação para facilitar o deploy.
-
Tokens de Atualização: Implementar refresh tokens para mais segurança.
- Linkedin: https://www.linkedin.com/in/gabrielseren/
- GitHub: https://github.com/rankioshi
- Email: gabrielrankseren@gmail.com