@@ -3,7 +3,8 @@ const Contest = require("../models/contest");
3
3
const { IsLatestContest } = require ( "../helpers" ) ;
4
4
const { BASE_CN_URL , BASE_URL } = require ( "./users" ) ;
5
5
6
- const getContestParticipantsRankings = async ( contestSlug , dataRegion ) => {
6
+ const getContestParticipantsRankings = async ( contest , dataRegion ) => {
7
+ const contestSlug = contest . _id ;
7
8
console . log ( `Fetching participant's rankings for ${ dataRegion } region...` ) ;
8
9
const baseUrl = dataRegion === "CN" ? BASE_CN_URL : BASE_URL ;
9
10
let resp = await fetch (
@@ -13,7 +14,7 @@ const getContestParticipantsRankings = async (contestSlug, dataRegion) => {
13
14
let pages = Math . ceil ( resp . user_num / 25 ) ;
14
15
let all_rankings = [ ] ;
15
16
let failed = [ ] ;
16
- let lastPage = Math . MAX_SAFE_INTEGER ;
17
+ let lastPage = Number . MAX_SAFE_INTEGER ;
17
18
const fetchPageRankings = async (
18
19
pageNo ,
19
20
retries ,
@@ -47,6 +48,7 @@ const getContestParticipantsRankings = async (contestSlug, dataRegion) => {
47
48
`Fetched rankings (${ contestSlug } page: ${ pageNo } )` ,
48
49
) ;
49
50
} catch ( err ) {
51
+ console . error ( err ) ;
50
52
if ( retries > 0 ) {
51
53
await fetchPageRankings ( pageNo , retries - 1 ) ;
52
54
} else if ( throwError ) {
@@ -58,14 +60,13 @@ const getContestParticipantsRankings = async (contestSlug, dataRegion) => {
58
60
} ;
59
61
const limit = 5 ;
60
62
const maxRetries = 5 ;
61
- for ( let i = 0 ; i < pages ; i += limit ) {
63
+ for ( let i = 0 ; i < pages && i < lastPage ; i += limit ) {
62
64
let promises = [ ] ;
63
- for ( let j = 0 ; j < limit && i + j < pages ; j ++ ) {
65
+ for ( let j = 0 ; j < limit && i + j < pages && i + j < lastPage ; j ++ ) {
64
66
promises . push ( fetchPageRankings ( i + j + 1 , maxRetries ) ) ;
65
67
}
66
68
await Promise . all ( promises ) ;
67
69
}
68
-
69
70
for ( let i = 0 ; i < failed . length ; i ++ ) {
70
71
await fetchPageRankings ( failed [ i ] , maxRetries , true ) ;
71
72
}
@@ -88,7 +89,7 @@ const mergeRankings = (us_rankings, cn_rankings) => {
88
89
} else if ( j == totalCnRankings ) {
89
90
currRanking = us_rankings [ i ++ ] ;
90
91
} else {
91
- if ( us_rankings [ i ] . score > cn_rankings [ j ] . score || ( us_rankings [ i ] . score === cn_rankings [ i ] . score && us_rankings [ i ] . finish_time <= cn_rankings [ j ] . finish_time ) ) {
92
+ if ( us_rankings [ i ] . score > cn_rankings [ j ] . score || ( us_rankings [ i ] . score === cn_rankings [ j ] . score && us_rankings [ i ] . finish_time <= cn_rankings [ j ] . finish_time ) ) {
92
93
currRanking = us_rankings [ i ++ ] ;
93
94
} else {
94
95
currRanking = cn_rankings [ j ++ ] ;
@@ -112,8 +113,8 @@ const fetchContestRankings = async function (contestSlug) {
112
113
contest . rankings = [ ] ;
113
114
console . log ( `fetching ${ contestSlug } ...` ) ;
114
115
115
- us_rankings = await getContestParticipantsRankings ( contestSlug , "US" ) ;
116
- cn_rankings = await getContestParticipantsRankings ( contestSlug , "CN" ) ;
116
+ us_rankings = await getContestParticipantsRankings ( contest , "US" ) ;
117
+ cn_rankings = await getContestParticipantsRankings ( contest , "CN" ) ;
117
118
118
119
// Merged rankings sorted by rank
119
120
all_rankings = mergeRankings ( us_rankings , cn_rankings ) . map ( ( ranking ) => {
0 commit comments