@@ -7,14 +7,15 @@ import * as WeeklyXpLeaderboard from "../../services/weekly-xp-leaderboard";
77import {
88 GetDailyLeaderboardQuery ,
99 GetDailyLeaderboardRankQuery ,
10+ GetDailyLeaderboardResponse ,
1011 GetLeaderboardDailyRankResponse ,
1112 GetLeaderboardQuery ,
13+ GetLeaderboardRankQuery ,
1214 GetLeaderboardRankResponse ,
1315 GetLeaderboardResponse as GetLeaderboardResponse ,
1416 GetWeeklyXpLeaderboardQuery ,
1517 GetWeeklyXpLeaderboardRankResponse ,
1618 GetWeeklyXpLeaderboardResponse ,
17- LanguageAndModeQuery ,
1819} from "@monkeytype/contracts/leaderboards" ;
1920import { Configuration } from "@monkeytype/contracts/schemas/configuration" ;
2021import {
@@ -27,14 +28,14 @@ import { MonkeyRequest } from "../types";
2728export async function getLeaderboard (
2829 req : MonkeyRequest < GetLeaderboardQuery >
2930) : Promise < GetLeaderboardResponse > {
30- const { language, mode, mode2, skip = 0 , limit = 50 } = req . query ;
31+ const { language, mode, mode2, page , pageSize } = req . query ;
3132
3233 const leaderboard = await LeaderboardsDAL . get (
3334 mode ,
3435 mode2 ,
3536 language ,
36- skip ,
37- limit
37+ page ,
38+ pageSize
3839 ) ;
3940
4041 if ( leaderboard === false ) {
@@ -44,13 +45,18 @@ export async function getLeaderboard(
4445 ) ;
4546 }
4647
48+ const count = await LeaderboardsDAL . getCount ( mode , mode2 , language ) ;
4749 const normalizedLeaderboard = leaderboard . map ( ( it ) => _ . omit ( it , [ "_id" ] ) ) ;
4850
49- return new MonkeyResponse ( "Leaderboard retrieved" , normalizedLeaderboard ) ;
51+ return new MonkeyResponse ( "Leaderboard retrieved" , {
52+ count,
53+ entries : normalizedLeaderboard ,
54+ pageSize,
55+ } ) ;
5056}
5157
5258export async function getRankFromLeaderboard (
53- req : MonkeyRequest < LanguageAndModeQuery >
59+ req : MonkeyRequest < GetLeaderboardRankQuery >
5460) : Promise < GetLeaderboardRankResponse > {
5561 const { language, mode, mode2 } = req . query ;
5662 const { uid } = req . ctx . decodedToken ;
@@ -91,25 +97,33 @@ function getDailyLeaderboardWithError(
9197
9298export async function getDailyLeaderboard (
9399 req : MonkeyRequest < GetDailyLeaderboardQuery >
94- ) : Promise < GetLeaderboardResponse > {
95- const { skip = 0 , limit = 50 } = req . query ;
100+ ) : Promise < GetDailyLeaderboardResponse > {
101+ const { page , pageSize } = req . query ;
96102
97103 const dailyLeaderboard = getDailyLeaderboardWithError (
98104 req . query ,
99105 req . ctx . configuration . dailyLeaderboards
100106 ) ;
101107
102- const minRank = skip ;
103- const maxRank = minRank + limit - 1 ;
104-
105- const topResults = await dailyLeaderboard . getResults (
106- minRank ,
107- maxRank ,
108+ const results = await dailyLeaderboard . getResults (
109+ page ,
110+ pageSize ,
108111 req . ctx . configuration . dailyLeaderboards ,
109112 req . ctx . configuration . users . premium . enabled
110113 ) ;
111114
112- return new MonkeyResponse ( "Daily leaderboard retrieved" , topResults ) ;
115+ const minWpm = await dailyLeaderboard . getMinWpm (
116+ req . ctx . configuration . dailyLeaderboards
117+ ) ;
118+
119+ const count = await dailyLeaderboard . getCount ( ) ;
120+
121+ return new MonkeyResponse ( "Daily leaderboard retrieved" , {
122+ entries : results ,
123+ minWpm,
124+ count,
125+ pageSize,
126+ } ) ;
113127}
114128
115129export async function getDailyLeaderboardRank (
@@ -131,8 +145,8 @@ export async function getDailyLeaderboardRank(
131145}
132146
133147function getWeeklyXpLeaderboardWithError (
134- { weeksBefore } : GetWeeklyXpLeaderboardQuery ,
135- config : Configuration [ "leaderboards" ] [ "weeklyXp" ]
148+ config : Configuration [ "leaderboards" ] [ "weeklyXp" ] ,
149+ weeksBefore ?: number
136150) : WeeklyXpLeaderboard . WeeklyXpLeaderboard {
137151 const customTimestamp =
138152 weeksBefore === undefined
@@ -150,22 +164,26 @@ function getWeeklyXpLeaderboardWithError(
150164export async function getWeeklyXpLeaderboardResults (
151165 req : MonkeyRequest < GetWeeklyXpLeaderboardQuery >
152166) : Promise < GetWeeklyXpLeaderboardResponse > {
153- const { skip = 0 , limit = 50 } = req . query ;
154-
155- const minRank = skip ;
156- const maxRank = minRank + limit - 1 ;
167+ const { page, pageSize, weeksBefore } = req . query ;
157168
158169 const weeklyXpLeaderboard = getWeeklyXpLeaderboardWithError (
159- req . query ,
160- req . ctx . configuration . leaderboards . weeklyXp
170+ req . ctx . configuration . leaderboards . weeklyXp ,
171+ weeksBefore
161172 ) ;
162173 const results = await weeklyXpLeaderboard . getResults (
163- minRank ,
164- maxRank ,
165- req . ctx . configuration . leaderboards . weeklyXp
174+ page ,
175+ pageSize ,
176+ req . ctx . configuration . leaderboards . weeklyXp ,
177+ req . ctx . configuration . users . premium . enabled
166178 ) ;
167179
168- return new MonkeyResponse ( "Weekly xp leaderboard retrieved" , results ) ;
180+ const count = await weeklyXpLeaderboard . getCount ( ) ;
181+
182+ return new MonkeyResponse ( "Weekly xp leaderboard retrieved" , {
183+ entries : results ,
184+ count,
185+ pageSize,
186+ } ) ;
169187}
170188
171189export async function getWeeklyXpLeaderboardRank (
@@ -174,7 +192,6 @@ export async function getWeeklyXpLeaderboardRank(
174192 const { uid } = req . ctx . decodedToken ;
175193
176194 const weeklyXpLeaderboard = getWeeklyXpLeaderboardWithError (
177- { } ,
178195 req . ctx . configuration . leaderboards . weeklyXp
179196 ) ;
180197 const rankEntry = await weeklyXpLeaderboard . getRank (
0 commit comments