2025-03-25 03:25:58 -07:00
|
|
|
import { Document, model, Schema, Types } from "mongoose";
|
|
|
|
import { ILeaderboardEntryDatabase } from "../types/leaderboardTypes";
|
|
|
|
|
|
|
|
const leaderboardEntrySchema = new Schema<ILeaderboardEntryDatabase>(
|
|
|
|
{
|
|
|
|
leaderboard: { type: String, required: true },
|
|
|
|
ownerId: { type: Schema.Types.ObjectId, required: true },
|
|
|
|
displayName: { type: String, required: true },
|
|
|
|
score: { type: Number, required: true },
|
|
|
|
guildId: Schema.Types.ObjectId,
|
2025-03-26 14:21:22 -07:00
|
|
|
expiry: { type: Date, required: true },
|
|
|
|
guildTier: Number
|
2025-03-25 03:25:58 -07:00
|
|
|
},
|
|
|
|
{ id: false }
|
|
|
|
);
|
|
|
|
|
|
|
|
leaderboardEntrySchema.index({ leaderboard: 1 });
|
|
|
|
leaderboardEntrySchema.index({ leaderboard: 1, ownerId: 1 }, { unique: true });
|
|
|
|
leaderboardEntrySchema.index({ expiry: 1 }, { expireAfterSeconds: 0 }); // With this, MongoDB will automatically delete expired entries.
|
|
|
|
|
|
|
|
export const Leaderboard = model<ILeaderboardEntryDatabase>("Leaderboard", leaderboardEntrySchema);
|
|
|
|
|
2025-03-29 15:20:54 -07:00
|
|
|
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
2025-03-25 03:25:58 -07:00
|
|
|
export type TLeaderboardEntryDocument = Document<unknown, {}, ILeaderboardEntryDatabase> & {
|
|
|
|
_id: Types.ObjectId;
|
|
|
|
__v: number;
|
|
|
|
} & ILeaderboardEntryDatabase;
|