SpaceNinjaServer/src/models/leaderboardModel.ts
Sainan 895b9381ca
All checks were successful
Build / build (22) (push) Successful in 38s
Build / build (18) (push) Successful in 1m16s
Build Docker image / docker (push) Successful in 30s
Build / build (20) (push) Successful in 1m30s
chore: update eslint (#1373)
Reviewed-on: #1373
Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com>
Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
2025-03-29 15:20:54 -07:00

28 lines
1.2 KiB
TypeScript

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,
expiry: { type: Date, required: true },
guildTier: Number
},
{ 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);
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
export type TLeaderboardEntryDocument = Document<unknown, {}, ILeaderboardEntryDatabase> & {
_id: Types.ObjectId;
__v: number;
} & ILeaderboardEntryDatabase;