import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType, Ref } from '@typegoose/typegoose'; class TrainBox { } class TrainScript { @prop({ required: true }) hid: number; @prop({ required: true }) progress: number; @prop({ required: true }) time: number; @prop({ required: true, default: [], type: TrainBox}) trainBoxs: Array; } class Rank { @prop({ required: true }) roleId: string; @prop({ required: true }) score: number; } class Report { @prop({ required: true }) roleId: string; @prop({ required: true }) trainId: number;//挑战的试炼关 @prop({ required: true }) hid: number;//据点 @prop({ required: true }) score: number; @prop({ required: true }) time: number; @prop({ required: true }) isSuccessed: boolean; @prop({ required: true }) type: number;//1表示普通战报, 2表示系统战报即:被成功压制 } @index({guildCode:1, trainId:1}) export default class GuildTrain extends BaseModel { @prop({ required: true }) guildCode: string; @prop({ required: true }) trainId: number; @prop({ required: true }) isComplete: boolean; @prop({ required: true, default: [], type: TrainScript}) trainScripts: Array; @prop({ required: true, default: [], type: Rank }) ranks: Array; @prop({ required: true, default: [], type: Report }) reports: Array; @prop({ required: true, default: false}) locked: boolean; public static async findGuildTrain(guildCode: string, locked = false, lean = true) { const guildTrain: GuildTrainType[] = await GuildTrainModel.findOne({ guildCode, locked }).lean(lean); return guildTrain; } public static async findTrainByTrainIdNotLock(guildCode: string, trainId: number, locked = false, lean = true) { const guildTrain: GuildTrainType = await GuildTrainModel.findOne({ guildCode, trainId, locked }).lean(lean); return guildTrain; } public static async updateGuildTrain(guildCode: string, trainId: number, update: GuildTrainTypeParam, lean = true) { const guildTrain: GuildTrainType = await GuildTrainModel.findOneAndUpdate({ guildCode, trainId}, { $set: update }).lean(lean); return guildTrain; } public static async updateGuildTrainProgress(guildCode: string, trainId: number, hid:number, progress: number, ranks:Array, reports: Array, isComplete: boolean,lean = true) { const guildTrain: GuildTrainType = await GuildTrainModel.findOneAndUpdate({ guildCode, trainId, 'trainScripts.hid':hid}, { $set: {'trainScripts.$.progress': progress, ranks, reports, isComplete} }).lean(lean); return guildTrain; } public static async openGuildTrain() { // const bossScript: BossScriptType = await BossScriptModel.findOneAndUpdate({ guildCode },{ranks:[], time: nowSeconds(), bossHp, warId, $inc: { recordNum: 1 }}, {new: true, upsert: true}).lean(lean); } } export const GuildTrainModel = getModelForClass(GuildTrain); export interface GuildTrainType extends Pick, keyof GuildTrain> { }; export type GuildTrainTypeParam = Partial; // 将所有字段变成可选项