mirror of
https://github.com/vkaelin/LeagueStats.git
synced 2026-03-25 04:47:27 +00:00
feat: start basic-match serializer
This commit is contained in:
parent
2b73d29f6a
commit
505bbd739d
4 changed files with 187 additions and 1 deletions
67
server-v2/app/Serializers/BasicMatchSerializer.ts
Normal file
67
server-v2/app/Serializers/BasicMatchSerializer.ts
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
import { getSeasonNumber } from 'App/helpers'
|
||||
import Match from 'App/Models/Match'
|
||||
import MatchPlayer from 'App/Models/MatchPlayer'
|
||||
import MatchSerializer from './MatchSerializer'
|
||||
import { SerializedMatch, SerializedMatchChampion } from './SerializedTypes'
|
||||
|
||||
class BasicMatchSerializer extends MatchSerializer {
|
||||
/**
|
||||
* Get champion specific data
|
||||
* @param id of the champion
|
||||
*/
|
||||
protected getChampion(id: number): SerializedMatchChampion {
|
||||
const originalChampionData = this.champions.find((c) => c.id === id)
|
||||
const icon =
|
||||
'https://raw.communitydragon.org/latest/plugins/rcp-be-lol-game-data/global/default/' +
|
||||
originalChampionData!.squarePortraitPath.split('/assets/')[1].toLowerCase()
|
||||
|
||||
return {
|
||||
icon,
|
||||
id: originalChampionData!.id,
|
||||
name: originalChampionData!.name,
|
||||
alias: originalChampionData!.alias,
|
||||
roles: originalChampionData!.roles,
|
||||
}
|
||||
}
|
||||
|
||||
public async serializeOneMatch(match: Match, puuid: string) {
|
||||
// : Promise<SerializedMatch>
|
||||
|
||||
const players = await match.related('players').query()
|
||||
const identity = players.find((p) => p.summonerPuuid === puuid)!
|
||||
|
||||
// TODO: keep going here
|
||||
return {
|
||||
allyTeam: null,
|
||||
champion: this.getChampion(identity.championId),
|
||||
date: match.date,
|
||||
enemyTeam: null,
|
||||
firstSum: identity.summoner1Id,
|
||||
matchId: match.id,
|
||||
gamemode: match.gamemode,
|
||||
items: null,
|
||||
level: identity.champLevel,
|
||||
map: match.map,
|
||||
name: identity.summonerName,
|
||||
perks: null,
|
||||
region: match.region,
|
||||
result: null,
|
||||
role: identity.teamPosition,
|
||||
season: getSeasonNumber(match.date),
|
||||
secondSum: identity.summoner2Id,
|
||||
stats: null,
|
||||
summonerId: identity.summonerId,
|
||||
summonerPuuid: puuid,
|
||||
time: match.gameDuration,
|
||||
}
|
||||
}
|
||||
public async serialize(matches: Match[], puuid: string) {
|
||||
// : Promise<SerializedMatch[]>
|
||||
|
||||
await super.getContext()
|
||||
|
||||
return matches.map((match) => this.serializeOneMatch(match, puuid))
|
||||
}
|
||||
}
|
||||
|
||||
export default new BasicMatchSerializer()
|
||||
39
server-v2/app/Serializers/MatchSerializer.ts
Normal file
39
server-v2/app/Serializers/MatchSerializer.ts
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
import Jax from 'App/Services/Jax'
|
||||
import {
|
||||
ChampionDTO,
|
||||
ItemDTO,
|
||||
PerkDTO,
|
||||
PerkStyleDTO,
|
||||
SummonerSpellDTO,
|
||||
} from 'App/Services/Jax/src/Endpoints/CDragonEndpoint'
|
||||
import RoleIdentificationService, {
|
||||
ChampionsPlayRate,
|
||||
} from 'App/Services/RoleIdentificationService'
|
||||
|
||||
export default abstract class MatchSerializer {
|
||||
protected champions: ChampionDTO[]
|
||||
protected items: ItemDTO[]
|
||||
protected perks: PerkDTO[]
|
||||
protected perkstyles: PerkStyleDTO[]
|
||||
protected summonerSpells: SummonerSpellDTO[]
|
||||
protected championRoles: ChampionsPlayRate
|
||||
|
||||
/**
|
||||
* Get global Context with CDragon Data
|
||||
*/
|
||||
public async getContext() {
|
||||
const items = await Jax.CDragon.items()
|
||||
const champions = await Jax.CDragon.champions()
|
||||
const perks = await Jax.CDragon.perks()
|
||||
const perkstyles = await Jax.CDragon.perkstyles()
|
||||
const summonerSpells = await Jax.CDragon.summonerSpells()
|
||||
const championRoles = await RoleIdentificationService.pullData().catch(() => {})
|
||||
|
||||
this.champions = champions
|
||||
this.items = items
|
||||
this.perks = perks
|
||||
this.perkstyles = perkstyles.styles
|
||||
this.summonerSpells = summonerSpells
|
||||
this.championRoles = championRoles as ChampionsPlayRate
|
||||
}
|
||||
}
|
||||
75
server-v2/app/Serializers/SerializedTypes.ts
Normal file
75
server-v2/app/Serializers/SerializedTypes.ts
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
export interface SerializedMatch {
|
||||
allyTeam: SerializedMatchTeamPlayer[]
|
||||
champion: SerializedMatchChampion
|
||||
date: number
|
||||
enemyTeam: SerializedMatchTeamPlayer[]
|
||||
firstSum: number
|
||||
matchId: string
|
||||
gamemode: number
|
||||
items: SerializedMatchItem[]
|
||||
level: number
|
||||
map: number
|
||||
name: string
|
||||
perks: SerializedMatchPerks
|
||||
region: string
|
||||
result: string
|
||||
role: string
|
||||
season: number
|
||||
secondSum: number
|
||||
stats: SerializedMatchStats
|
||||
summonerId: string
|
||||
summonerPuuid: string
|
||||
time: number
|
||||
}
|
||||
|
||||
export interface SerializedMatchTeamPlayer {
|
||||
puuid: string
|
||||
champion: SerializedMatchChampion
|
||||
name: string
|
||||
role: string
|
||||
}
|
||||
|
||||
export interface SerializedMatchChampion {
|
||||
alias: string
|
||||
icon: string
|
||||
id: number
|
||||
name: string
|
||||
roles: string[]
|
||||
}
|
||||
|
||||
export interface SerializedMatchItem {
|
||||
description: string
|
||||
image: string
|
||||
name: string
|
||||
price: number
|
||||
}
|
||||
|
||||
export interface SerializedMatchPerks {
|
||||
primaryStyle: number
|
||||
secondaryStyle: number
|
||||
selected: number[]
|
||||
}
|
||||
|
||||
export interface SerializedMatchStats {
|
||||
assists: number
|
||||
criticalStrike: number
|
||||
deaths: number
|
||||
dmgChamp: number
|
||||
dmgObj: number
|
||||
dmgTaken: number
|
||||
doubleKills: number
|
||||
gold: number
|
||||
heal: number
|
||||
kda: number
|
||||
killingSpree: number
|
||||
kills: number
|
||||
kp: number
|
||||
longestLiving: number
|
||||
minions: number
|
||||
pentaKills: number
|
||||
quadraKills: number
|
||||
realKda: number
|
||||
towers: number
|
||||
tripleKills: number
|
||||
vision: number
|
||||
}
|
||||
|
|
@ -5,6 +5,7 @@ import Summoner from 'App/Models/Summoner'
|
|||
import Database from '@ioc:Adonis/Lucid/Database'
|
||||
import SummonerMatchlist from 'App/Models/SummonerMatchlist'
|
||||
import MatchParser from 'App/Parsers/MatchParser'
|
||||
import BasicMatchSerializer from 'App/Serializers/BasicMatchSerializer'
|
||||
|
||||
class MatchService {
|
||||
/**
|
||||
|
|
@ -102,9 +103,13 @@ class MatchService {
|
|||
/* If we have to store some matches in the db */
|
||||
if (matchesFromApi.length !== 0) {
|
||||
// Transform raw matches data
|
||||
const parsedMatches = await MatchParser.parse(matchesFromApi)
|
||||
const parsedMatches: any = await MatchParser.parse(matchesFromApi)
|
||||
|
||||
// TODO: Serialize match from DB + put it in Redis + push it in "matches"
|
||||
const serializedMatches = await BasicMatchSerializer.serialize(
|
||||
parsedMatches,
|
||||
summonerDB.puuid
|
||||
)
|
||||
}
|
||||
|
||||
// Todo: Sort and return "matches"
|
||||
|
|
|
|||
Loading…
Reference in a new issue