LeagueStats/server/app/Controllers/Http/SummonerController.js

147 lines
3.9 KiB
JavaScript
Raw Normal View History

'use strict'
const Jax = use('Jax')
const MatchHelper = use('App/Helpers/MatchHelper')
const Summoner = use('App/Models/Summoner')
const Match = use('App/Models/Match')
class SummonerController {
/**
* POST Endpoint : get summoner data
*/
async api({ request, response }) {
console.time('all')
const summoner = request.input('summoner')
const region = request.input('region')
console.log(summoner, region)
const regexSummonerName = new RegExp('^[0-9\\p{L} _\\.]+$', 'u')
if (!regexSummonerName.exec(summoner)) {
return response.json(null)
}
const finalJSON = {}
Jax.regionName = region
try {
const account = await Jax.Summoner.summonerName(summoner)
// Check if the summoner is found
if (!account) return response.json(null)
account.region = region
finalJSON.account = account
// Summoner in DB
const summonerDB = await Summoner.findOrCreate(
{ puuid: account.puuid },
{ puuid: account.puuid }
)
// CURRENT GAME
const currentGame = await Jax.Spectator.summonerID(account.id)
finalJSON.playing = !!currentGame
// RANKED STATS
const ranked = await Jax.League.summonerID(account.id)
2019-10-08 19:54:32 +00:00
finalJSON.ranked = {
soloQ: ranked.find(e => e.queueType === 'RANKED_SOLO_5x5') || null,
flex5v5: ranked.find(e => e.queueType === 'RANKED_FLEX_SR') || null,
flex3v3: ranked.find(e => e.queueType === 'RANKED_FLEX_TT') || null
2019-10-08 19:54:32 +00:00
}
// MATCH LIST
await MatchHelper.updateMatchList(account, summonerDB)
const matchList = summonerDB.matchList
finalJSON.allMatches = matchList
// MATCHES DETAILS
const gameIds = matchList.slice(0, 10).map(({ gameId }) => gameId)
finalJSON.matchesDetails = await MatchHelper.getMatches(account, gameIds, summonerDB)
// MATES
finalJSON.mates = summonerDB.mates.filter(m => m.wins + m.losses > 1)
// PATCH VERSION
finalJSON.version = Jax.DDragon.Version
// STATS
console.time('STATS')
const gamemodeStats = await Match.query().aggregate([
{
$match: {
summoner_puuid: account.puuid
}
},
{
$group: {
_id: "$gamemode",
count: { $sum: 1 },
wins: {
$sum: {
$cond: [
{ $eq: ["$result", "Win"] }, 1, 0
]
}
},
losses: {
$sum: {
$cond: [
{ $eq: ["$result", "Fail"] }, 1, 0
]
}
}
}
}
])
const globalStats = await Match.query().aggregate([
{
$match: {
summoner_puuid: account.puuid
}
},
{
$group: {
_id: null,
count: { $sum: 1 },
time: { $sum: "$time" },
wins: {
$sum: {
$cond: [
{ $eq: ["$result", "Win"] }, 1, 0
]
}
},
losses: {
$sum: {
$cond: [
{ $eq: ["$result", "Fail"] }, 1, 0
]
}
},
kills: { $sum: "$stats.kills" },
deaths: { $sum: "$stats.deaths" },
assists: { $sum: "$stats.assists" },
minions: { $sum: "$stats.minions" },
vision: { $sum: "$stats.vision" },
kp: { $avg: "$stats.kp" },
}
}
])
finalJSON.stats = [...globalStats, ...gamemodeStats]
console.timeEnd('STATS')
// SAVE IN DB
await summonerDB.save()
} catch (error) {
console.log('username not found')
console.log(error)
return response.json(null)
}
console.timeEnd('all')
return response.json(finalJSON)
}
}
module.exports = SummonerController