Projeto para processo seletivo na TalkRadio
- Clone this project to your machine;
- Copy .env.sample to ".env" and ".env.test" and fill with your own values;
- Run npm install;
- Run npm start for production or "npm run dev" for development;
- To run tests, npm test;
Every route has the following pattern:
localhost:[PORT_YOU_DEFINED_ON_DOTENV_FILE]/api/v1
game/:id: Find a game by ID and return it's data;
game/report: Get a ranking between all log's games;
Criei um parser para ler linha a linha do arquivo de log. Em cada linha, analiso se ela possui as palavras que indicam abertura de um novo jogo (InitGame: ) ou uma kill (Kill: ).
Não utilizei a nomenclatura de encerramento de um jogo pois não identifiquei esta informação no log para todos os games, então, na abertura de um novo jogo, encerro o anterior.
Encapsulei as lógicas da coleção de jogos (GameCollection) e do jogo propriamente dito (Game) em classes ES6 para facilitar a leitura do código.
Utilizei uma regex para extrair quem matou e quem morreu, visto que o padrão é sempre o mesmo da construção das linhas do log. De posse dessas duas informações, o método Game.addKill() fica responsável por toda a lógica mencionada de adicionar uma kill para aquele jogador, aumentar o número de kills totais do jogo e ignorar o como um player.
Como uma das tarefas era construir uma API, aproveitei a mesma para fazer a impressão descrita na tarefa 2 pela rota report, conforme a sessão ROUTES.
Tenho o costume de escrever as variáveis em inglês e mesmo fazer comentários o máximo que eu consigo. Esta sessão preferi escrever em português para me expressar de forma mais clara e precisa possível.
Finalizando, gostaria de deixar minha opinião de que foi um excelente teste, bem criativo e divertido de trabalhar.