ensure that leaderboard-accountId pair is unique
Some checks failed
Build / build (18) (push) Failing after 1m16s
Build / build (18) (pull_request) Failing after 46s
Build / build (20) (pull_request) Failing after 1m12s
Build / build (20) (push) Failing after 44s
Build / build (22) (push) Failing after 1m12s
Build / build (22) (pull_request) Failing after 1m18s

This commit is contained in:
Sainan 2025-03-24 14:24:31 +01:00
parent ecb0fd91e5
commit f74a673b27
2 changed files with 3 additions and 2 deletions

View File

@ -13,6 +13,7 @@ const leaderboardEntrySchema = new Schema<ILeaderboardEntryDatabase>(
); );
leaderboardEntrySchema.index({ leaderboard: 1 }); leaderboardEntrySchema.index({ leaderboard: 1 });
leaderboardEntrySchema.index({ leaderboard: 1, accountId: 1 }, { unique: true });
leaderboardEntrySchema.index({ expiry: 1 }, { expireAfterSeconds: 0 }); // With this, MongoDB will automatically delete expired entries. leaderboardEntrySchema.index({ expiry: 1 }, { expireAfterSeconds: 0 }); // With this, MongoDB will automatically delete expired entries.
export const Leaderboard = model<ILeaderboardEntryDatabase>("Leaderboard", leaderboardEntrySchema); export const Leaderboard = model<ILeaderboardEntryDatabase>("Leaderboard", leaderboardEntrySchema);

View File

@ -20,8 +20,8 @@ export const submitLeaderboardScore = async (
expiry = new Date(weekEnd); expiry = new Date(weekEnd);
} }
await Leaderboard.findOneAndUpdate( await Leaderboard.findOneAndUpdate(
{ leaderboard, displayName }, { leaderboard, accountId },
{ $max: { score }, $set: { accountId, expiry } }, { $max: { score }, $set: { displayName, expiry } },
{ upsert: true } { upsert: true }
); );
}; };