91 lines
3.3 KiB
TypeScript
91 lines
3.3 KiB
TypeScript
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<TrainBox>;
|
||
}
|
||
|
||
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<TrainScript>;
|
||
@prop({ required: true, default: [], type: Rank })
|
||
ranks: Array<Rank>;
|
||
@prop({ required: true, default: [], type: Report })
|
||
reports: Array<Report>;
|
||
@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<Rank>, reports: Array<Report>, 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<DocumentType<GuildTrain>, keyof GuildTrain> { };
|
||
export type GuildTrainTypeParam = Partial<GuildTrainType>; // 将所有字段变成可选项
|