Uma API RESTful para blog construída com NestJS, TypeScript, MySQL e JWT Authentication.
- Autenticação JWT - Sistema completo de login/registro
- Autenticação Dupla - Suporte a token via header e query parameter
- CRUD Completo - Gerenciamento de usuários e artigos
- Validação - Validação de dados com class-validator
- Banco de Dados - MySQL com TypeORM
- Relacionamentos - Users → Articles (One-to-Many)
- Segurança - Hash de senhas com bcrypt
- Backend: NestJS, TypeScript
- Banco de Dados: MySQL
- ORM: TypeORM
- Autenticação: JWT, Passport
- Validação: class-validator
- Criptografia: bcryptjs
- Node.js (v16 ou superior)
- MySQL
- Yarn ou npm
# Clonar o repositório
git clone <url-do-repositorio>
cd nest-blog
# Instalar dependências
yarn install
# ou
npm install
# Configurar variáveis de ambiente
cp .env.example .envConfigure o arquivo .env:
# Database
DB_HOST=localhost
DB_PORT=3306
DB_USERNAME=root
DB_PASSWORD=sua_senha
DB_DATABASE=blog_db
# JWT
JWT_SECRET=seu_jwt_secret_super_seguro_aqui# Usando Node.js
node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"
# Usando OpenSSL
openssl rand -hex 64-- Criar banco de dados
CREATE DATABASE blog_db;# Desenvolvimento
yarn start:dev
# Produção
yarn start:prod
# Watch mode
yarn startA API estará rodando em http://localhost:3000
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /auth/register |
Registrar novo usuário |
| POST | /auth/login |
Login de usuário |
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /users/register |
Registrar usuário |
| Método | Endpoint | Descrição | Auth |
|---|---|---|---|
| GET | /articles |
Listar todos os artigos | ❌ |
| GET | /articles/:id |
Buscar artigo por ID | ❌ |
| POST | /articles |
Criar novo artigo | ✅ |
| PATCH | /articles/:id |
Atualizar artigo | ✅ |
| DELETE | /articles/:id |
Deletar artigo | ✅ |
| GET | /articles/my/articles |
Meus artigos | ✅ |
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /articles/create-with-token?token=JWT_TOKEN |
Criar artigo |
| PATCH | /articles/update-with-token/:id?token=JWT_TOKEN |
Atualizar artigo |
| DELETE | /articles/delete-with-token/:id?token=JWT_TOKEN |
Deletar artigo |
| GET | /articles/my-articles-with-token?token=JWT_TOKEN |
Meus artigos |
curl -X POST http://localhost:3000/auth/register \
-H "Content-Type: application/json" \
-d '{
"name": "João Silva",
"email": "joao@email.com",
"password": "123456"
}'curl -X POST http://localhost:3000/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "joao@email.com",
"password": "123456"
}'curl -X POST http://localhost:3000/articles \
-H "Content-Type: application/json" \
-H "Authorization: Bearer SEU_JWT_TOKEN" \
-d '{
"title": "Meu Primeiro Artigo",
"content": "Conteúdo do artigo...",
"summary": "Resumo do artigo",
"published": true
}'curl -X POST "http://localhost:3000/articles/create-with-token?token=SEU_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Artigo via URL Token",
"content": "Conteúdo do artigo...",
"published": true
}'- id (PK)
- name
- email (unique)
- password (hashed)
- createdAt
- updatedAt- id (PK)
- title
- content
- summary
- published
- authorId (FK → users.id)
- createdAt
- updatedAtsrc/
├── auth/ # Módulo de autenticação
│ ├── guards/ # Guards de autenticação
│ ├── strategies/ # Estratégias JWT
│ └── dto/ # DTOs de auth
├── users/ # Módulo de usuários
│ ├── entities/ # Entidade User
│ └── dto/ # DTOs de usuário
├── articles/ # Módulo de artigos
│ ├── entities/ # Entidade Article
│ └── dto/ # DTOs de artigo
└── config/ # Configurações
- Senhas são criptografadas com bcrypt
- Tokens JWT com expiração de 24h
- Validação de dados de entrada
- Verificação de autorização para operações
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo para mais detalhes.
⭐ Se este projeto te ajudou, considere dar uma estrela! ⭐