@@ -3,7 +3,8 @@ const Contest = require("../models/contest");
33const { IsLatestContest } = require ( "../helpers" ) ;
44const { BASE_CN_URL , BASE_URL } = require ( "./users" ) ;
55
6- const getContestParticipantsRankings = async ( contestSlug , dataRegion ) => {
6+ const getContestParticipantsRankings = async ( contest , dataRegion ) => {
7+ const contestSlug = contest . _id ;
78 console . log ( `Fetching participant's rankings for ${ dataRegion } region...` ) ;
89 const baseUrl = dataRegion === "CN" ? BASE_CN_URL : BASE_URL ;
910 let resp = await fetch (
@@ -13,7 +14,7 @@ const getContestParticipantsRankings = async (contestSlug, dataRegion) => {
1314 let pages = Math . ceil ( resp . user_num / 25 ) ;
1415 let all_rankings = [ ] ;
1516 let failed = [ ] ;
16- let lastPage = Math . MAX_SAFE_INTEGER ;
17+ let lastPage = Number . MAX_SAFE_INTEGER ;
1718 const fetchPageRankings = async (
1819 pageNo ,
1920 retries ,
@@ -47,6 +48,7 @@ const getContestParticipantsRankings = async (contestSlug, dataRegion) => {
4748 `Fetched rankings (${ contestSlug } page: ${ pageNo } )` ,
4849 ) ;
4950 } catch ( err ) {
51+ console . error ( err ) ;
5052 if ( retries > 0 ) {
5153 await fetchPageRankings ( pageNo , retries - 1 ) ;
5254 } else if ( throwError ) {
@@ -58,14 +60,13 @@ const getContestParticipantsRankings = async (contestSlug, dataRegion) => {
5860 } ;
5961 const limit = 5 ;
6062 const maxRetries = 5 ;
61- for ( let i = 0 ; i < pages ; i += limit ) {
63+ for ( let i = 0 ; i < pages && i < lastPage ; i += limit ) {
6264 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 ++ ) {
6466 promises . push ( fetchPageRankings ( i + j + 1 , maxRetries ) ) ;
6567 }
6668 await Promise . all ( promises ) ;
6769 }
68-
6970 for ( let i = 0 ; i < failed . length ; i ++ ) {
7071 await fetchPageRankings ( failed [ i ] , maxRetries , true ) ;
7172 }
@@ -88,7 +89,7 @@ const mergeRankings = (us_rankings, cn_rankings) => {
8889 } else if ( j == totalCnRankings ) {
8990 currRanking = us_rankings [ i ++ ] ;
9091 } 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 ) ) {
9293 currRanking = us_rankings [ i ++ ] ;
9394 } else {
9495 currRanking = cn_rankings [ j ++ ] ;
@@ -112,8 +113,8 @@ const fetchContestRankings = async function (contestSlug) {
112113 contest . rankings = [ ] ;
113114 console . log ( `fetching ${ contestSlug } ...` ) ;
114115
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" ) ;
117118
118119 // Merged rankings sorted by rank
119120 all_rankings = mergeRankings ( us_rankings , cn_rankings ) . map ( ( ranking ) => {
0 commit comments