'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) 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 } // 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