https://github.com/244walyson/todo-list

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
Last synced: 10 months ago · JSON representation

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
Created 11 months ago · Last pushed 11 months ago
Metadata Files
Readme

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

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

GitHub Events

Total
  • Push event: 1
  • Create event: 2
Last Year
  • Push event: 1
  • Create event: 2

Dependencies

.github/workflows/deploy.yml actions
  • 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
backend/Dockerfile docker
  • node 22-alpine build
backend/docker-compose.yml docker
  • postgres latest
docker-compose.yml docker
frontend/Dockerfile docker
  • nginx alpine build
  • node 22-alpine build
backend/package-lock.json npm
  • 915 dependencies
backend/package.json npm
  • @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
frontend/package-lock.json npm
  • 352 dependencies
frontend/package.json npm
  • @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