Skip to content

rafaelcitario/JWT-ToDo-List

Repository files navigation

🛡️ JWT ToDo List API

Dependências

Este projeto utiliza o PostgreSQL rodando em um container Docker. Certifique-se de ter o Docker e o Docker Compose instalados.

Para subir o banco de dados, execute o seguinte comando na raiz do projeto:

docker compose up -d

Uma API RESTful para gerenciamento de tarefas (posts) com autenticação via JWT, construída com Node.js, TypeScript, Prisma e boas práticas de Clean Code.

📑 Índice


📚 Sobre o Projeto

Este projeto é uma API simples de To-Do List que implementa autenticação via JWT. O principal objetivo é demonstrar o uso de boas práticas como Clean Architecture, separação de responsabilidades, uso de DTOs, serviços, repositórios, middlewares e validações com Prisma e Express.


🧰 Tecnologias Utilizadas

  • Node.js
  • TypeScript
  • Express.js
  • Prisma ORM
  • PostgreSQL
  • JWT (jsonwebtoken)
  • Nodemon
  • ESLint + Prettier
  • dotenv
  • ts-node

📁 Estrutura de Pastas

src/
├── DTO/                  # Objetos de transferência de dados (camada de entrada)
├── env/                  # Configurações de variáveis de ambiente
├── errors/               # Tipos de erro personalizados
├── generated/            # Prisma Client gerado
├── http/
│   ├── controllers/      # Lógica dos controladores (Posts, Users)
│   ├── login/            # Endpoint de login
│   ├── middlewares/      # Middleware de autenticação JWT
│   └── routes/           # Rotas da API
├── interfaces/           # Tipagens para payloads
├── repositories/         # Repositórios (acesso ao banco de dados)
├── services/             # Regras de negócio (use-cases)
├── validators/           # Validações com Prisma
└── server.ts             # Ponto de entrada da aplicação

🚀 Executando Localmente

  1. Clone o repositório
git clone https://github.com/rafaelcitario/JWT-ToDo-List
cd JWT-ToDo-List/server
  1. Instale as dependências
npm install
  1. Configure o arquivo .env

Crie um arquivo .env na raiz com o seguinte conteúdo:

DATABASE_URL="postgresql://postgres:example@localhost:5432/mydb?schema=public"
JWT_SECRET_KEY="sua_chave_secreta"
  1. Execute as migrações e gere o Prisma Client
npm run prisma:migrate
npm run prisma:generate
  1. Inicie o servidor em modo desenvolvimento
npm run server:watch

A API estará disponível em: http://localhost:3333


🧪 Scripts Disponíveis

Comando Descrição
npm start Inicia o servidor (server.ts)
npm run server:watch Inicia com nodemon
npm run lint Roda o ESLint
npm run lint:fix Corrige automaticamente os erros
npm run prisma:generate Gera o Prisma Client
npm run prisma:migrate Executa as migrações

📦 Variáveis de Ambiente

  • DATABASE_URL → URL de conexão com banco PostgreSQL
  • JWT_SECRET_KEY → Chave secreta para assinar/verificar tokens JWT

🔐 Autenticação JWT

A autenticação é feita via token JWT no header Authorization.
Formato:

Authorization: Bearer <token>

Rotas protegidas:

  • GET /pub
  • POST /pub/create

🧭 Endpoints da API

🔐 POST /login

Autentica o usuário e retorna um JWT.

Payload:

{
  "username": "email@exemplo.com",
  "password": "senha123"
}

🧍 POST /register

Cria um novo usuário.

Payload:

{
  "name": "Rafael Citario",
  "username": "contato.rafaelgomes@outlook.com",
  "password": "minhaSenhaSegura123"
}

📃 GET /pub

Retorna todos os posts (requer token JWT).


✍️ POST /pub/create

Cria um novo post (requer token JWT).

Payload:

{
  "content": "Hoje aprendi sobre autenticação com JWT!"
}

🧠 Boas Práticas Aplicadas

  • ✅ Separação por camadas (DTO, controller, service, repository)
  • ✅ Tipagem com interfaces e TypeScript
  • ✅ Middleware de autenticação
  • ✅ Uso de Prisma ORM com PostgreSQL
  • ✅ Arquitetura limpa e modular
  • ✅ Documentação OpenAPI integrada

🛠️ TODO / Melhorias Futuras

  • Implementar testes automatizados com Jest
  • Adicionar paginação nos posts
  • Criar painel front-end com React ou Svelte
  • Adicionar logs com Winston/Pino
  • Deploy em servidor ou vercel/railway

📫 Contato

Rafael Citario
📧 contato.rafaelgomes@outlook.com
🔗 LinkedIn
💻 GitHub


“Simples, direto, seguro — como uma boa API deve ser.”

About

A pernonal exercise to create a To Do List using auth JWT methods and training some clean codes

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published