-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathindex.js
69 lines (55 loc) · 2.11 KB
/
index.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
55
56
57
58
59
60
61
62
63
64
65
66
67
const AWS = require('aws-sdk');
const axios = require('axios');
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 s3bucket = new AWS.S3({});
exports.handler = async (event) => {
return axios.all([
codeforces(),
hackerearth(),
hackerrank(),
topcoder(),
leetcode(),
codechef(),
atcoder(),
csacademy(),
coj(),
kaggle(),
])
.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);
const resultsJson = JSON.stringify({
results: {
timestamp: curTime,
ongoing: ongoingContests,
upcoming: upcomingContests,
}
});
const params = {
Bucket: "codercalendar-api",
Key: "response.json",
Body: resultsJson,
ContentType: "application/json;charset=UTF-8",
ACL: 'public-read'
};
return s3bucket.upload(params).promise().then((data) => {
console.log(`File uploaded successfully at ${data.Location}`)
});
});
};