/quaklog-api

[JAVA] A QuakLog é uma API para importação de arquivos de LOG do jogo Quake

Primary LanguageJavaMIT LicenseMIT

Issues Forks Stars Release Version Codacy Badge Coverage Status

QuakLog API CircleCI

A QuakLog é um serviço para importação de arquivos de log do jogo Quake.

Uma vez que o arquivo de log é importado ele é transformado em dados legíveis sobre as diversas partidas registradas pelo jogo, após a transformação ser realizada o documento referente a cada partida ganha uma chave e é registrada em um banco de dados NoSQL para que seja permitido posteriormente realizar consultas mais detalhadas.

Tecnologias utilizadas

Arquitetura

A arquitetura utilizada nesse projeto foi baseada na Clean Architecture porém mais flexível, apenas com duas camadas, deixando a core totalmente isolada e livre de dependência de frameworks.

Endpoints

A QuakLog disponibiliza os seguintes endpoints em sua API

1 - Importação do arquivo de log

Endpoint para realizar a importação do arquivo de LOG do jogo.

  • PATH: POST /game

  • Headers:

    • Content-Type: multipart/form-data
    • Log-File-Date: {logFileDate}
      • Exemplo do parametro logFileDate: 2019-12-07
  • Body:

    • from-data name="file" value: {bytes}
  • Exemplo - curl

curl -X POST "http://localhost:8080/game" -H "accept: */*" -H "Log-File-Date: 2019-01-01" -H "Content-Type: multipart/form-data" -F "file=@games.log;type=text/x-log"
  • Resultado esperado: (Code: 201)
    • Header de resposta:
      • Location: /game/date/{gameDate}
    • Body:
{
    "gamesIds": [
        "5d80e7a3-1e36-4692-8645-14768cd5b0cd",
        "493b3438-6c3b-4353-8807-7d044531cd9e"
    ],
    "notifications": [
        "1 - KEY not found to parse {  0:00 }",
        "3 - KEY not found to parse { 15:00 Exit: Timelimit hit.}"
    ]
}

2 - Consulta de jogos por data

Endpoint para realizar a consulta dos jogos de maneira simplificada do arquivo importado.

  • PATH: GET /game/date/{gameDate}

    • Exemplo do parametro date: 2019-12-07
  • Exemplo - curl

curl -X GET "http://localhost:8080/game/date/2019-01-01" -H "accept: */*"
  • Resultado esperado: (Code: 200)

Body Sample:

    {
        "games":[
           "2094f7e5-2f61-40b6-b5a2-a99c72b506c8": {
              "players": [
                {
                  "id": 2,
                  "name": "Dono da Bola",
                  "kills": 13
                },
                {
                  "id": 3,
                  "name": "Isgalamido",
                  "kills": 19
                }
              ],
              "total_kills": 105,
              "detail_path": "/game/2094f7e5-2f61-40b6-b5a2-a99c72b506c8"
        },
            // [n...]
        ]
        "quantity":10
    }

(Visualize um exemplo aqui)

3 - Consulta de detalhes do jogo

Endpoint para consultar um jogo específico de maneira detalhada.

  • PATH: GET /game/{UUID}

  • Exemplo - curl

curl -X GET "http://localhost:8080/game/7fd1a01f-4afb-49a5-b8f5-f7f790c247e4" -H "accept: */*"

Executando com Docker

Os seguintes passos foram documentados para serem executados em uma plataforma Linux, porém os comandos com o sistema Windows podem ser semelhantes, mas, o funcionamento não é totalmente garantido.

$git clone https://github.com/gbzarelli/quaklog-api.git
  • Acesse a pasta do projeto para iniciarmos a compilação:
$cd ./quaklog-api
  • As instruções a seguir executará atravéz do Gradle Build Tools o clean e o build do projeto. O build executará os testes unitários para garantir a integridade do projeto e irá gerar o executável (.jar) do mesmo.
$./gradlew clean build
  • Agora será realizado o build do Dockerfile gerando uma imagem no repositório local denominada de helpdev/quaklog-api.
$docker build -t helpdev/quaklog-api .
  • Após ter gerado a imagem da API iremos executar o projeto utilizando o docker-compose. O compose irá preparar todo ambiente necessário para sua aplicação executar.
$docker-compose up
  • Pronto, sua API está pronta e em execução na porta 8080

Documentação dinâmica com o Swagger

A Swagger UI fornece uma estrutura de exibição que é capaz de interpretar os endpoints do projeto e gera um site de documentação interativa

Desenvolvedor

Guilherme Biff Zarelli