-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtop-teams.js
54 lines (44 loc) · 1.43 KB
/
top-teams.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
const chart = require('./chart');
const db = require('./db_chart');
const medals = ['n/a', 'gold', 'silver', 'bronze'];
const seasons = ['summer', 'winter'];
let years;
const compare = (a, b) => {
if (a[1] > b[1]) return -1;
return 1;
};
const getOverAverage = (params) => {
const results = [];
const avg = params.reduce((a, b) => a + b[1], 0) / params.length;
params.forEach((param) => { if (param[1] > avg) results.push(param); });
return results;
};
const getParams = async (params) => {
let year; let season; let medal;
params.forEach((p) => {
if (p && seasons.includes(p.toLowerCase())) season = p.toLowerCase();
});
params.forEach((p) => {
if (p && medals.includes(p.toLowerCase())) medal = p.toLowerCase();
});
years = await db.getYears(season);
params.forEach((p) => {
if (p && Object.keys(years).includes(p.toLowerCase())) year = p.toLowerCase();
});
return [year, medal];
};
const show = async (argv) => {
const results = [];
const [year, medal] = await getParams([argv[3], argv[4], argv[5]]);
const teams = await db.getTeams();
const gameIds = year && years[year];
const medalVal = medal && [medals.indexOf(medal)];
await Promise.all(Object.keys(teams).map(async (name) => {
const count = await db.getCountMedals(teams[name], gameIds, medalVal);
results.push([name, count[0]]);
}));
chart.build('NOC Amount', getOverAverage(results).sort(compare));
};
module.exports = {
show,
};