Skip to content

Pedro-jds/poke-backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Desafio SomoS

Linguagem: Javascript/NODEJS

Framework: Express

Descrição

REST API feita em NodeJS/express que permite visualizar/cadastrar/alterar/deletar e comparar dados de pokemons

Pré-requisitos

Antes de iniciar, se assegure que possui os requisitos abaixo:

Bibliotecas utilizadas:

  • Nodemon - recarregamento automático durante desenvolvimento.
  • Swagger-UI - Visualizar, consumir e documentar APIREST
  • Celebrate - Para fazer validação de dados
  • Knex - SQL query builder

Configurar MySQL

Crie uma instância de MySQL em sua máquina.

Caso utilize o Docker, execute o seguinte comando no terminal para criar um container:

docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=docker -d mysql:5.7
Usuário: root
Password: docker
Host: localhost
Port: 3306

Essa configuração sugerida é utilizada no arquivo knexfile.js.

Criar Database

Crie uma database de desenvolvimento com o nome:

pokebackend

CREATE DATABASE pokebackend;

Você pode fazer isso através de uma GUI como o DBeaver, Mysqlworkbench ou através do terminal.

USE pokebackend;

# Verifique se a database certa foi selecionada
SELECT DATABASE();

Instalação/Execução

Para instalar/executar este projeto, siga as seguintes etapas:

Clone este repositório

$ git clone https://github.com/Pedro-jds/poke-backend

Acesse a pasta do projeto no terminal/cmd

$ cd poke-backend

Instale as dependências

$ npm install

Execute as Migrations para criação das tabelas necessárias no banco de dados

$npx knex migrate:latest

Execute a aplicação em modo de desenvolvimento

$ npm start

O servidor inciará na porta:3333 - acesse http://localhost:3333/doc

Clicando no link acima abrirá uma pagina web do seu navagador onde conseguirá visualizar todas as rotas disponiveis, com todos paramêtros que a aplicação suporta com uma breve descrição.

Resumo das rotas

1 - Cadastro de cartas

Requisição

Método: POST

Endpoint: /pokemons

Body: A entrada deverá ser um Json, com o nome da carta e seus atributos como o exemplo abaixo

{
  "name": "bulbasaur",
  "attributes": {
    "hp": 45,
    "attack": 49,
    "defense": 49,
    "special-attack": 65,
    "special-defense": 65,
    "speed": 45
  }
}
Resposta
{
  "message": "pokemon cadastrado",
  "status": 201,
  "id": [
    40
  ]
}

Status Code: 201

2 - Listagem de cartas

Requisição

Método: GET

Endpoint: /pokemons

Body: vazio

Resposta

Retona uma listagem de até 10 pokemons com paginação

Query page: Paginação de pokemons retorna até no maximo 10 (Opcional), exemplo /pokemons?page=2

Query filter:Filtros de pokemons pelo nome (Opcional), exemplo /pokemons?filter=pi

[
    {
        "name": "pikachu",
        "attributes": {
            "hp": 60,
            "attack": 19,
            "defense": 120,
            "special_attack": 170,
            "special_defense": 190,
            "speed": 60
        }
    },
    {
        "name": "pichu",
        "attributes": {
            "hp": 60,
            "attack": 19,
            "defense": 120,
            "special_attack": 170,
            "special_defense": 180,
            "speed": 60
        }
    },
    {
        "paginations": {
            "total": 2,
            "lastPage": 1,
            "perPage": 10,
            "currentPage": 1,
            "from": 0,
            "to": 10
        }
    }
]

Status Code: 200

3 - Consulta de cartas

Requisição

Método: get

Endpoint: /pokemons/:id

Body: vazio

Resposta

Devolve uma carta de acordo com o id.

Status Code: 200

Exemplo: /pokemons/1

Body:

{
  "id": 1,
  "name": "bulbasaur",
  "attributes": {
    "hp": 45,
    "attack": 49,
    "defense": 49,
    "special-attack": 65,
    "special-defense": 65,
    "speed": 45
  }
}

4 - Alterar Pokemon

Esta operação permite alterar os dados de um pokemon

Requisição

Método: PUT

Endpoint: /pokemons/:id

Body: A entrada deverá ser um Json, com o nome da carta e seus atributos como o exemplo abaixo e um id no endpoint

{
  "name": "charmander",
  "attributes": {
    "hp": 40,
    "attack": 49,
    "defense": 49,
    "special-attack": 65,
    "special-defense": 65,
    "speed": 45
  }
}
Resposta
{
   "message": "pokemon atualizado",
   "status": 200,
}

Status Code: 200

5 - Deletar pokemon

Esta operação deleta um pokemon do banco de dados

Requisição

Método: DELETE

Endpoint: /pokemons/:id

Body: vazio

Resposta

Status Code: 200

Body: retorno:

{
   "message": "pokemon deletado",
   "status": 200,
}

6 - Comparação de cartas

Requisição

Método: POST

Endpoint: /comparar

Body: A entrada deverá ser como Json abaixo, com as chaves "playerOneCard" e "playerTwoCard", os valores ficam a escolha dos jogadores.

{
  "playerOneCard": 7,
  "playerTwoCard": 3
}
Resposta

Body: O retorno é o resultado da comparação e os detalhes sobre o vencedor em cada um dos atributos:

{
  "winner": 1,
  "loser": 2,
  "details": {
    "hp": 1,
    "attack": 2,
    "defense": 1,
    "special-attack": 1,
    "special-defense": 1,
    "speed": 2
  }
}

Status Code: caso seja uma comparação bem sucedida gera um registro de vitória, no banco de dados para o jogador vitorioso, retorna o status code 201.

Caso seja empate não registra nada no banco de dados e retorna:

{
  error: "Ocorreu um empate",
  statusCode: 400,
}

Status Code:400

7 - Resultado acumulado

Esta operação fornece um resultado acumulado de todas as comparações feitas dentro da aplicação, informando o somatório de vitórias dos dois jogadores.

Requisição

Método: GET

Endpoint: /vitorias

Body: vazio

Resposta

Status Code: 200

Body: retorno:

{
  "playerOne": 12,
  "playerTwo": 21
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published