-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathrunner.js
More file actions
51 lines (43 loc) · 1.61 KB
/
runner.js
File metadata and controls
51 lines (43 loc) · 1.61 KB
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
const axios = require('axios');
const cache = require('memory-cache');
const { flat, getCurrentTimeInSeconds } = require('./utils');
const codeforces = require('./parsers/codeforces');
const hackerearth = require('./parsers/hackerearth');
const hackerrank = require('./parsers/hackerrank');
const topcoder = require('./parsers/topcoder');
const leetcode = require('./parsers/leetcode');
const codechef = require('./parsers/codechef');
const atcoder = require('./parsers/atcoder');
const csacademy = require('./parsers/csacademy');
const coj = require('./parsers/coj');
const kaggle = require('./parsers/kaggle');
const codingninjas = require('./parsers/codingninjas');
const runner = () => axios.all([
codeforces(),
hackerearth(),
hackerrank(),
topcoder(),
leetcode(),
codechef(),
atcoder(),
csacademy(),
coj(),
kaggle(),
codingninjas(),
])
.then((contestsByPlatform) => {
const contests = flat(contestsByPlatform.filter(it => Array.isArray(it)));
const curTime = getCurrentTimeInSeconds();
const sortByStartTime = (a, b) => a.startTime - b.startTime;
const sortByEndTime = (a, b) => a.endTime - b.endTime;
const isOngoing = contest => contest.startTime < curTime && contest.endTime > curTime;
const isUpcoming = contest => contest.startTime > curTime && contest.endTime > curTime;
const ongoingContests = contests.filter(isOngoing).sort(sortByEndTime);
const upcomingContests = contests.filter(isUpcoming).sort(sortByStartTime);
cache.put('results', {
timestamp: curTime,
ongoing: ongoingContests,
upcoming: upcomingContests,
});
});
module.exports = runner;