Compare commits

..

2 Commits

Author SHA1 Message Date
537999e462 ensure that leaderboard-displayName pair is unique
Some checks failed
Build / build (18) (push) Failing after 45s
Build / build (20) (push) Failing after 1m12s
Build / build (22) (push) Failing after 43s
Build / build (20) (pull_request) Failing after 1m11s
Build / build (22) (pull_request) Failing after 43s
Build / build (18) (pull_request) Failing after 1m26s
2025-03-24 14:25:58 +01:00
901f8e377b fix _id field in response 2025-03-24 14:25:52 +01:00
2 changed files with 4 additions and 4 deletions

View File

@ -4,8 +4,8 @@ import { ILeaderboardEntryDatabase } from "../types/leaderboardTypes";
const leaderboardEntrySchema = new Schema<ILeaderboardEntryDatabase>(
{
leaderboard: { type: String, required: true },
accountId: { type: Schema.Types.ObjectId, required: true },
displayName: { type: String, required: true },
accountId: { type: Schema.Types.ObjectId, required: true },
score: { type: Number, required: true },
expiry: { type: Date, required: true }
},
@ -13,7 +13,7 @@ const leaderboardEntrySchema = new Schema<ILeaderboardEntryDatabase>(
);
leaderboardEntrySchema.index({ leaderboard: 1 });
leaderboardEntrySchema.index({ leaderboard: 1, accountId: 1 }, { unique: true });
leaderboardEntrySchema.index({ leaderboard: 1, displayName: 1 }, { unique: true });
leaderboardEntrySchema.index({ expiry: 1 }, { expireAfterSeconds: 0 }); // With this, MongoDB will automatically delete expired entries.
export const Leaderboard = model<ILeaderboardEntryDatabase>("Leaderboard", leaderboardEntrySchema);

View File

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