63 lines
2.4 KiB
TypeScript
63 lines
2.4 KiB
TypeScript
import BaseModel from './BaseModel';
|
|
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
|
import { getZeroPoint } from '../pubUtils/timeUtil';
|
|
|
|
@index({ day: 1, groupId: 1, serverType: 1, score: 1 })
|
|
@index({ roleId: 1 })
|
|
export default class GVGVestigeSumRank extends BaseModel {
|
|
|
|
@prop({ required: true })
|
|
day: number; // 每天5点
|
|
|
|
@prop({ required: true })
|
|
roleId: string; // 玩家id
|
|
|
|
@prop({ required: true })
|
|
leagueCode: string; // 联军id
|
|
|
|
@prop({ required: true })
|
|
groupId: number; // 战区id
|
|
|
|
@prop({ required: true })
|
|
serverType: number; // 1-单服 2-跨服
|
|
|
|
@prop({ required: true })
|
|
score: number; // 得分
|
|
|
|
public static async incScore(roleId: string, leagueCode: string, groupId: number, serverType: number, inc: number) {
|
|
let today = getZeroPoint();
|
|
let result: GVGVestigeSumRankType = await GVGVestigeSumRankModel.findOneAndUpdate({
|
|
day: today, groupId, serverType, roleId, leagueCode
|
|
}, { $inc: { score: inc } }, { new: true, upsert: true }).lean();
|
|
return result;
|
|
}
|
|
|
|
// 排行榜
|
|
public static async findRankByGroupId(): Promise<{ _id: { groupId: number, serverType: number }, arr: { roleId: string, score: number, updatedAt: Date }[], roleIds: string[] }[]> {
|
|
let today = getZeroPoint();
|
|
let ranks = await GVGVestigeSumRankModel.aggregate([
|
|
{ $match: { day: today } },
|
|
{ $group: {
|
|
_id: { groupId: "$groupId", serverType: "$serverType" },
|
|
arr: { $push: { roleId: "$roleId", score: "$score", updatedAt: "$updatedAt", leagueCode: "$leagueCode" } }, roleIds: { $addToSet: "$roleId" }
|
|
}},
|
|
]);
|
|
return ranks;
|
|
}
|
|
|
|
// 用于快照玩家的得分
|
|
public static async findAllScores() {
|
|
let today = getZeroPoint();
|
|
let ranks: GVGVestigeSumRankType[] = await GVGVestigeSumRankModel.aggregate([
|
|
{ $match: { day: today } },
|
|
{ $project: { roleId: 1, score: 1, leagueCode: 1 } }
|
|
]);
|
|
return ranks;
|
|
}
|
|
}
|
|
|
|
export const GVGVestigeSumRankModel = getModelForClass(GVGVestigeSumRank);
|
|
|
|
export interface GVGVestigeSumRankType extends Pick<DocumentType<GVGVestigeSumRank>, keyof GVGVestigeSumRank> {};
|
|
export type GVGVestigeSumRankUpdate = Partial<GVGVestigeSumRankType>; // 将所有字段变成可选项
|