LeagueStats/server/app/Parsers/MatchPlayerRankParser.ts

48 lines
1.5 KiB
TypeScript
Raw Permalink Normal View History

2021-09-16 20:29:20 +00:00
import Database from '@ioc:Adonis/Lucid/Database'
import { notEmpty } from 'App/helpers'
import Match from 'App/Models/Match'
import MatchPlayer from 'App/Models/MatchPlayer'
import SummonerService from 'App/Services/SummonerService'
import { PlayerRankParsed } from './ParsedType'
class MatchPlayerRankParser {
public async parse(match: Match): Promise<PlayerRankParsed[]> {
const requests = match.players
.filter((p) => p.summonerPuuid !== 'BOT')
2025-08-12 20:10:58 +00:00
.map((p) => SummonerService.getRanked(p.summonerPuuid, match.region))
2021-09-16 20:29:20 +00:00
const ranks = await Promise.all(requests)
const parsedRanks = ranks
.map((rank) => {
return Object.entries(rank).map(([queue, data]) => {
let player: MatchPlayer | undefined
2025-08-12 20:56:08 +00:00
if (!data || !(player = match.players.find((p) => p.summonerPuuid === data.puuid))) {
2021-09-16 20:29:20 +00:00
return
}
const rank: PlayerRankParsed = {
player_id: player.id,
gamemode: queue === 'soloQ' ? 420 : 440,
tier: data.tier,
rank: SummonerService.leaguesNumbers[data.rank],
lp: data.leaguePoints,
wins: data.wins,
losses: data.losses,
}
return rank
})
})
.flat()
.filter(notEmpty)
// Store ranks in DB
if (parsedRanks.length) {
await Database.table('match_player_ranks').multiInsert(parsedRanks)
}
2021-09-16 20:29:20 +00:00
return parsedRanks
}
}
export default new MatchPlayerRankParser()