Files
ZYZ/shared/db/HangUpSpdUpRec.ts

71 lines
2.3 KiB
TypeScript

// import { HANG_UP_CONSTS } from './../consts';
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
class Goods {
@prop({ required: true })
gid: number; // 物品id
@prop({ required: false })
count: number; // 这次挂机没来得及领取的
}
export class NotReceivedGoods {
@prop({ required: true })
cnt: number; // 加速的次数
@prop({ required: true, default: [], type: Goods, _id: false })
goods: Array<Goods>; // 这次挂机没来得及领取的
}
/**
* 挂机记录表
*/
@index({ roleId: 1, lv: 1 })
export default class HangUpSpdUpRec extends BaseModel {
@prop({ required: true })
roleId: string; // 角色 id
@prop({ required: true })
roleName: string; // 角色名
@prop({required: true, default: 1})
cnt: number; // 加速次数
@prop({required: true, default: 1})
lv: number; // 天梯层数
@prop({ required: true, default: [], type: NotReceivedGoods, _id: false })
notReceivedGoodsList: Array<NotReceivedGoods>
public static async getSpdUpRec(roleId, lv, lean = true ) {
let rec = await HangUpSpdUpRecModel.findOne({roleId, lv}).lean(lean);
return rec;
}
public static async getLatestSpdUpRec(roleId, lean = true ) {
let rec = await HangUpSpdUpRecModel.findOne({roleId}).sort({ lv: -1 }).lean(lean);
return rec;
}
public static async updateRec(roleId, roleName, multi, lv, needReceiveGoods: Array<{gid:number, count: number}>, lean = true ) {
if (multi <= 0) return null;
let rec: HangUpSpdUpRecType = await HangUpSpdUpRecModel.findOneAndUpdate({roleId, lv, roleName}, {$inc: {cnt: multi}}, {upsert: true, new: true}).lean(lean);
if(rec && needReceiveGoods.length > 0) {
let {cnt} = rec;
let goods = [{
cnt: cnt,
goods: needReceiveGoods
}];
await HangUpSpdUpRecModel.findOneAndUpdate({roleId, lv, roleName}, {$push: {notReceivedGoodsList: {$each: goods}}}, {upsert: true, new: true}).lean(lean);
}
return rec;
}
public static async deleteAccount(roleId: string) {
let result = await HangUpSpdUpRecModel.deleteMany({roleId});
return result;
}
}
export const HangUpSpdUpRecModel = getModelForClass(HangUpSpdUpRec);
export interface HangUpSpdUpRecType extends Pick<DocumentType<HangUpSpdUpRec>, keyof HangUpSpdUpRec>{};