试炼
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType, Ref } from '@typegoose/typegoose';
|
||||
import { nowSeconds } from '../pubUtils/timeUtil';
|
||||
class Reward {
|
||||
@prop({ required: true })
|
||||
id: number;
|
||||
@@ -16,15 +17,15 @@ class TrainBox {
|
||||
index: number;
|
||||
}
|
||||
|
||||
class TrainScript {
|
||||
export class TrainInstance {
|
||||
@prop({ required: true })
|
||||
hid: number;
|
||||
@prop({ required: true })
|
||||
progress: number;
|
||||
@prop({ required: true })
|
||||
time: number;
|
||||
@prop({ required: true, default: [], type: TrainBox})
|
||||
trainBoxs: Array<TrainBox>;
|
||||
endTime: number;
|
||||
@prop({ required: true, default: [], type: TrainBox, _id: false })
|
||||
trainBoxs: TrainBox[];
|
||||
}
|
||||
|
||||
class Rank {
|
||||
@@ -58,12 +59,12 @@ export default class GuildTrain extends BaseModel {
|
||||
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: [], type: TrainInstance, _id: false })
|
||||
trainInstances: TrainInstance[];
|
||||
@prop({ required: true, default: [], type: Rank, _id: false })
|
||||
ranks: Rank[];
|
||||
@prop({ required: true, default: [], type: Report, _id: false })
|
||||
reports: Report[];
|
||||
@prop({ required: true, default: false})
|
||||
locked: boolean;
|
||||
|
||||
@@ -83,30 +84,30 @@ export default class GuildTrain extends BaseModel {
|
||||
}
|
||||
|
||||
public static async updateGuildTrain(guildCode: string, trainId: number, update: GuildTrainTypeParam, lean = true) {
|
||||
const guildTrain: GuildTrainType = await GuildTrainModel.findOneAndUpdate({ guildCode, trainId}, { $set: update }).lean(lean);
|
||||
const guildTrain: GuildTrainType = await GuildTrainModel.findOneAndUpdate({ guildCode, trainId}, { $set: update }, {new: true}).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);
|
||||
const guildTrain: GuildTrainType = await GuildTrainModel.findOneAndUpdate({ guildCode, trainId, 'trainInstances.hid':hid},
|
||||
{ $set: {'trainInstances.$.progress': progress, ranks, reports, isComplete,'trainInstances.$.endTime': nowSeconds() + 24*60*60} },{new: true}).lean(lean);
|
||||
return guildTrain;
|
||||
}
|
||||
|
||||
public static async openGuildTrain(guildCode: string, trainId: number, trainScripts: Array<TrainScript>, lean = true) {
|
||||
const guildTrain: GuildTrainType = await GuildTrainModel.findOneAndUpdate({ guildCode, trainId },{ trainId, reports: [], locked: false, ranks: [], trainScripts, isComplete: false, guildCode}, {new: true, upsert: true}).lean(lean);
|
||||
public static async openGuildTrain(guildCode: string, trainId: number, trainInstances: Array<TrainInstance>, lean = true) {
|
||||
const guildTrain: GuildTrainType = await GuildTrainModel.findOneAndUpdate({ guildCode, trainId },{ trainId, reports: [], locked: false, ranks: [], trainInstances, isComplete: false, guildCode}, {new: true, upsert: true}).lean(lean);
|
||||
return guildTrain;
|
||||
}
|
||||
|
||||
public static async findTrainScriptBoxByIndex(guildCode: string, roleId: string, trainId: number, hid: number, index: number, progress: number, time, locked = false, lean = true) {
|
||||
const guildTrain: GuildTrainType = await GuildTrainModel.findOne({ guildCode, trainId, locked, 'trainScripts.hid': hid,
|
||||
'trainScripts.index':{$ne:index },'trainScripts.roleId':{$ne:roleId }, progress: {$gte: progress}, time:{$gte: time}}).lean(lean);
|
||||
public static async findTrainInstanceBoxByIndex(guildCode: string, roleId: string, trainId: number, hid: number, index: number, progress: number, time: number, locked = false, lean = true) {
|
||||
const guildTrain: GuildTrainType = await GuildTrainModel.findOne({ guildCode, trainId, locked, 'trainInstances.hid': hid,
|
||||
'trainInstances.trainBoxs.index':{$ne:index },'trainInstances.trainBoxs.roleId':{$ne:roleId }, 'trainInstances.progress': {$gte: progress}, 'trainInstances.endTime':{$gte: time}}).lean(lean);
|
||||
return guildTrain;
|
||||
}
|
||||
|
||||
public static async receiveBoxByIndex(guildCode: string, roleId: string, trainId: number, hid: number, index: number, good: Reward, locked = false, lean = true) {
|
||||
const guildTrain: GuildTrainType = await GuildTrainModel.findOneAndUpdate({ guildCode, trainId, locked, 'trainScripts.hid': hid, },
|
||||
{ $push:{ 'trainScripts.$.trainBoxs': {roleId, index, good} }} ).lean(lean);
|
||||
const guildTrain: GuildTrainType = await GuildTrainModel.findOneAndUpdate({ guildCode, trainId, locked, 'trainInstances.hid': hid, },
|
||||
{ $push:{ 'trainInstances.$.trainBoxs': {roleId, index, good} }}, {new: true}).lean(lean);
|
||||
return guildTrain;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user