LeagueStats/server-v2/app/Parsers/MatchParser.ts

57 lines
1.8 KiB
TypeScript

import { MatchDto } from 'App/Services/Jax/src/Endpoints/MatchEndpoint'
import Match from 'App/Models/Match'
import { getSeasonNumber } from 'App/helpers'
class MatchParser {
public async parseOneMatch(match: MatchDto) {
// TODO: parse + store in database
// From the MatchDto, we need these Models in the DB:
// - 1x Match
const parsedMatch = await Match.create({
id: match.metadata.matchId,
gameId: match.info.gameId,
map: match.info.mapId,
gamemode: match.info.queueId,
date: match.info.gameCreation,
region: match.info.platformId.toLowerCase(),
result: 0, // TODO
season: getSeasonNumber(match.info.gameCreation),
gameDuration: match.info.gameDuration,
})
// - 2x MatchTeam : Red and Blue
let result = 'Remake'
for (let team of match.info.teams) {
if (match.info.gameDuration >= 300) {
result = team.win ? 'Win' : 'Fail'
}
const teamColor = team.teamId === 100 ? 'blueTeam' : 'redTeam'
parsedMatch.related(teamColor).create({
matchId: match.metadata.matchId,
color: team.teamId,
result: result,
barons: team.objectives.baron.kills,
dragons: team.objectives.dragon.kills,
inhibitors: team.objectives.inhibitor.kills,
riftHeralds: team.objectives.riftHerald.kills,
bans: team.bans.map((ban) => ban.championId),
banOrders: team.bans.map((ban) => ban.pickTurn),
})
}
// - 10x MatchPlayer // TODO
return parsedMatch
}
public async parse(matches: MatchDto[]) {
// Loop on all matches and call .parseOneMatch on it
const parsedMatches: Match[] = []
for (const match of matches) {
parsedMatches.push(await this.parseOneMatch(match))
}
return parsedMatches
}
}
export default new MatchParser()