feat: implement real-time leaderboard system with XP and voice channel tracking features
This commit is contained in:
@@ -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,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user