feat: race leaderboards #1314

Merged
Sainan merged 9 commits from leaderboard into main 2025-03-25 03:25:58 -07:00
Showing only changes of commit 02b443712a - Show all commits

View File

@ -34,23 +34,26 @@ export const getLeaderboard = async (
guildId?: string,
pivotId?: string
): Promise<ILeaderboardEntryClient[]> => {
const filter: { leaderboard: string; guildId?: string } = { leaderboard };
if (guildId) {
filter.guildId = guildId;
}
let entries: TLeaderboardEntryDocument[];
let r: number;
if (pivotId) {
const pivotDoc = await Leaderboard.findOne({ leaderboard, guildId, ownerId: pivotId });
const pivotDoc = await Leaderboard.findOne({ ...filter, ownerId: pivotId });
if (!pivotDoc) {
return [];
}
const beforeDocs = await Leaderboard.find({
leaderboard,
guildId,
...filter,
score: { $gt: pivotDoc.score }
})
.sort({ score: 1 })
.limit(before);
const afterDocs = await Leaderboard.find({
leaderboard,
guildId,
...filter,
score: { $lt: pivotDoc.score }
})
.sort({ score: -1 })
@ -58,12 +61,11 @@ export const getLeaderboard = async (
entries = [...beforeDocs.reverse(), pivotDoc, ...afterDocs];
r =
(await Leaderboard.countDocuments({
leaderboard,
guildId,
...filter,
score: { $gt: pivotDoc.score }
})) - beforeDocs.length;
} else {
entries = await Leaderboard.find({ leaderboard, guildId })
entries = await Leaderboard.find(filter)
.sort({ score: -1 })
.skip(before)
.limit(after - before);