feat: overview endpoint looks good

This commit is contained in:
Kalane 2021-09-14 00:06:12 +02:00
parent f428b77e0e
commit ac10c94be2
8 changed files with 93 additions and 80 deletions

View file

@ -10,9 +10,10 @@
class="z-40 sidebar"
container-selector=".vue-sticky-container"
>
<SummonerChampions />
<!-- TODO: add it back when implemented -->
<!-- <SummonerChampions />
<SummonerStats />
<SummonerMates />
<SummonerMates /> -->
</VueStickySidebar>
<div class="w-9/12">
<div v-if="current && current.participants" class="mb-4">
@ -56,9 +57,9 @@ import LiveMatch from '@/components/Match/LiveMatch.vue'
import LoadingButton from '@/components/Form/LoadingButton.vue'
import Match from '@/components/Match/Match.vue'
import OverviewLoader from '@/components/Summoner/Overview/OverviewLoader.vue'
import SummonerChampions from '@/components/Summoner/Overview/SummonerChampions.vue'
import SummonerMates from '@/components/Summoner/Overview/SummonerMates.vue'
import SummonerStats from '@/components/Summoner/Overview/SummonerStats.vue'
// import SummonerChampions from '@/components/Summoner/Overview/SummonerChampions.vue'
// import SummonerMates from '@/components/Summoner/Overview/SummonerMates.vue'
// import SummonerStats from '@/components/Summoner/Overview/SummonerStats.vue'
import VueStickySidebar from 'vue-sticky-sidebar'
export default {
@ -67,9 +68,9 @@ export default {
LoadingButton,
Match,
OverviewLoader,
SummonerChampions,
SummonerMates,
SummonerStats,
// SummonerChampions,
// SummonerMates,
// SummonerStats,
VueStickySidebar
},

View file

@ -2,6 +2,8 @@ import Database from '@ioc:Adonis/Lucid/Database'
import { MatchDto } from 'App/Services/Jax/src/Endpoints/MatchEndpoint'
import Match from 'App/Models/Match'
import { getSeasonNumber } from 'App/helpers'
import CDragonService from 'App/Services/CDragonService'
import { ChampionRoles } from './ParsedType'
class MatchParser {
public async parseOneMatch(match: MatchDto) {
// Parse + store in database
@ -25,7 +27,7 @@ class MatchParser {
result = 'Remake'
}
const teamColor = team.teamId === 100 ? 'blueTeam' : 'redTeam'
parsedMatch.related(teamColor).create({
await parsedMatch.related(teamColor).create({
matchId: match.metadata.matchId,
color: team.teamId,
result: result,
@ -64,6 +66,9 @@ class MatchParser {
}
}
const originalChampionData = CDragonService.champions.find((c) => c.id === player.championId)!
const champRoles = originalChampionData.roles
matchPlayers.push({
match_id: match.metadata.matchId,
participant_id: player.participantId,
@ -79,8 +84,8 @@ class MatchParser {
kp: kp,
champ_level: player.champLevel,
champion_id: player.championId,
champion_role1: 0, // TODO
champion_role2: 0, // TODO
champion_role1: ChampionRoles[champRoles[0]],
champion_role2: ChampionRoles[champRoles[1]],
double_kills: player.doubleKills,
triple_kills: player.tripleKills,
quadra_kills: player.quadraKills,
@ -113,6 +118,11 @@ class MatchParser {
})
}
await Database.table('match_players').multiInsert(matchPlayers)
// Load Match relations
await parsedMatch.load((loader) => {
loader.load('blueTeam').load('redTeam').load('players')
})
return parsedMatch
}

View file

@ -0,0 +1,11 @@
export enum ChampionRoles {
assassin,
fighter,
mage,
marksman,
support,
tank,
}
// TODO
export enum TeamPosition {}

View file

@ -1,6 +1,7 @@
import { getSeasonNumber, sortTeamByRole } from 'App/helpers'
import Match from 'App/Models/Match'
import MatchPlayer from 'App/Models/MatchPlayer'
import CDragonService from 'App/Services/CDragonService'
import MatchSerializer from './MatchSerializer'
import {
SerializedMatch,
@ -17,7 +18,7 @@ class BasicMatchSerializer extends MatchSerializer {
* @param id of the champion
*/
protected getChampion(id: number): SerializedMatchChampion {
const originalChampionData = this.champions.find((c) => c.id === id)
const originalChampionData = CDragonService.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()
@ -53,7 +54,7 @@ class BasicMatchSerializer extends MatchSerializer {
continue
}
const item = this.items.find((i) => i.id === id)
const item = CDragonService.items.find((i) => i.id === id)
if (!item) {
items.push(null)
continue
@ -104,19 +105,7 @@ class BasicMatchSerializer extends MatchSerializer {
}
}
public async serializeOneMatch(match: Match, puuid: string): Promise<SerializedMatch> {
// TODO: use a CDragon Service
await super.getContext()
// TODO: do we really need to...
if (!match.players) {
console.log('NEED TO LOAD')
await match.load('players')
await match.load('blueTeam')
await match.load('redTeam')
}
public serializeOneMatch(match: Match, puuid: string): SerializedMatch {
const identity = match.players.find((p) => p.summonerPuuid === puuid)!
const allyTeamColor = identity.team === 100 ? 'blueTeam' : 'redTeam'
@ -126,7 +115,7 @@ class BasicMatchSerializer extends MatchSerializer {
const enemyPlayers: MatchPlayer[] = []
for (const p of match.players) {
p.team === allyTeam.color ? allyPlayers.push(p) : enemyPlayers.push(p)
p.team === identity.team ? allyPlayers.push(p) : enemyPlayers.push(p)
}
return {
@ -144,7 +133,7 @@ class BasicMatchSerializer extends MatchSerializer {
perks: this.getPerks(identity),
region: match.region,
result: allyTeam.result,
role: identity.teamPosition,
role: identity.teamPosition.length ? identity.teamPosition : 'NONE',
season: getSeasonNumber(match.date),
secondSum: identity.summoner2Id,
stats: this.getStats(identity),
@ -153,10 +142,8 @@ class BasicMatchSerializer extends MatchSerializer {
time: match.gameDuration,
}
}
public async serialize(matches: Match[], puuid: string): Promise<SerializedMatch[]> {
await super.getContext()
return await Promise.all(matches.map((match) => this.serializeOneMatch(match, puuid)))
public serialize(matches: Match[], puuid: string): SerializedMatch[] {
return matches.map((match) => this.serializeOneMatch(match, puuid))
}
}

View file

@ -1,43 +1 @@
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() {
if (this.champions) {
return
}
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
}
}
export default abstract class MatchSerializer {}

View file

@ -0,0 +1,45 @@
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'
class CDragonService {
public champions: ChampionDTO[]
public items: ItemDTO[]
public perks: PerkDTO[]
public perkstyles: PerkStyleDTO[]
public summonerSpells: SummonerSpellDTO[]
public championRoles: ChampionsPlayRate
/**
* Get global Context with CDragon Data
*/
public async getContext() {
if (this.champions) {
return
}
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
}
}
export default new CDragonService()

View file

@ -98,7 +98,7 @@ class MatchService {
if (matchSaved) {
// TODO: Serialize match from DB + put it in Redis + push it in "matches"
matches.push(await BasicMatchSerializer.serializeOneMatch(matchSaved, summonerDB.puuid))
matches.push(BasicMatchSerializer.serializeOneMatch(matchSaved, summonerDB.puuid))
} else {
matchesToGetFromRiot.push(matchList[i].matchId)
}
@ -113,10 +113,7 @@ class MatchService {
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
)
const serializedMatches = BasicMatchSerializer.serialize(parsedMatches, summonerDB.puuid)
matches = [...matches, ...serializedMatches]
}

View file

@ -9,6 +9,10 @@ export default class AppProvider {
public async boot() {
// IoC container is ready
// Load CDragon Service
const CDragon = await import('App/Services/CDragonService')
await CDragon.default.getContext()
}
public async ready() {