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.
Java/OpenJDK 11
- Java Development Kit 11Spring boot
- Framework base para a APIMongoDB
- Base de dados não relacionalSwagger
- Documentação de API de forma dinâmicaCaffeine
- Biblioteca de cacheDocker
- Executa e gerencia aplicações dentro de invólucros chamados containersjUnit5 e Mockito
- Execução de testes
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.
A QuakLog
disponibiliza os seguintes endpoints
em sua API
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
- Exemplo do parametro
- Content-Type:
-
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:
- Header de resposta:
{
"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.}"
]
}
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 do parametro
-
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
}
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: */*"
- Resultado esperado: (Code:
200
)
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.
-
Certifique-se que você tenha as seguintes ferramentas instaladas:
-
Efetue o clone do projeto pelo
Git
:
$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
oclean
e obuild
do projeto. Obuild
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
doDockerfile
gerando uma imagem no repositório local denominada dehelpdev/quaklog-api
.
$docker build -t helpdev/quaklog-api .
- Após ter gerado a imagem da API iremos executar o projeto utilizando o
docker-compose
. Ocompose
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
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
Guilherme Biff Zarelli
- Blog/Site - https://helpdev.com.br
- LinkedIn - https://linkedin.com/in/gbzarelli/
- GitHub - https://github.com/gbzarelli
- Email - gbzarelli@helpdev.com.br