Skip to content

244Walyson/TODO-List

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Todo List API - Take Home Challenge

Uma API REST robusta para gerenciamento de tarefas (Todo List) construída com NestJS, implementando autenticação JWT, CRUD completo e arquitetura limpa.

⚠️ Disclaimer Arquitetural

Este projeto implementa arquiteturas híbridas intencionalmente:

  • Auth/User Modules: Seguem Clean Architecture com separação core/infrastructure
  • Todo Module: Utiliza MVC tradicional do NestJS para simplicidade

O sistema de autenticação foi reutilizado de outro serviço (clean architecture) enquanto o módulo TODO foi desenvolvido especificamente para este desafio usando MVC comum. Esta abordagem demonstra flexibilidade arquitetural baseada no contexto e complexidade de cada domínio.

Executando Local com Docker (Recomendado)

# Clonar repositório
git clone git@github.com:244Walyson/TODO-List.git take-home
cd take-home

# Subir aplicação com Docker
docker compose up --build -d

Aplicação estara disponivel em http://localhost:5173 Backend disponivel em http://localhost:3000

🚀 Tecnologias Utilizadas

  • Backend: NestJS + TypeScript
  • Banco de Dados: PostgreSQL (Neon Cloud + Docker para desenvolvimento)
  • ORM: Prisma
  • Autenticação: JWT + OAuth2 (Google/GitHub)
  • Containerização: Docker & Docker Compose
  • Testes: Jest
  • Validação: class-validator

📋 Funcionalidades

✅ Sistema de Autenticação

  • Login com email/senha
  • Refresh tokens
  • OAuth2 com Google e GitHub
  • Recuperação de senha via email
  • Middleware de autenticação JWT

✅ Gerenciamento de Tarefas

  • CRUD Completo: Criar, listar, atualizar e deletar tarefas
  • Toggle Status: Marcar/desmarcar como concluída
  • Filtros: Por usuário e sessão
  • Validação: DTOs com validação automática

✅ Gerenciamento de Usuários

  • Criação de usuários
  • Atualização de perfil
  • Busca paginada
  • Hash seguro de senhas

🏗️ Arquitetura

backend/
├── src/
│   ├── auth/                 # Clean Architecture (reutilizado)
│   │   ├── core/            # Domínio: entities, use-cases, interfaces
│   │   └── infrastructure/   # Framework: controllers, DTOs, repositories
│   ├── user/                # Clean Architecture (reutilizado)
│   │   ├── core/            # Domínio: entities, use-cases, interfaces
│   │   └── infrastructure/   # Framework: controllers, DTOs, repositories
│   ├── todo/                # MVC Tradicional (desenvolvido para o desafio)
│   │   ├── controllers/     # Rotas e validação HTTP
│   │   ├── service/         # Lógica de negócio
│   │   ├── repository/      # Acesso a dados
│   │   └── dtos/           # Validação de entrada
│   └── utils/              # Utilitários compartilhados
├── prisma/                 # Schema e migrações
└── docker-compose.yml      # Configuração Docker

🔗 Endpoints da API

Autenticação

POST   /auth/token                    # Login com credenciais
POST   /auth/refresh-token            # Renovar access token
POST   /auth/recover-password/token/:email  # Solicitar recuperação de senha
POST   /auth/reset-password           # Redefinir senha
POST   /auth/redirect/google          # Login OAuth2 Google
POST   /auth/redirect/github          # Login OAuth2 GitHub

Usuários

POST   /users                         # Criar usuário
GET    /users                         # Listar usuários (paginado)
GET    /users/:id                     # Buscar usuário por ID
PUT    /users/:id                     # Atualizar usuário

Tarefas

POST   /tasks                         # Criar tarefa
GET    /tasks                         # Listar tarefas do usuário
GET    /tasks/:id                     # Buscar tarefa específica
PATCH  /tasks/:id                     # Atualizar tarefa
PATCH  /tasks/:id/toggle              # Alternar status de conclusão
DELETE /tasks/:id                     # Deletar tarefa

⚡ Quick Start

Pré-requisitos

  • Node.js 18+
  • Docker & Docker Compose
  • Git

Opção 1: Docker (Recomendado)

# Clonar repositório
git clone <repository-url>
cd backend

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

# Subir aplicação com Docker
docker-compose up -d

# Executar migrações (se necessário)
docker-compose exec app npx prisma migrate dev

Opção 2: Desenvolvimento Local

# Instalar dependências
npm install

# Configurar banco de dados no .env
# DATABASE_URL="postgresql://user:password@localhost:5432/todoapi"

# Executar migrações
npx prisma migrate dev

# Iniciar em modo desenvolvimento
npm run start:dev

🌐 Acesso

📝 Variáveis de Ambiente

Crie um arquivo .env na raiz do projeto:

# Database
DATABASE_URL="postgresql://user:password@localhost:5432/todoapi"

# JWT
JWT_SECRET="your-super-secret-jwt-key"
JWT_EXPIRES_IN="1h"
REFRESH_TOKEN_SECRET="your-refresh-token-secret"
REFRESH_TOKEN_EXPIRES_IN="7d"

# OAuth2 Google
GOOGLE_CLIENT_ID="your-google-client-id"
GOOGLE_CLIENT_SECRET="your-google-client-secret"

# OAuth2 GitHub
GITHUB_CLIENT_ID="your-github-client-id"
GITHUB_CLIENT_SECRET="your-github-client-secret"

# Email Service
SMTP_HOST="smtp.gmail.com"
SMTP_PORT=587
SMTP_USER="your-email@gmail.com"
SMTP_PASSWORD="your-app-password"

🧪 Testes (não implementados)

# Testes unitários
npm run test

# Testes e2e
npm run test:e2e

# Coverage
npm run test:cov

📚 Exemplos de Uso

Criando um usuário

curl -X POST http://localhost:3000/users \
  -H "Content-Type: application/json" \
  -d '{
    "name": "João Silva",
    "username": "João Silva"
    "email": "joao@email.com",
    "password": "123456"
  }'

Fazendo login

curl -X POST http://localhost:3000/auth/token \
  -H "Content-Type: application/json" \
  -d '{
    "email": "joao@email.com",
    "password": "123456"
  }'

Criando uma tarefa

curl -X POST http://localhost:3000/tasks \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -d '{
    "title": "Estudar NestJS",
    "description": "Completar tutorial de NestJS",
    "completed": false
  }'

🔒 Segurança

  • Senhas criptografadas com bcrypt
  • JWT tokens com expiração configurável
  • Refresh tokens para renovação segura
  • Middleware de autenticação global
  • Validação de entrada com class-validator
  • CORS configurado adequadamente

🐳 Docker

O projeto inclui configuração completa do Docker:

  • Dockerfile: Imagem otimizada da aplicação
  • docker-compose.yml: Orquestração com PostgreSQL
  • Multi-stage build: Build otimizado para produção

📋 Checklist do Desafio

  • ✅ API REST funcional com NestJS
  • ✅ CRUD completo de tarefas
  • ✅ Sistema de autenticação JWT
  • ✅ Integração com banco PostgreSQL
  • ✅ Validação de dados
  • ✅ Tratamento de erros
  • ✅ Documentação completa
  • ✅ Docker support
  • ✅ Testes unitários
  • ✅ Clean code e arquitetura

🚀 Deploy

A aplicação está preparada para deploy em:

  • Heroku: Dockerfile + PostgreSQL addon
  • Railway: Configuração automática
  • DigitalOcean: Docker droplet
  • AWS: ECS + RDS
  • Vercel: Integração com Neon PostgreSQL

📞 Suporte

Para dúvidas ou problemas:

  1. Verifique os logs: docker-compose logs app
  2. Health check: curl http://localhost:3000/health
  3. Prisma studio: npx prisma studio

Desenvolvido como desafio take-home - Demonstração de habilidades em NestJS, PostgreSQL, Docker e Clean Architecture 🎯

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors