From c10cd44615df88f76fbb72b1b9c76945bff5215b Mon Sep 17 00:00:00 2001 From: Anthony Mineo Date: Wed, 23 Sep 2020 14:39:29 -0400 Subject: [PATCH] Update return formats --- app/api/src/game/game.service.ts | 74 +++++++++++++++++++++++--- app/api/src/games/games.service.ts | 25 ++++++--- app/api/src/players/players.service.ts | 2 +- 3 files changed, 88 insertions(+), 13 deletions(-) diff --git a/app/api/src/game/game.service.ts b/app/api/src/game/game.service.ts index f6b5e1e..b8418de 100644 --- a/app/api/src/game/game.service.ts +++ b/app/api/src/game/game.service.ts @@ -58,6 +58,10 @@ export class GameService { inferno: { score: 0, players: [] } }; + const teamZero = [], + teamOne = [], + teamTwo = []; + for (const player of query) { const { playerName } = player; const stats = formatPlayerStats(player); @@ -75,22 +79,80 @@ export class GameService { if (player.stats.dtTeamGame[0] === '1') { // Storm game.teams.storm.score += totalFlagScore; - game.teams.storm.players.push(p); + teamOne.push(p); } else if (player.stats.dtTeamGame[0] === '2') { // Inferno game.teams.inferno.score += totalFlagScore; - game.teams.inferno.players.push(p); + teamTwo.push(p); } else { // OBS game.teams.obs.score += totalFlagScore; - game.teams.obs.players.push(p); + teamZero.push(p); } } - //const teamZero: any = game; //game.find(({ stats }) => stats.dtTeamGame[0] === '3'); + game['teams']['obs']['players'] = teamZero.sort((a, b) => b.stats.scoreTG - a.stats.scoreTG); + game['teams']['storm']['players'] = teamOne.sort((a, b) => b.stats.scoreTG - a.stats.scoreTG); + game['teams']['inferno']['players'] = teamTwo.sort((a, b) => b.stats.scoreTG - a.stats.scoreTG); - // const teamOne: any = game.find(({ stats }) => stats.dtTeamGame[0] === '1'); - // const teamTwo: any = game.find(({ stats }) => stats.dtTeamGame[0] === '2'); + return game; + } + + async findOneAbvSummary(gameId: string) { + const query = await this.gameRepository.find({ + relations: [ 'game', 'playerGuid' ], + where: [ { game: { gameId: gameId } } ] + }); + + if (!query.length) { + throw new NotFoundException(`Game ID: ${gameId} not found`); + } + + const game: any = { + ...query[0].game + }; + + // Need to set return based off gameType + // Modify game object if not a CTF type game and return early + if (query[0].gametype !== 'CTFGame' && query[0].gametype !== 'SCtFGame') { + game['totalScore'] = 0; + + for (const player of query) { + const stats = formatPlayerStats(player); + + game.totalScore += stats.scoreTG; + } + + return game; + } + + // Team Based game stats (CTF/SCtF) + game['teams'] = { + obs: { score: 0, playerCount: 0 }, + storm: { score: 0, playerCount: 0 }, + inferno: { score: 0, playerCount: 0 } + }; + + for (const player of query) { + const flagGrabsTG = parseInt(player.stats.flagGrabsTG[0]); + const flagCapsTG = parseInt(player.stats.flagCapsTG[0]) * 100; + const totalFlagScore = flagGrabsTG + flagCapsTG; + + if (player.stats.dtTeamGame[0] === '1') { + // Storm + game.teams.storm.score += totalFlagScore; + game.teams.storm.playerCount += 1; + } else if (player.stats.dtTeamGame[0] === '2') { + // Inferno + game.teams.inferno.score += totalFlagScore; + game.teams.inferno.playerCount += 1; + } else { + // OBS + game.teams.obs.score += totalFlagScore; + game.teams.obs.playerCount += 1; + } + } + game['totalScore'] = game.teams.storm.score + game.teams.inferno.score + game.teams.obs.score; return game; } diff --git a/app/api/src/games/games.service.ts b/app/api/src/games/games.service.ts index 2482c28..40af763 100644 --- a/app/api/src/games/games.service.ts +++ b/app/api/src/games/games.service.ts @@ -28,7 +28,14 @@ export class GamesService { } }); - return games; + const abvSummary = []; + for (const game of games) { + const summary = await this.gameService.findOneAbvSummary(game.gameId); + abvSummary.push(summary); + } + + // Only return games when the score is 100 or greater + return abvSummary.filter((g) => g.totalScore >= 100); } async findAllWithSummary(paginationQuery: PaginationQueryDto) { @@ -50,13 +57,11 @@ export class GamesService { withSummary.push(summary); } - // Game findOne service needs to bubble up the game details as parent object and set players below it - return withSummary; } async findByType(gametype: string) { - const game = await this.gamesRepository.find({ + const games = await this.gamesRepository.find({ where: { gametype: gametype }, skip: 0, take: 10, @@ -64,10 +69,18 @@ export class GamesService { gameId: 'DESC' } }); - if (!game.length) { + if (!games.length) { throw new NotFoundException(`Game Type: ${gametype} not found`); } - return game; + + const abvSummary = []; + for (const game of games) { + const summary = await this.gameService.findOneAbvSummary(game.gameId); + abvSummary.push(summary); + } + + // Only return games when the score is 100 or greater + return abvSummary.filter((g) => g.totalScore >= 100); } async findByTypeWithSummary(gametype: string, paginationQuery: PaginationQueryDto) { diff --git a/app/api/src/players/players.service.ts b/app/api/src/players/players.service.ts index 176ba5a..a895acc 100644 --- a/app/api/src/players/players.service.ts +++ b/app/api/src/players/players.service.ts @@ -19,7 +19,7 @@ export class PlayersService { async findAll(paginationQuery: PaginationQueryDto) { const { limit, offset } = paginationQuery; - const returnMaxLimit = Math.min(300, Math.max(0, limit)); + const returnMaxLimit = Math.min(500, Math.max(0, limit)); const players = await this.playersRepository.find({ skip: offset,