An open API service indexing awesome lists of open source software.

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

Awesome Lists containing this project

README

          

Overwatch Logo

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 como POST /players, POST /favorites e GET /players/:id/favorites para 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




  1. Clone o repositório:


    git clone https://github.com/seu-usuario/overwatch2-hero-picker.git
    
    cd overwatch2-hero-picker



  2. Instale as dependências:


    npm install



  3. Configure as variáveis de ambiente:


    Crie um arquivo .env na 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_URL pela URL real da API não oficial.




  4. Execute as migrations:


    Crie as tabelas no SQLite:


    npx sequelize-cli db:migrate



  5. 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"
}
]
}