https://github.com/244walyson/todo-list
Science Score: 26.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (4.6%) to scientific vocabulary
Repository
Basic Info
- Host: GitHub
- Owner: 244Walyson
- Language: TypeScript
- Default Branch: main
- Size: 225 KB
Statistics
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
- Releases: 0
Metadata Files
readme.md
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)
```bash
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
http
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
http
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
http
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)
```bash
Clonar repositório
git clone
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
```bash
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
- API Base: http://localhost:3000
- Health Check: http://localhost:3000/health
- Documentação: Endpoints listados acima
📝 Variáveis de Ambiente
Crie um arquivo .env na raiz do projeto:
```env
Database
DATABASE_URL="postgresql://user:password@localhost:5432/todoapi"
JWT
JWTSECRET="your-super-secret-jwt-key" JWTEXPIRESIN="1h" REFRESHTOKENSECRET="your-refresh-token-secret" REFRESHTOKENEXPIRESIN="7d"
OAuth2 Google
GOOGLECLIENTID="your-google-client-id" GOOGLECLIENTSECRET="your-google-client-secret"
OAuth2 GitHub
GITHUBCLIENTID="your-github-client-id" GITHUBCLIENTSECRET="your-github-client-secret"
Email Service
SMTPHOST="smtp.gmail.com" SMTPPORT=587 SMTPUSER="your-email@gmail.com" SMTPPASSWORD="your-app-password" ```
🧪 Testes (não implementados)
```bash
Testes unitários
npm run test
Testes e2e
npm run test:e2e
Coverage
npm run test:cov ```
📚 Exemplos de Uso
Criando um usuário
bash
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
bash
curl -X POST http://localhost:3000/auth/token \
-H "Content-Type: application/json" \
-d '{
"email": "joao@email.com",
"password": "123456"
}'
Criando uma tarefa
bash
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 🎯
Owner
- Login: 244Walyson
- Kind: user
- Repositories: 1
- Profile: https://github.com/244Walyson
GitHub Events
Total
- Push event: 1
- Create event: 2
Last Year
- Push event: 1
- Create event: 2
Dependencies
- actions/cache v3 composite
- actions/checkout v3 composite
- actions/download-artifact v4 composite
- actions/setup-java v3 composite
- actions/upload-artifact v4 composite
- actions/upload-artifact v3 composite
- docker/login-action v3 composite
- node 22-alpine build
- postgres latest
- nginx alpine build
- node 22-alpine build
- 915 dependencies
- @nestjs/cli ^10.0.0 development
- @nestjs/schematics ^10.0.0 development
- @nestjs/testing ^10.0.0 development
- @types/express ^5.0.0 development
- @types/jest ^29.5.2 development
- @types/multer ^1.4.12 development
- @types/node ^20.3.1 development
- @types/supertest ^6.0.0 development
- @typescript-eslint/eslint-plugin ^8.0.0 development
- @typescript-eslint/parser ^8.0.0 development
- eslint ^8.0.0 development
- eslint-config-prettier ^9.0.0 development
- eslint-plugin-prettier ^5.0.0 development
- jest ^29.5.0 development
- prettier ^3.0.0 development
- prisma ^5.22.0 development
- source-map-support ^0.5.21 development
- supertest ^7.0.0 development
- ts-jest ^29.2.5 development
- ts-loader ^9.4.3 development
- ts-node ^10.9.1 development
- tsconfig-paths ^4.2.0 development
- typescript ^5.1.3 development
- @aws-sdk/client-s3 ^3.693.0
- @nestjs/common ^10.0.0
- @nestjs/config ^3.3.0
- @nestjs/core ^10.0.0
- @nestjs/jwt ^10.2.0
- @nestjs/mapped-types *
- @nestjs/passport ^10.0.3
- @nestjs/platform-express ^10.0.0
- @nestjs/swagger ^8.0.5
- @prisma/client ^5.22.0
- @testcontainers/postgresql ^10.14.0
- axios ^1.7.7
- bcryptjs ^2.4.3
- class-validator ^0.14.2
- jwk-to-pem ^2.0.6
- multer ^1.4.5-lts.1
- multer-s3 ^3.0.1
- nodemailer ^6.9.16
- passport ^0.7.0
- passport-github ^1.1.0
- passport-google-oauth20 ^2.0.0
- reflect-metadata ^0.2.0
- rxjs ^7.8.1
- 352 dependencies
- @types/react ^18.2.15 development
- @types/react-dom ^18.2.7 development
- @vitejs/plugin-react-swc ^3.3.2 development
- autoprefixer ^10.4.17 development
- framer-motion ^10.16.4 development
- postcss ^8.4.35 development
- tailwindcss ^3.3.3 development
- typescript ^5.3.3 development
- vite ^4.4.5 development
- vite-tsconfig-paths ^4.2.1 development
- vitest ^0.34.6 development
- @heroicons/react ^2.0.18
- @radix-ui/react-alert-dialog ^1.1.6
- @radix-ui/react-dialog ^1.1.6
- @radix-ui/react-label ^2.1.2
- @radix-ui/react-scroll-area ^1.2.3
- @radix-ui/react-select ^2.1.6
- @radix-ui/react-slot ^1.1.2
- @radix-ui/react-switch ^1.1.3
- @radix-ui/react-tabs ^1.1.3
- @radix-ui/react-tooltip ^1.1.8
- axios ^1.8.3
- class-variance-authority ^0.7.1
- clsx ^2.1.1
- jwt-decode ^4.0.0
- lucide-react ^0.482.0
- nanoid ^5.0.3
- next-themes ^0.4.6
- react ^18.2.0
- react-dom ^18.2.0
- react-router-dom ^6.16.0
- reactflow ^11.9.4
- sonner ^2.0.1
- tailwind-merge ^3.0.2
- tailwindcss-animate ^1.0.7