Update return formats

This commit is contained in:
Anthony Mineo 2020-09-23 14:39:29 -04:00
parent 67eb8db0c8
commit c10cd44615
3 changed files with 88 additions and 13 deletions

View file

@ -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;
}

View file

@ -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) {

View file

@ -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,