feat: implement real-time leaderboard system with XP and voice channel tracking features

This commit is contained in:
2026-07-25 21:26:53 +07:00 Unverified
parent bb6740fcee
commit 3f4b670170
18 changed files with 531 additions and 178 deletions
+8 -3
View File
@@ -51,7 +51,10 @@ function getLeaderboardDatabase() {
return drizzle(globalForLeaderboard.erikaLeaderboardReadOnlyClient);
}
export async function getXpLeaderboardPage(requestedPage: number) {
export async function getXpLeaderboardPage(
requestedPage: number,
searchQuery?: string,
) {
const rows = await getLeaderboardDatabase()
.select({
userId: userLevels.userId,
@@ -63,20 +66,21 @@ export async function getXpLeaderboardPage(requestedPage: number) {
.from(userLevels)
.where(gte(userLevels.level, 1));
return buildXpLeaderboard(rows, requestedPage);
return buildXpLeaderboard(rows, requestedPage, searchQuery);
}
export async function getVoiceLeaderboardPage(
currentChannelIds: string[],
requestedPage: number,
selectedChannelId?: string,
searchQuery?: string,
) {
const scopedChannelIds = selectedChannelId
? [selectedChannelId]
: currentChannelIds;
if (scopedChannelIds.length === 0) {
return buildVoiceLeaderboard([], currentChannelIds, requestedPage, selectedChannelId);
return buildVoiceLeaderboard([], currentChannelIds, requestedPage, selectedChannelId, searchQuery);
}
const rows: VoiceSourceRow[] = await getLeaderboardDatabase()
@@ -101,6 +105,7 @@ export async function getVoiceLeaderboardPage(
currentChannelIds,
requestedPage,
selectedChannelId,
searchQuery,
);
}