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