1+ const User = require ( "../models/users" )
2+ const fetch = require ( 'node-fetch' ) ;
3+ const oneDay = 24 * 60 * 60 * 1000 ;
4+ const getUserInfo = async function ( username ) {
5+ try {
6+ const user = await User . findById ( username )
7+ if ( user === null || Date . now ( ) - user . lastUpdated >= oneDay ) {
8+ console . log ( `fetching user ${ username } 's info from leetcode...` )
9+ var resp = await fetch ( "https://leetcode.com/graphql" , {
10+ "headers" : {
11+ "accept" : "*/*" ,
12+ "accept-language" : "en-GB,en-US;q=0.9,en;q=0.8,hi;q=0.7,ru;q=0.6" ,
13+ "content-type" : "application/json" ,
14+ "sec-ch-ua" : `" Not A;Brand";v="99", "Chromium";v="90", "Google Chrome";v="90"` ,
15+ "sec-ch-ua-mobile" : "?0" ,
16+ "sec-fetch-dest" : "empty" ,
17+ "sec-fetch-mode" : "cors" ,
18+ "sec-fetch-site" : "same-origin" ,
19+ "sec-gpc" : "1" ,
20+ "x-newrelic-id" : "UAQDVFVRGwEAXVlbBAg=" ,
21+ } ,
22+ "referrerPolicy" : "strict-origin-when-cross-origin" ,
23+ "body" : `{"operationName":"getContestRankingData","variables":{"username":"${ username } "},"query":"query getContestRankingData($username: String!) {\\n userContestRanking(username: $username) {\\n attendedContestsCount\\n rating\\n globalRanking\\n __typename\\n }\\n}\\n\"}` ,
24+ "method" : "POST" ,
25+ "mode" : "cors"
26+ } )
27+ resp = await resp . json ( )
28+ const attenedContestCount = resp . data . userContestRanking . attendedContestsCount
29+ const rating = resp . data . userContestRanking . rating
30+ const globalRanking = resp . data . userContestRanking . globalRanking
31+ var newUser = new User ( {
32+ _id : username ,
33+ attendedContestsCount : attenedContestCount ,
34+ rating : rating ,
35+ globalRanking : globalRanking ,
36+ lastUpdated : Date . now ( )
37+ } )
38+
39+ if ( user === null ) {
40+ newDate = await newUser . save ( ) ;
41+ console . log ( "created new user: " + username )
42+ } else {
43+ await User . findByIdAndUpdate ( username , newUser )
44+ console . log ( `user ${ username } 's info updated` )
45+ }
46+ return newUser
47+ } else {
48+ return user
49+ }
50+
51+ } catch ( err ) {
52+ console . error ( err )
53+ }
54+ }
55+
56+ module . exports = getUserInfo
0 commit comments