Files
ZYZ/shared/db/HangUpRecord.ts
2021-08-19 12:01:06 +08:00

77 lines
3.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import * as dicParam from '../pubUtils/dicParam';
class Goods {
@prop({ required: true })
gid: number; // 物品id
@prop({ required: false })
count: number; // 这次挂机没来得及领取的
}
/**
* 挂机记录表
*/
@index({ roleId: 1, startLv: 1 })
export default class HangUpRecord extends BaseModel {
@prop({ required: true })
roleId: string; // 角色 id
@prop({ required: true })
roleName: string; // 角色名
@prop({ required: true, default: 0 })
speedUpTime: number; // 加速时长
@prop({ required: true, default: 1 })
startLv: number; // 开始挂机时的天梯层数,收益使用当前层数 -1 计算,即用户已经通过的最高层
@prop({ required: true })
startTime: Date; // 开始挂机的时间
@prop({ required: false })
endLv: number; // 结束挂机时的层数
@prop({ required: false })
endTime: Date; // 结束挂机的时间
@prop({ required: true, default: [], type: Goods, _id: false })
notReceivedGoods: Array<Goods>
@prop({ required: true, default: false })
received: boolean; // 是否已经领取true-领取false-未领取
public static async initRecord(roleId: string, roleName: string, lean = true) {
const curTime = new Date();
const recDoc = new HangUpRecordModel();
const update = Object.assign(recDoc.toJSON(), {roleId, roleName, startTime: curTime, startLv: dicParam.TOWER_HANG_UP.TOWER_HANG_UP_ENABLE_LV + 1});
const rec: HangUpRecordType = await HangUpRecordModel.findOneAndUpdate({roleId, startLv: dicParam.TOWER_HANG_UP.TOWER_HANG_UP_ENABLE_LV + 1}, update, {upsert: true, new: true}).lean(lean);
return rec;
}
public static async getCurRec(roleId: string, lean = true) {
const rec: HangUpRecordType = await HangUpRecordModel.findOne({roleId, received: false}).lean(lean);
return rec;
}
public static async getLastRec(roleId: string, lean = true) {
const rec: HangUpRecordType = await HangUpRecordModel.findOne({roleId, received: true}).sort({endTime: -1}).lean(lean);
return rec;
}
public static async updateRec(roleId: string, roleName: string, endLv: number, endTime: Date, needReceiveGoods: Array<{gid:number, count: number}>, lean = true) {
await HangUpRecordModel.findOneAndUpdate({roleId, received: false}, {endLv, endTime, received: true, notReceivedGoods: needReceiveGoods}).lean(lean);
const recDoc = new HangUpRecordModel();
const update = Object.assign(recDoc.toJSON(), {roleId, roleName, startTime: endTime, startLv: endLv});
delete update._id;
const newRec: HangUpRecordType = await HangUpRecordModel.findOneAndUpdate({roleId, startLv: endLv, received: false}, update, {upsert: true, new: true}).lean(lean);
return newRec;
}
public static async deleteAccount(roleId: string) {
let result = await HangUpRecordModel.deleteMany({roleId});
return result;
}
}
export const HangUpRecordModel = getModelForClass(HangUpRecord);
export interface HangUpRecordType extends Pick<DocumentType<HangUpRecord>, keyof HangUpRecord>{};