Thanks to visit codestin.com
Credit goes to github.com

Skip to content

GabrielFinotti/ps2-blog-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎮 PS2Blog Backend API

Version License Node.js TypeScript MongoDB Express

API RESTful moderna para gerenciamento de catálogo de jogos PlayStation 2

🚀 Início Rápido📖 Documentação🛠️ Tecnologias🤝 Contribuição


📋 Sobre o Projeto

PS2Blog Backend é uma API RESTful robusta desenvolvida em TypeScript que serve como backend para uma plataforma de catálogo e comunidade dedicada aos jogos clássicos do PlayStation 2.

✨ Principais Funcionalidades

  • 🔐 Autenticação JWT com middleware de segurança
  • 👥 Gerenciamento de usuários com perfis personalizáveis
  • 🎮 Catálogo completo com mais de 2000+ jogos PS2
  • 💬 Sistema social com comentários e likes
  • 🔍 Busca avançada por nome, categoria e ano
  • Cache inteligente para performance otimizada
  • 🤖 Automação com jobs cron para atualizações
  • 🌐 Integração com API MobyGames

🛠️ Stack Tecnológica

Core

Node.js + TypeScript + Express + MongoDB

Principais Dependências

Tecnologia Versão Propósito
Express 4.19.2 Framework web
MongoDB 8.4.1 Banco de dados NoSQL
Mongoose 8.4.1 ODM para MongoDB
JWT 9.0.2 Autenticação segura
bcrypt 5.1.1 Criptografia de senhas
node-cron 3.0.3 Agendamento de tarefas
axios 1.7.2 Cliente HTTP

Ferramentas de Desenvolvimento

  • tsx - Executor TypeScript com hot-reload
  • tsup - Bundler otimizado
  • vitest - Framework de testes moderno

🚀 Início Rápido

Pré-requisitos

  • Node.js 18+
  • MongoDB (local ou Atlas)
  • API Key MobyGames (Obter aqui)

⚡ Instalação Rápida

# Clone o repositório
git clone https://github.com/GabrielHFinotti/PS2Blog-Backend.git
cd PS2Blog-Backend

# Instale as dependências
npm install

# Configure o ambiente
cp .env.example src/env/.env
# Edite src/env/.env com suas configurações

# Crie pastas necessárias
mkdir -p src/cache/gameList

# Execute em desenvolvimento
npm run dev

🔧 Configuração do Ambiente

Crie o arquivo src/env/.env:

# Aplicação
PORT=5000
CLIENT_URL=http://localhost:3000

# Banco de Dados
DB_NAME=ps2blog
DB_URL=mongodb://localhost:27017

# Segurança
SECRET_KEY=sua_chave_jwt_super_secreta

# APIs Externas
MOBY_API_KEY=sua_chave_api_mobygames

📦 Scripts Disponíveis

npm run dev     # Desenvolvimento com hot-reload
npm run build   # Build para produção
npm start       # Executa versão de produção
npm test        # Executa testes

📖 Documentação da API

🔐 Autenticação

Todas as rotas protegidas requerem o header:

Authorization: Bearer <jwt_token>

Endpoints de Autenticação

Método Endpoint Descrição Autenticação
POST /auth/register Registro de usuário
POST /auth/login Login
POST /auth/register

Request Body:

{
  "username": "string (6-16 chars)",
  "email": "string (valid email)",
  "password": "string (min 6 chars)"
}

Response (201):

{
  "message": "User registered successfully",
  "userId": "507f1f77bcf86cd799439011"
}
POST /auth/login

Request Body:

{
  "email": "[email protected]",
  "password": "userpassword"
}

Response (200):

{
  "message": "Save loaded successfully, good play!",
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

👤 Gerenciamento de Usuários

Método Endpoint Descrição Autenticação
GET /user/data Dados do usuário
PUT /user/data/update Atualizar perfil
DELETE /user/data/delete Deletar conta
GET /user/data

Response (200):

{
  "_id": "507f1f77bcf86cd799439011",
  "username": "gamer123",
  "email": "[email protected]",
  "bio": "Passionate PS2 gamer since 2000!",
  "image": "https://example.com/avatar.jpg",
  "likedGames": {
    "totalLikes": 42,
    "games": [
      { "gameId": "507f1f77bcf86cd799439012" }
    ]
  },
  "createdAt": "2024-01-15T10:30:00.000Z"
}

🎮 Catálogo de Jogos

Método Endpoint Descrição Query Params
GET /games Lista jogos name, category, release, limit, page
GET /games/rating Por rating limit, page
GET /games/likes Por likes limit, page
GET /games/categoriesAndYears Filtros disponíveis -
GET /games/data/:gameId Dados do jogo -
GET /games (Busca com Filtros)

Query Parameters:

  • name (string): Nome do jogo
  • category (string): Categoria do jogo
  • release (string): Ano de lançamento
  • limit (number): Limite por página (padrão: 20)
  • page (number): Página atual (padrão: 1)

Exemplo:

GET /games?name=Final&category=RPG&release=2004&limit=10&page=1

Response (200):

{
  "games": [
    {
      "_id": "507f1f77bcf86cd799439012",
      "name": "Final Fantasy XII",
      "release": "2004",
      "category": "RPG",
      "rating": 8.5,
      "image": "https://example.com/ffxii.jpg",
      "plataforms": [{"name": "PlayStation 2"}],
      "likes": {
        "totalLikes": 156,
        "users": []
      },
      "comments": []
    }
  ],
  "pagination": {
    "currentPage": 1,
    "totalPages": 5,
    "totalGames": 47,
    "hasNext": true,
    "hasPrev": false
  }
}

💫 Interações Sociais

Método Endpoint Descrição Autenticação
PUT /games/sendLike/:gameId Curtir jogo
PUT /games/sendComment/:gameId Comentar
DELETE /games/deleteLike/:gameId Remover like
DELETE /games/deleteComment/:gameId Remover comentário
PUT /games/sendComment/:gameId

Request Body:

{
  "comment": "Este jogo é incrível! Uma obra-prima do PS2."
}

Response (200):

{
  "message": "Comment added successfully",
  "commentId": "507f1f77bcf86cd799439013"
}

🏗️ Arquitetura do Projeto

src/
├── 📁 controllers/          # Lógica de negócio
│   ├── 📁 gameList/        # Controllers de jogos
│   └── 📁 user/            # Controllers de usuários
├── 📁 models/              # Schemas Mongoose
├── 📁 routers/             # Definição de rotas
├── 📁 middleware/          # Middlewares (auth, cors, etc)
├── 📁 interfaces/          # Tipos TypeScript
├── 📁 jobs/                # Automação e jobs
│   ├── 📁 apis/           # Integrações externas
│   └── 📁 cron/           # Tarefas agendadas
├── 📁 utils/               # Funções utilitárias
├── 📁 cache/               # Sistema de cache
└── 📄 server.ts           # Entry point

🤖 Automação e Jobs

📅 Tarefas Agendadas

Job Frequência Descrição
Game List Update Trimestral Atualiza catálogo via MobyGames API
Cache Generation Mensal Gera cache otimizado para consultas
// Configuração dos Cron Jobs
gameListUpdate: "0 0 1 */3 *"    // 1º dia de cada trimestre
createGameListCache: "0 0 5 * *"  // 5º dia de cada mês

About

PS2 Blog API

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •