summaryrefslogtreecommitdiff
path: root/src/ReportService.js
diff options
context:
space:
mode:
authorschneefux <schneefux+commit@schneefux.xyz>2018-05-30 20:12:01 +0200
committerschneefux <schneefux+commit@schneefux.xyz>2018-12-13 17:09:09 +0100
commitb09d7a9f73e9b28425326227ce8fc4c3b72fb14d (patch)
tree82a274cac4d8eee2c7e41c0a626a1ce63241946d /src/ReportService.js
parent9bca0c543a8a3d5fae1efd0a5d36ef8d1f517d6b (diff)
downloadbrokentalents-b09d7a9f73e9b28425326227ce8fc4c3b72fb14d.tar.gz
brokentalents-b09d7a9f73e9b28425326227ce8fc4c3b72fb14d.zip
Big Routing/Tabbing/ReportService refactor, add ad blocks
Diffstat (limited to 'src/ReportService.js')
-rw-r--r--src/ReportService.js131
1 files changed, 131 insertions, 0 deletions
diff --git a/src/ReportService.js b/src/ReportService.js
new file mode 100644
index 0000000..ed0200c
--- /dev/null
+++ b/src/ReportService.js
@@ -0,0 +1,131 @@
+import * as maps from './maps/maps';
+import * as metadata from '../data/95fb1cdb/metadata.json';
+
+const POPULAR_THRESHOLD = 1.0; // percent
+
+const report = require('../data/95fb1cdb/report.json')
+ .filter((entry) => entry.Actor != undefined); // bad data from API downtime
+
+const reports = new Map();
+const totalPicks = new Map();
+const top10Relevancy = new Map();
+const topPicks = new Map();
+const topWins = new Map();
+const topRareWins = new Map();
+const topEpicWins = new Map();
+const topLegendaryWins = new Map();
+const topLeveledUp = new Map();
+const topLeveledDown = new Map();
+const topUnpopularWins = new Map();
+let totalMatches = 0;
+let actors = [];
+const modes = metadata.config.api.modes;
+
+for(let mode of modes) {
+ const relevancy = (entry) => (entry.Count / totalPicks.get(mode)) * entry.Winner;
+ const playersPerMatch = maps.playersPerMatch(mode);
+
+ reports.set(mode, report.filter((entry) => entry.Mode == mode));
+ totalPicks.set(mode, report.map((entry) => entry.Count).reduce((agg, cur) => agg + cur, 0));
+ totalMatches += totalPicks.get(mode) / maps.playersPerMatch(mode);
+ top10Relevancy.set(mode, reports.get(mode)
+ .sort((entry1, entry2) => relevancy(entry2) - relevancy(entry1))
+ .slice(0, 10));
+ topPicks.set(mode, reports.get(mode).sort((entry1, entry2) => entry2.Count - entry1.Count)[0]);
+ topWins.set(mode, reports.get(mode)
+ .filter((entry) => 100 * playersPerMatch * entry.Count / totalPicks.get(mode) > POPULAR_THRESHOLD)
+ .sort((entry1, entry2) => entry2.Winner - entry1.Winner)[0]);
+ topUnpopularWins.set(mode, reports.get(mode)
+ .filter((entry) => 100 * playersPerMatch * entry.Count / totalPicks.get(mode) <= POPULAR_THRESHOLD)
+ .sort((entry1, entry2) => entry2.Winner - entry1.Winner)[0]);
+ topRareWins.set(mode, reports.get(mode)
+ .filter((entry) => maps.getTalentRarity(entry.Talent) == 'Rare' && 100 * playersPerMatch * entry.Count / totalPicks.get(mode))
+ .sort((entry1, entry2) => entry2.Winner - entry1.Winner)[0]);
+ topEpicWins.set(mode, reports.get(mode)
+ .filter((entry) => maps.getTalentRarity(entry.Talent) == 'Epic' && 100 * playersPerMatch * entry.Count / totalPicks.get(mode))
+ .sort((entry1, entry2) => entry2.Winner - entry1.Winner)[0]);
+ topLegendaryWins.set(mode, reports.get(mode)
+ .filter((entry) => maps.getTalentRarity(entry.Talent) == 'Legendary' && 100 * playersPerMatch * entry.Count / totalPicks.get(mode))
+ .sort((entry1, entry2) => entry2.Winner - entry1.Winner)[0]);
+ topLeveledUp.set(mode, reports.get(mode).sort((entry1, entry2) => {
+ if (!entry1.Level) return 1;
+ if (!entry2.Level) return -1;
+ return entry1.Level < entry2.Level ? 1 : -1;
+ })[0]);
+ topLeveledDown.set(mode, reports.get(mode).sort((entry1, entry2) => {
+ if (!entry1.Level) return 1;
+ if (!entry2.Level) return -1;
+
+ return entry1.Level < entry2.Level ? -1 : 1;
+ })[0]);
+
+ if (actors.length == 0) {
+ actors = [...new Set(reports.get(mode).map((entry) => entry.Actor))];
+ }
+}
+
+export default {
+ getReport(mode) {
+ return reports.get(mode);
+ },
+
+ getTotalPicks(mode) {
+ return totalPicks.get(mode);
+ },
+
+ getTopPick(mode) {
+ return topPicks.get(mode);
+ },
+
+ getTop10Picks(mode) {
+ return top10Relevancy.get(mode);
+ },
+
+ getHighestLevelAvg(mode) {
+ return topLeveledUp.get(mode);
+ },
+
+ getLowestLevelAvg(mode) {
+ return topLeveledDown.get(mode);
+ },
+
+ getTopWin(mode) {
+ return topWins.get(mode);
+ },
+
+ getTopUnpopularWin(mode) {
+ return topUnpopularWins.get(mode);
+ },
+
+ getTopRareWins(mode) {
+ return topRareWins.get(mode);
+ },
+
+ getTopEpicWins(mode) {
+ return topEpicWins.get(mode);
+ },
+
+ getTopLegendaryWins(mode) {
+ return topLegendaryWins.get(mode);
+ },
+
+ getBestUnpopular(mode) {
+ return topUnpopular.get(mode);
+ },
+
+ getActors() {
+ return actors;
+ },
+
+ getModes() {
+ return modes;
+ },
+
+ getTotalMatches() {
+ return totalMatches;
+ },
+
+ getLastUpdate() {
+ return metadata.lastUpdate;
+ },
+};