feat: add summoner friends back

This commit is contained in:
Kalane 2021-09-15 18:35:39 +02:00
parent 73e40820bd
commit 1f5afc3f54
4 changed files with 36 additions and 11 deletions

View file

@ -19,7 +19,7 @@
<ul class="mt-1 text-gray-100"> <ul class="mt-1 text-gray-100">
<li <li
v-for="mate in mates.slice(0, maxMates)" v-for="mate in mates.slice(0, maxMates)"
:key="mate._id" :key="mate.name"
class="flex items-center justify-between" class="flex items-center justify-between"
> >
<router-link <router-link

View file

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

View file

@ -7,7 +7,7 @@ class MatchRepository {
private readonly JOIN_ALL = `${this.JOIN_MATCHES} ${this.JOIN_TEAMS}` private readonly JOIN_ALL = `${this.JOIN_MATCHES} ${this.JOIN_TEAMS}`
private readonly GLOBAL_FILTERS = ` private readonly GLOBAL_FILTERS = `
summoner_puuid = :puuid match_players.summoner_puuid = :puuid
AND match_teams.result != 'Remake' AND match_teams.result != 'Remake'
AND matches.gamemode NOT IN (800, 810, 820, 830, 840, 850, 2000, 2010, 2020) AND matches.gamemode NOT IN (800, 810, 820, 830, 840, 850, 2000, 2010, 2020)
` `
@ -146,6 +146,32 @@ class MatchRepository {
const { rows } = await Database.rawQuery(query, { puuid }) const { rows } = await Database.rawQuery(query, { puuid })
return rows return rows
} }
public async mates(puuid: string) {
const query = `
SELECT
(array_agg(mates.summoner_name ORDER BY mates.match_id DESC))[1] as name,
COUNT(match_players.id) as count,
COUNT(case when match_teams.result = 'Win' then 1 else null end) as wins,
COUNT(case when match_teams.result = 'Fail' then 1 else null end) as losses
FROM
match_players
${this.JOIN_ALL}
INNER JOIN match_players as mates ON match_players.match_id = mates.match_id AND match_players.team = mates.team
WHERE
${this.GLOBAL_FILTERS}
GROUP BY
mates.summoner_puuid
ORDER BY
count DESC, wins DESC
LIMIT
15
`
const { rows } = await Database.rawQuery(query, { puuid })
// Remove the Summoner himself + unique game mates
return rows.splice(1).filter((row) => row.count > 1)
}
} }
export default new MatchRepository() export default new MatchRepository()

View file

@ -41,17 +41,17 @@ class StatsService {
champ.id = ChampionRoles[champ.id] champ.id = ChampionRoles[champ.id]
} }
console.timeEnd('CHAMPION-CLASS') console.timeEnd('CHAMPION-CLASS')
// console.time('MATES') console.time('MATES')
// const mates = await MatchRepository.mates(puuid, season) const mates = await MatchRepository.mates(puuid)
// console.timeEnd('MATES') console.timeEnd('MATES')
return { return {
global: globalStats, global: globalStats,
league: gamemodeStats, league: gamemodeStats,
role: roleStats.sort(sortTeamByRole), role: roleStats.sort(sortTeamByRole),
class: championClassStats,
// mates,
champion: championStats, champion: championStats,
class: championClassStats,
mates,
} }
} }
} }