{"id":29133054,"url":"https://github.com/guidev115/nest-api-article","last_synced_at":"2026-05-18T07:33:44.975Z","repository":{"id":300465034,"uuid":"1006250597","full_name":"GuiDev115/nest-api-article","owner":"GuiDev115","description":"Uma API REST feito com Nest, para meu portfolio e agregação a Disciplina Programação Web - UFLA","archived":false,"fork":false,"pushed_at":"2025-06-21T20:46:44.000Z","size":0,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-21T21:31:18.436Z","etag":null,"topics":["api-rest","backend","crud-api","nestjs"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GuiDev115.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-21T20:39:53.000Z","updated_at":"2025-06-21T20:49:50.000Z","dependencies_parsed_at":"2025-06-21T21:42:29.296Z","dependency_job_id":null,"html_url":"https://github.com/GuiDev115/nest-api-article","commit_stats":null,"previous_names":["guidev115/nest-api-article"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/GuiDev115/nest-api-article","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GuiDev115%2Fnest-api-article","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GuiDev115%2Fnest-api-article/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GuiDev115%2Fnest-api-article/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GuiDev115%2Fnest-api-article/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GuiDev115","download_url":"https://codeload.github.com/GuiDev115/nest-api-article/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GuiDev115%2Fnest-api-article/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262727708,"owners_count":23354665,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-rest","backend","crud-api","nestjs"],"created_at":"2025-06-30T07:01:55.572Z","updated_at":"2026-05-18T07:33:44.935Z","avatar_url":"https://github.com/GuiDev115.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"http://nestjs.com/\" target=\"blank\"\u003e\u003cimg src=\"https://nestjs.com/img/logo-small.svg\" width=\"120\" alt=\"Nest Logo\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n# 📝 NestJS Blog API\n\nUma API RESTful para blog construída com NestJS, TypeScript, MySQL e JWT Authentication.\n\n## 🚀 Características\n\n- **Autenticação JWT** - Sistema completo de login/registro\n- **Autenticação Dupla** - Suporte a token via header e query parameter\n- **CRUD Completo** - Gerenciamento de usuários e artigos\n- **Validação** - Validação de dados com class-validator\n- **Banco de Dados** - MySQL com TypeORM\n- **Relacionamentos** - Users → Articles (One-to-Many)\n- **Segurança** - Hash de senhas com bcrypt\n\n## 🛠️ Tecnologias\n\n- **Backend**: NestJS, TypeScript\n- **Banco de Dados**: MySQL\n- **ORM**: TypeORM\n- **Autenticação**: JWT, Passport\n- **Validação**: class-validator\n- **Criptografia**: bcryptjs\n\n## 📋 Pré-requisitos\n\n- Node.js (v16 ou superior)\n- MySQL\n- Yarn ou npm\n\n## ⚙️ Instalação\n\n```bash\n# Clonar o repositório\ngit clone \u003curl-do-repositorio\u003e\ncd nest-blog\n\n# Instalar dependências\nyarn install\n# ou\nnpm install\n\n# Configurar variáveis de ambiente\ncp .env.example .env\n```\n\n## 🔧 Configuração\n\nConfigure o arquivo `.env`:\n\n```env\n# Database\nDB_HOST=localhost\nDB_PORT=3306\nDB_USERNAME=root\nDB_PASSWORD=sua_senha\nDB_DATABASE=blog_db\n\n# JWT\nJWT_SECRET=seu_jwt_secret_super_seguro_aqui\n```\n\n### Gerar JWT Secret\n\n```bash\n# Usando Node.js\nnode -e \"console.log(require('crypto').randomBytes(64).toString('hex'))\"\n\n# Usando OpenSSL\nopenssl rand -hex 64\n```\n\n## 🗄️ Banco de Dados\n\n```sql\n-- Criar banco de dados\nCREATE DATABASE blog_db;\n```\n\n## 🚀 Executar Aplicação\n\n```bash\n# Desenvolvimento\nyarn start:dev\n\n# Produção\nyarn start:prod\n\n# Watch mode\nyarn start\n```\n\nA API estará rodando em `http://localhost:3000`\n\n## 📡 Endpoints da API\n\n### 🔐 Autenticação\n\n| Método | Endpoint | Descrição |\n|--------|----------|-----------|\n| POST | `/auth/register` | Registrar novo usuário |\n| POST | `/auth/login` | Login de usuário |\n\n### 👥 Usuários\n\n| Método | Endpoint | Descrição |\n|--------|----------|-----------|\n| POST | `/users/register` | Registrar usuário |\n\n### 📰 Artigos\n\n#### Método Tradicional (Authorization Header)\n\n| Método | Endpoint | Descrição | Auth |\n|--------|----------|-----------|------|\n| GET | `/articles` | Listar todos os artigos | ❌ |\n| GET | `/articles/:id` | Buscar artigo por ID | ❌ |\n| POST | `/articles` | Criar novo artigo | ✅ |\n| PATCH | `/articles/:id` | Atualizar artigo | ✅ |\n| DELETE | `/articles/:id` | Deletar artigo | ✅ |\n| GET | `/articles/my/articles` | Meus artigos | ✅ |\n\n#### Método com Token na URL\n\n| Método | Endpoint | Descrição |\n|--------|----------|-----------|\n| POST | `/articles/create-with-token?token=JWT_TOKEN` | Criar artigo |\n| PATCH | `/articles/update-with-token/:id?token=JWT_TOKEN` | Atualizar artigo |\n| DELETE | `/articles/delete-with-token/:id?token=JWT_TOKEN` | Deletar artigo |\n| GET | `/articles/my-articles-with-token?token=JWT_TOKEN` | Meus artigos |\n\n## 📝 Exemplos de Uso\n\n### Registrar Usuário\n\n```bash\ncurl -X POST http://localhost:3000/auth/register \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"name\": \"João Silva\",\n    \"email\": \"joao@email.com\",\n    \"password\": \"123456\"\n  }'\n```\n\n### Login\n\n```bash\ncurl -X POST http://localhost:3000/auth/login \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"email\": \"joao@email.com\",\n    \"password\": \"123456\"\n  }'\n```\n\n### Criar Artigo (Header Authorization)\n\n```bash\ncurl -X POST http://localhost:3000/articles \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer SEU_JWT_TOKEN\" \\\n  -d '{\n    \"title\": \"Meu Primeiro Artigo\",\n    \"content\": \"Conteúdo do artigo...\",\n    \"summary\": \"Resumo do artigo\",\n    \"published\": true\n  }'\n```\n\n### Criar Artigo (Token na URL)\n\n```bash\ncurl -X POST \"http://localhost:3000/articles/create-with-token?token=SEU_JWT_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"title\": \"Artigo via URL Token\",\n    \"content\": \"Conteúdo do artigo...\",\n    \"published\": true\n  }'\n```\n\n## 📊 Estrutura do Banco\n\n### Tabela Users\n```sql\n- id (PK)\n- name\n- email (unique)\n- password (hashed)\n- createdAt\n- updatedAt\n```\n\n### Tabela Articles\n```sql\n- id (PK)\n- title\n- content\n- summary\n- published\n- authorId (FK → users.id)\n- createdAt\n- updatedAt\n```\n\n## 📁 Estrutura do Projeto\n\n```\nsrc/\n├── auth/                 # Módulo de autenticação\n│   ├── guards/          # Guards de autenticação\n│   ├── strategies/      # Estratégias JWT\n│   └── dto/            # DTOs de auth\n├── users/               # Módulo de usuários\n│   ├── entities/       # Entidade User\n│   └── dto/           # DTOs de usuário\n├── articles/           # Módulo de artigos\n│   ├── entities/      # Entidade Article\n│   └── dto/          # DTOs de artigo\n└── config/           # Configurações\n```\n\n## 🔒 Segurança\n\n- Senhas são criptografadas com bcrypt\n- Tokens JWT com expiração de 24h\n- Validação de dados de entrada\n- Verificação de autorização para operações\n\n## 🤝 Contribuindo\n\n1. Fork o projeto\n2. Crie uma branch para sua feature (`git checkout -b feature/AmazingFeature`)\n3. Commit suas mudanças (`git commit -m 'Add some AmazingFeature'`)\n4. Push para a branch (`git push origin feature/AmazingFeature`)\n5. Abra um Pull Request\n\n## 📄 Licença\n\nEste projeto está sob a licença MIT. Veja o arquivo para mais detalhes.\n\n⭐ **Se este projeto te ajudou, considere dar uma estrela!** ⭐","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguidev115%2Fnest-api-article","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fguidev115%2Fnest-api-article","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguidev115%2Fnest-api-article/lists"}