From 7ce4b0058ec8a2b4fc724278ec842ed2bb34c5b4 Mon Sep 17 00:00:00 2001 From: Azalea <22280294+hykilpikonna@users.noreply.github.com> Date: Wed, 5 Mar 2025 00:48:08 -0500 Subject: [PATCH] [+] Paged ranking --- .../java/icu/samnyan/aqua/net/games/GameApiController.kt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/icu/samnyan/aqua/net/games/GameApiController.kt b/src/main/java/icu/samnyan/aqua/net/games/GameApiController.kt index d55c1d6e..b2404404 100644 --- a/src/main/java/icu/samnyan/aqua/net/games/GameApiController.kt +++ b/src/main/java/icu/samnyan/aqua/net/games/GameApiController.kt @@ -44,8 +44,10 @@ abstract class GameApiController(val name: String, userDataClass: private var rankingCacheLock = ReentrantLock() // Sorted index List = Rank private var rankingSortedIndex: List = emptyList() + private val pageSize = 100 + @API("ranking") - fun ranking(@RP token: String?): List { + fun ranking(@RP token: String?, @RP page: Int?): List { val time = millis() // Check cache validity @@ -59,10 +61,11 @@ abstract class GameApiController(val name: String, userDataClass: // Read from cache if we just computed it less than duration ago // Shadow-ban: Do not show banned cards in the ranking except for the user who owns the card - // TODO: pagination - return rankingCache.filter { !it.l || it.r.username == reqUser?.username } + val v = rankingCache.filter { !it.l || it.r.username == reqUser?.username } .mapIndexed { i, it -> it.r.apply { rank = i + 1 } } .also { logger.info("Ranking returned in ${millis() - time}ms") } + + return page?.let { v.drop((it - 1) * pageSize).take(pageSize) } ?: v } @PostConstruct