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.
- 📚 Sobre o Projeto
- 🧰 Tecnologias Utilizadas
- 📁 Estrutura de Pastas
- 🚀 Executando Localmente
- 🧪 Scripts Disponíveis
- 📦 Variáveis de Ambiente
- 🔐 Autenticação JWT
- 🧭 Endpoints da API
- 🧠 Boas Práticas Aplicadas
- 🛠️ TODO / Melhorias Futuras
- 📫 Contato
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.
- Node.js
- TypeScript
- Express.js
- Prisma ORM
- PostgreSQL
- JWT (jsonwebtoken)
- Nodemon
- ESLint + Prettier
- dotenv
- ts-node
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
- Clone o repositório
git clone https://github.com/rafaelcitario/JWT-ToDo-List
cd JWT-ToDo-List/server
- Instale as dependências
npm install
- 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"
- Execute as migrações e gere o Prisma Client
npm run prisma:migrate
npm run prisma:generate
- Inicie o servidor em modo desenvolvimento
npm run server:watch
A API estará disponível em:
http://localhost:3333
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 |
DATABASE_URL
→ URL de conexão com banco PostgreSQLJWT_SECRET_KEY
→ Chave secreta para assinar/verificar tokens JWT
A autenticação é feita via token JWT no header Authorization
.
Formato:
Authorization: Bearer <token>
Rotas protegidas:
GET /pub
POST /pub/create
Autentica o usuário e retorna um JWT.
Payload:
{
"username": "email@exemplo.com",
"password": "senha123"
}
Cria um novo usuário.
Payload:
{
"name": "Rafael Citario",
"username": "contato.rafaelgomes@outlook.com",
"password": "minhaSenhaSegura123"
}
Retorna todos os posts (requer token JWT).
Cria um novo post (requer token JWT).
Payload:
{
"content": "Hoje aprendi sobre autenticação com JWT!"
}
- ✅ 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
- 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
Rafael Citario
📧 contato.rafaelgomes@outlook.com
🔗 LinkedIn
💻 GitHub
“Simples, direto, seguro — como uma boa API deve ser.”