https://github.com/renanjava/overwatch2-hero-picker
Projeto Pessoal - Favoritar heróis do Overwatch 2
https://github.com/renanjava/overwatch2-hero-picker
Last synced: 8 months ago
JSON representation
Projeto Pessoal - Favoritar heróis do Overwatch 2
- Host: GitHub
- URL: https://github.com/renanjava/overwatch2-hero-picker
- Owner: renanjava
- Created: 2025-04-14T17:48:52.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-04-14T23:10:08.000Z (about 1 year ago)
- Last Synced: 2025-04-15T02:49:26.349Z (about 1 year ago)
- Language: JavaScript
- Homepage:
- Size: 18.6 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Overwatch2 Hero Picker
Overwatch2 Hero Picker é uma API RESTful projetada para fãs de Overwatch 2, permitindo que jogadores criem perfis e marquem seus heróis favoritos. A aplicação consome uma API não oficial do Overwatch para obter dados atualizados de heróis (como nome, função, etc.) e os armazena automaticamente em um banco SQLite ao iniciar. Jogadores podem registrar perfis e associar heróis favoritos, com validação robusta de dados via Yup e gerenciamento de banco via Sequelize, garantindo uma experiência confiável e personalizada.
Funcionalidades
-
Integração com API do Overwatch: Consome uma API não oficial para buscar informações de heróis, como Tracer, Reinhardt ou Mercy. -
Gerenciamento de Jogadores: Criação e consulta de perfis de jogadores com informações básicas (ex.: ID, nome). -
Favoritagem de Heróis: Jogadores podem adicionar heróis à sua lista de favoritos, associando-os ao seu perfil. -
Validação de Dados: Usa Yup para validar DTOs (Data Transfer Objects) em requisições, garantindo que entradas como IDs sejam válidas (ex.: números inteiros positivos). -
Persistência com SQLite: Armazena jogadores, heróis e favoritos em um banco relacional, gerenciado pelo Sequelize. -
API RESTful: Oferece endpoints comoPOST /players,POST /favoriteseGET /players/:id/favoritespara interagir com o sistema. -
Paginamento, Filtro e Ordenação: Implementação de funcionalidades para paginar, filtrar e ordenar heróis e favoritos.
Tecnologias Utilizadas
-
Node.js/Express: Framework para criar a API RESTful, gerenciando rotas e requisições. -
JavaScript: Linguagem principal, usada em todo o projeto para compatibilidade. -
Sequelize: ORM para gerenciar o banco SQLite, incluindo migrations e sincronização de dados. -
SQLite: Banco de dados leve para armazenar jogadores, heróis e favoritos. -
Yup: Biblioteca de validação para garantir a integridade dos DTOs. -
Axios: Cliente HTTP para consumir a API não oficial do Overwatch. -
dotenv: Gerenciamento de variáveis de ambiente (ex.: URL da API externa).
Pré-requisitos
Antes de começar, certifique-se de ter instalado:
-
Node.js (v16 ou superior) -
npm (incluído com Node.js) -
SQLite (opcional, Sequelize gerencia o arquivo do banco)
Instalação
-
Clone o repositório:
git clone https://github.com/seu-usuario/overwatch2-hero-picker.git
cd overwatch2-hero-picker
-
Instale as dependências:
npm install
-
Configure as variáveis de ambiente:
Crie um arquivo
.envna raiz com base no.env.example:
PORT=3000
API_OVERWATCH_URL=https://api-externa-overwatch.com/heroes
DATABASE_URL=sqlite:./database.sqlite
Substitua
API_OVERWATCH_URLpela URL real da API não oficial.
-
Execute as migrations:
Crie as tabelas no SQLite:
npx sequelize-cli db:migrate
-
Inicie o servidor:
npm run dev
A API estará disponível em
http://localhost:3000. Na inicialização, o sistema consumirá a API do Overwatch, sincronizará os heróis no banco e estará pronto para uso.
Endpoints Principais
Método
Endpoint
Descrição
Exemplo de Body
POST
/players
Cria um novo jogador
{ "name": "Player1" }
GET
/players/:id
Retorna os dados de um jogador
-
POST
/favorites
Adiciona um herói favorito
{ "userId": 1, "heroId": 1 }
GET
/players/:id/favorites
Lista os heróis favoritos de um jogador
-
GET
/heroes
Lista heróis com paginação, filtro e ordenação
{ "page": 1, "pageSize": 10, "filter": "tank", "sortBy": "name", "sortOrder": "asc" }
Parâmetros de Paginação, Filtro e Ordenação
-
page: Página atual (opcional, padrão: 1). -
pageSize: Número de itens por página (opcional, padrão: 10). -
filter: Filtro para a função do herói (opcional, valores:tank,dps,support). -
sortBy: Campo para ordenação (opcional, valores:name,role). -
sortOrder: Direção da ordenação (opcional, valores:asc,desc, padrão:asc).
Exemplo de Requisição com Filtro, Paginação e Ordenação
curl -X GET "http://localhost:3000/heroes?page=1&pageSize=10&filter=tank&sortBy=name&sortOrder=asc"
Resposta:
{
"page": 1,
"pageSize": 10,
"total": 50,
"heroes": [
{
"id": 1,
"name": "Reinhardt",
"role": "tank"
},
{
"id": 2,
"name": "Winston",
"role": "tank"
}
]
}