import BaseModel from './BaseModel'; import { index, getModelForClass, prop } from '@typegoose/typegoose'; /** * 战斗记录接口 */ @index({ roleId: 1, battleId: 1 }) @index({ battleCode: 1 }) export default class BattleRecord extends BaseModel { @prop({ required: true }) roleId: string; // 角色 id @prop({ required: true }) roleName: string; // 角色名称 @prop({ required: true }) battleCode: string; // 关卡记录唯一标识 @prop({ required: true }) battleId: number; // 关卡 id @prop({ required: true }) warName: string; // 关卡 名 @prop({ required: true }) warType: number; // 关卡 类型 @prop({ required: true, default: 0 }) status: number; // 关卡状态 0-挑战中 1-挑战成功 2-挑战失败 @prop({ required: true, default: 0 }) star: number; // 关卡状态 0-挑战中 1-挑战成功 2-挑战失败 @prop({ required: true }) record: { // 使用的武将等记录 heroes: Array ; // 武将id }; public static async getBattleRecordByCode(battleCode: string, lean = true) { const result = await BattleRecordModel.findOne({ battleCode }).lean(lean); return result; } public static async getBattleRecordByIdAndStatus(roleId: string, battleId: number, status: number, lean = true) { const result = await BattleRecordModel.findOne({ roleId, battleId, status }).lean(lean); return result; } public static async getBattleRecordByIdAndStar(roleId: string, battleId: number, star: number, lean = true) { const result = await BattleRecordModel.findOne({ roleId, battleId, star: {$lte: star} }).lean(lean); return result; } public static async updateBattleRecordByCode( battleCode: string, params: object, lean = true) { const result = await BattleRecordModel.findOneAndUpdate({ battleCode }, params, {new: true, upsert: true}).lean(lean); return result; } public static async getBattleList( roleId: string, warType: number, lean = true) { const searchObj = { roleId, warType, status: 1 }; const count = await BattleRecordModel.countDocuments(searchObj); console.log(roleId, warType, count); const limit = 1000; const page = Math.ceil(count/limit); let result = new Array(); for(let i = 0; i < page; i++) { const battleRecords = await BattleRecordModel.find(searchObj) .select('battleId battleCode warType star status') .limit(1000) .skip(1000 * i) .sort({battleId: 1, star: -1, createdAt: -1}) .lean(lean); for(let battleRecord of battleRecords) { result.push(battleRecord); } } return result; } } export const BattleRecordModel = getModelForClass(BattleRecord);