diff --git a/frontend/components/ChampionSelector.vue b/frontend/components/ChampionSelector.vue index cb6ab20..41d5927 100644 --- a/frontend/components/ChampionSelector.vue +++ b/frontend/components/ChampionSelector.vue @@ -1,20 +1,68 @@ - + + + + diff --git a/frontend/nuxt.config.ts b/frontend/nuxt.config.ts index 604e3e3..e5ad3d2 100644 --- a/frontend/nuxt.config.ts +++ b/frontend/nuxt.config.ts @@ -5,7 +5,7 @@ export default defineNuxtConfig({ css: ['~/assets/css/main.css'], routeRules: { - '/' : {prerender: true}, + '/' : {prerender: false, swr: true}, '/champion/**' : {swr: true} }, diff --git a/frontend/public/img/lanes/icon-position-bottom-blue.png b/frontend/public/img/lanes/icon-position-bottom-blue.png new file mode 100644 index 0000000..8dd335c Binary files /dev/null and b/frontend/public/img/lanes/icon-position-bottom-blue.png differ diff --git a/frontend/public/img/lanes/icon-position-bottom-hover.png b/frontend/public/img/lanes/icon-position-bottom-hover.png new file mode 100644 index 0000000..df84013 Binary files /dev/null and b/frontend/public/img/lanes/icon-position-bottom-hover.png differ diff --git a/frontend/public/img/lanes/icon-position-bottom.png b/frontend/public/img/lanes/icon-position-bottom.png new file mode 100644 index 0000000..c49002d Binary files /dev/null and b/frontend/public/img/lanes/icon-position-bottom.png differ diff --git a/frontend/public/img/lanes/icon-position-jungle-blue.png b/frontend/public/img/lanes/icon-position-jungle-blue.png new file mode 100644 index 0000000..9f06646 Binary files /dev/null and b/frontend/public/img/lanes/icon-position-jungle-blue.png differ diff --git a/frontend/public/img/lanes/icon-position-jungle-hover.png b/frontend/public/img/lanes/icon-position-jungle-hover.png new file mode 100644 index 0000000..fe26ac1 Binary files /dev/null and b/frontend/public/img/lanes/icon-position-jungle-hover.png differ diff --git a/frontend/public/img/lanes/icon-position-jungle.png b/frontend/public/img/lanes/icon-position-jungle.png new file mode 100644 index 0000000..88daaf6 Binary files /dev/null and b/frontend/public/img/lanes/icon-position-jungle.png differ diff --git a/frontend/public/img/lanes/icon-position-middle-blue.png b/frontend/public/img/lanes/icon-position-middle-blue.png new file mode 100644 index 0000000..cf798de Binary files /dev/null and b/frontend/public/img/lanes/icon-position-middle-blue.png differ diff --git a/frontend/public/img/lanes/icon-position-middle-hover.png b/frontend/public/img/lanes/icon-position-middle-hover.png new file mode 100644 index 0000000..e759396 Binary files /dev/null and b/frontend/public/img/lanes/icon-position-middle-hover.png differ diff --git a/frontend/public/img/lanes/icon-position-middle.png b/frontend/public/img/lanes/icon-position-middle.png new file mode 100644 index 0000000..c16810c Binary files /dev/null and b/frontend/public/img/lanes/icon-position-middle.png differ diff --git a/frontend/public/img/lanes/icon-position-top-blue.png b/frontend/public/img/lanes/icon-position-top-blue.png new file mode 100644 index 0000000..e5a0248 Binary files /dev/null and b/frontend/public/img/lanes/icon-position-top-blue.png differ diff --git a/frontend/public/img/lanes/icon-position-top-hover.png b/frontend/public/img/lanes/icon-position-top-hover.png new file mode 100644 index 0000000..9c4023b Binary files /dev/null and b/frontend/public/img/lanes/icon-position-top-hover.png differ diff --git a/frontend/public/img/lanes/icon-position-top.png b/frontend/public/img/lanes/icon-position-top.png new file mode 100644 index 0000000..fa923fc Binary files /dev/null and b/frontend/public/img/lanes/icon-position-top.png differ diff --git a/frontend/public/img/lanes/icon-position-utility-blue.png b/frontend/public/img/lanes/icon-position-utility-blue.png new file mode 100644 index 0000000..bc77b76 Binary files /dev/null and b/frontend/public/img/lanes/icon-position-utility-blue.png differ diff --git a/frontend/public/img/lanes/icon-position-utility-hover.png b/frontend/public/img/lanes/icon-position-utility-hover.png new file mode 100644 index 0000000..55e725e Binary files /dev/null and b/frontend/public/img/lanes/icon-position-utility-hover.png differ diff --git a/frontend/public/img/lanes/icon-position-utility.png b/frontend/public/img/lanes/icon-position-utility.png new file mode 100644 index 0000000..724f6c8 Binary files /dev/null and b/frontend/public/img/lanes/icon-position-utility.png differ diff --git a/frontend/server/api/champion/[alias].js b/frontend/server/api/champion/[alias].js index 686d18b..531d833 100644 --- a/frontend/server/api/champion/[alias].js +++ b/frontend/server/api/champion/[alias].js @@ -1,17 +1,5 @@ -import { MongoClient } from 'mongodb' +import {connectToDatabase, fetchLatestPatch} from '../../utils/mongo' -async function connectToDatabase() { - // Create a MongoClient with a MongoClientOptions object to set the Stable API version - const client = new MongoClient(`mongodb://${process.env.MONGO_USER}:${process.env.MONGO_PASS}@mongo:27017`) - await client.connect() - return client -} -async function fetchLatestPatch(client) { - const database = client.db("patches"); - const patches = database.collection("patches"); - const latestPatch = await patches.find().limit(1).sort({date:-1}).next() - return latestPatch.patch -} async function championInfos(client, patch, championAlias) { const database = client.db("champions"); const collection = database.collection(patch); diff --git a/frontend/server/api/champions.js b/frontend/server/api/champions.js new file mode 100644 index 0000000..6f54fa8 --- /dev/null +++ b/frontend/server/api/champions.js @@ -0,0 +1,23 @@ +import {connectToDatabase, fetchLatestPatch} from '../utils/mongo' + +async function champions(client, patch) { + const database = client.db("champions"); + const collection = database.collection(patch); + const data = await collection.find().toArray() + data.map((x) => { + delete x.runes + delete x.builds + }) + return data +} + +export default defineEventHandler(async (event) => { + const client = await connectToDatabase(); + const latestPatch = await fetchLatestPatch(client); + + const data = await champions(client, latestPatch); + + await client.close() + + return data +}) diff --git a/frontend/server/utils/mongo.js b/frontend/server/utils/mongo.js new file mode 100644 index 0000000..1d9c9d1 --- /dev/null +++ b/frontend/server/utils/mongo.js @@ -0,0 +1,17 @@ +import { MongoClient } from 'mongodb' + +async function connectToDatabase() { + // Create a MongoClient with a MongoClientOptions object to set the Stable API version + const client = new MongoClient(`mongodb://${process.env.MONGO_USER}:${process.env.MONGO_PASS}@mongo:27017`) + await client.connect() + return client +} + +async function fetchLatestPatch(client) { + const database = client.db("patches"); + const patches = database.collection("patches"); + const latestPatch = await patches.find().limit(1).sort({date:-1}).next() + return latestPatch.patch +} + +export {connectToDatabase, fetchLatestPatch} diff --git a/match_collector/champion_stat.ts b/match_collector/champion_stat.ts index 6a49166..b1bad4e 100644 --- a/match_collector/champion_stat.ts +++ b/match_collector/champion_stat.ts @@ -141,6 +141,7 @@ async function championInfos(client, patch: number, champion: Champion) { let winningMatches = 0; let losingMatches = 0; let totalMatches = 0; + const lanes : Array<{data: string, count: number}> = []; const runes : Array = []; const builds : Builds = {tree:treeInit(), start: [], bootsFirst: 0, boots: [], lateGame: []} for await (let match of allMatches) { @@ -156,6 +157,12 @@ async function championInfos(client, patch: number, champion: Champion) { else losingMatches += 1; + // Lanes + // TODO: make stats lane-dependant + const already = lanes.find((x) => x.data == participant.teamPosition) + if(already == undefined) lanes.push({count:1, data: participant.teamPosition}) + else already.count += 1 + // Runes handleParticipantRunes(participant, runes) @@ -168,6 +175,9 @@ async function championInfos(client, patch: number, champion: Champion) { let totalChampionMatches = winningMatches + losingMatches; + lanes.sort((a, b) => b.count - a.count) + arrayRemovePercentage(lanes, totalChampionMatches, 0.15) + // Filter runes to keep 3 most played runes.sort((a, b) => b.count - a.count) if(runes.length > 3) @@ -198,6 +208,7 @@ async function championInfos(client, patch: number, champion: Champion) { return {name: champion.name, alias: champion.alias.toLowerCase(), id: championId, + lanes: lanes, winrate: winningMatches / totalChampionMatches, gameCount: totalChampionMatches, pickrate: totalChampionMatches/totalMatches, @@ -236,7 +247,6 @@ async function makeChampionsStats(client, patch : number) { const database = client.db("champions") const collection = database.collection(patch) - await collection.createIndex({id:1}) await collection.createIndex({alias:1}) }