✨ feat(gvg): 玩家驻扎排行榜

This commit is contained in:
luying
2023-02-17 10:58:45 +08:00
parent 92191cbcca
commit fc2a86ad81
16 changed files with 190 additions and 61 deletions
+26 -9
View File
@@ -14,7 +14,7 @@ export class Lineup {
ce: number; // 战力
}
@index({ day: 1, groupId: 1, vestigeId: 1, rank: 1 })
@index({ day: 1, groupId: 1, serverType: 1, vestigeId: 1, rank: 1 })
@index({ roleId: 1 })
export default class GVGVestigeRank extends BaseModel {
@@ -31,10 +31,10 @@ export default class GVGVestigeRank extends BaseModel {
vestigeId: number; // 遗迹id
@prop({ required: true })
roleId: string; // 玩家
serverType: number; // 1-单服 2-跨服
@prop({ ref: 'Role', type: mongoose.Schema.Types.ObjectId })
role: Ref<Role>;
@prop({ required: true })
roleId: string; // 玩家
@prop({ required: true, default: 0 })
rank: number; // 排名
@@ -75,10 +75,10 @@ export default class GVGVestigeRank extends BaseModel {
return result;
}
public static async initRank(configId: number, vestigeId: number, groupId: number, role: RoleType, oppRanks: number[]) {
public static async initRank(configId: number, vestigeId: number, groupId: number, serverType: number, role: RoleType, oppRanks: number[]) {
let today = getZeroPoint();
let doc = new GVGVestigeRankModel();
let update = Object.assign(doc.toJSON(), { role: role._id, configId, groupId, oppRanks });
let update = Object.assign(doc.toJSON(), { role: role._id, configId, groupId, serverType, oppRanks });
let result: GVGVestigeRankType = await GVGVestigeRankModel.findOneAndUpdate({ day: today, vestigeId, roleId: role.roleId }, { $setOnInsert: update }, { new: true, upsert: true }).lean();
return result;
}
@@ -89,10 +89,9 @@ export default class GVGVestigeRank extends BaseModel {
return result;
}
public static async findByRanks(groupId: number, vestigeId: number, ranks: number[]) {
public static async findByRanks(groupId: number, serverType: number, vestigeId: number, ranks: number[]) {
let today = getZeroPoint();
let result: GVGVestigeRankType[] = await GVGVestigeRankModel.find({ day: today, vestigeId, groupId, rank: { $in: ranks } })
.populate('role', 'roleId roleName head frame spine heads frames spines title lv guildName serverId updatedAt')
let result: GVGVestigeRankType[] = await GVGVestigeRankModel.find({ day: today, vestigeId, groupId, serverType, rank: { $in: ranks } })
.lean();
return result;
}
@@ -142,6 +141,24 @@ export default class GVGVestigeRank extends BaseModel {
return result;
}
public static async findRank(): Promise<{ _id: { groupId: number, vestigeId: number, serverType: number }, arr: { roleId: string, rank: number }[], roleIds: string[] }[]> {
let today = getZeroPoint();
let ranks = await GVGVestigeRankModel.aggregate([
{ $match: { day: today } },
{ $group: {
_id: { groupId: "$groupId", vestigeId: "$vestigeId", serverType: "$serverType" },
arr: { $push: { roleId: "$roleId", rank: "$rank" } }, roleIds: { $addToSet: "$roleId" }
}},
]);
return ranks;
}
public static async findRankByVestige(groupId: number, serverType: number, vestigeId: number) {
let today = getZeroPoint();
let result: GVGVestigeRankType[] = await GVGVestigeRankModel.find({ day: today, vestigeId, groupId, serverType }).sort({ rank: 1 }).select('roleId rank lineup').lean();
return result;
}
}
export const GVGVestigeRankModel = getModelForClass(GVGVestigeRank);