diff --git a/src/models/leaderboardModel.ts b/src/models/leaderboardModel.ts index 6ff6d53a..7cd9d1e7 100644 --- a/src/models/leaderboardModel.ts +++ b/src/models/leaderboardModel.ts @@ -13,6 +13,7 @@ const leaderboardEntrySchema = new Schema( ); 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. export const Leaderboard = model("Leaderboard", leaderboardEntrySchema); diff --git a/src/services/leaderboardService.ts b/src/services/leaderboardService.ts index a8d933f7..72110b37 100644 --- a/src/services/leaderboardService.ts +++ b/src/services/leaderboardService.ts @@ -20,8 +20,8 @@ export const submitLeaderboardScore = async ( expiry = new Date(weekEnd); } await Leaderboard.findOneAndUpdate( - { leaderboard, displayName }, - { $max: { score }, $set: { accountId, expiry } }, + { leaderboard, accountId }, + { $max: { score }, $set: { displayName, expiry } }, { upsert: true } ); };