Skip to content

Repository files navigation

🎮 PS2Blog Backend API

VersionLicenseNode.jsTypeScriptMongoDBExpress

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

TecnologiaVersãoPropósito
Express4.19.2Framework web
MongoDB8.4.1Banco de dados NoSQL
Mongoose8.4.1ODM para MongoDB
JWT9.0.2Autenticação segura
bcrypt5.1.1Criptografia de senhas
node-cron3.0.3Agendamento de tarefas
axios1.7.2Cliente 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çãoPORT=5000CLIENT_URL=http://localhost:3000# Banco de DadosDB_NAME=ps2blogDB_URL=mongodb://localhost:27017# SegurançaSECRET_KEY=sua_chave_jwt_super_secreta# APIs ExternasMOBY_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étodoEndpointDescriçãoAutenticação
POST/auth/registerRegistro de usuário
POST/auth/loginLogin
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": "user@example.com",
"password": "userpassword"
}

Response (200):

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

👤 Gerenciamento de Usuários

MétodoEndpointDescriçãoAutenticação
GET/user/dataDados do usuário
PUT/user/data/updateAtualizar perfil
DELETE/user/data/deleteDeletar conta
GET /user/data

Response (200):

{
"_id": "507f1f77bcf86cd799439011",
"username": "gamer123",
"email": "gamer@example.com",
"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étodoEndpointDescriçãoQuery Params
GET/gamesLista jogosname, category, release, limit, page
GET/games/ratingPor ratinglimit, page
GET/games/likesPor likeslimit, page
GET/games/categoriesAndYearsFiltros disponíveis-
GET/games/data/:gameIdDados 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étodoEndpointDescriçãoAutenticação
PUT/games/sendLike/:gameIdCurtir jogo
PUT/games/sendComment/:gameIdComentar
DELETE/games/deleteLike/:gameIdRemover like
DELETE/games/deleteComment/:gameIdRemover 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

JobFrequênciaDescrição
Game List UpdateTrimestralAtualiza catálogo via MobyGames API
Cache GenerationMensalGera 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

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages