From 45750d64ebd1254618539a0265a5338c2361f628 Mon Sep 17 00:00:00 2001 From: Lazar Date: Sun, 12 Sep 2021 23:24:21 +0200 Subject: [PATCH] feat: parsing of match + its two teams and change in models/migration --- server-v2/app/Models/MatchTeam.ts | 4 +- server-v2/app/Parsers/MatchParser.ts | 49 +++++++++++++++++-- .../migrations/1631392754960_matches.ts | 4 +- .../migrations/1631397498477_match_teams.ts | 4 +- 4 files changed, 50 insertions(+), 11 deletions(-) diff --git a/server-v2/app/Models/MatchTeam.ts b/server-v2/app/Models/MatchTeam.ts index d7bf296..7389b49 100644 --- a/server-v2/app/Models/MatchTeam.ts +++ b/server-v2/app/Models/MatchTeam.ts @@ -12,10 +12,10 @@ export default class MatchTeam extends BaseModel { public match: BelongsTo @column() - public color: string + public color: number @column() - public result: number + public result: string @column() public barons: number diff --git a/server-v2/app/Parsers/MatchParser.ts b/server-v2/app/Parsers/MatchParser.ts index dd2694f..18db9db 100644 --- a/server-v2/app/Parsers/MatchParser.ts +++ b/server-v2/app/Parsers/MatchParser.ts @@ -1,17 +1,56 @@ 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 - // - 10x MatchPlayer - // - 2x MatchTeam + 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[]) { - // TODO - // Loop on all matches and call .parse on it + // 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 } } diff --git a/server-v2/database/migrations/1631392754960_matches.ts b/server-v2/database/migrations/1631392754960_matches.ts index b843eb6..3d36ac2 100644 --- a/server-v2/database/migrations/1631392754960_matches.ts +++ b/server-v2/database/migrations/1631392754960_matches.ts @@ -6,10 +6,10 @@ export default class Matches extends BaseSchema { public async up() { this.schema.createTable(this.tableName, (table) => { table.string('id', 15).primary() - table.integer('game_id').notNullable() + table.bigInteger('game_id').notNullable() table.integer('map').notNullable() table.integer('gamemode').notNullable() - table.integer('date').notNullable() + table.bigInteger('date').notNullable() table.string('region', 4).notNullable() table.integer('result').notNullable() diff --git a/server-v2/database/migrations/1631397498477_match_teams.ts b/server-v2/database/migrations/1631397498477_match_teams.ts index f098539..3dba8cc 100644 --- a/server-v2/database/migrations/1631397498477_match_teams.ts +++ b/server-v2/database/migrations/1631397498477_match_teams.ts @@ -8,8 +8,8 @@ export default class MatchTeams extends BaseSchema { table.increments('id') table.string('match_id', 15) - table.string('color', 4).notNullable() - table.integer('result').notNullable() + table.integer('color').notNullable() // 100 ou 200 + table.string('result', 6) // Win - Remake - Fail table.integer('barons').notNullable() table.integer('dragons').notNullable()