Files
ZYZ/shared/db/EventRecord.ts
2020-10-09 20:26:53 +08:00

57 lines
2.5 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 } from '@typegoose/typegoose';
/**
* 战斗记录接口
*/
@index({ roleId: 1, type: 1 })
export default class EventRecord extends BaseModel {
@prop({ required: true })
roleId: string; // 角色 id
@prop({ required: true })
roleName: string; // 角色 名
@prop({ required: true })
eventCode: string; // 这次刷新出的事件的唯一标识
@prop({ required: true })
eventId: number; // 事件 id
@prop({ required: true })
type: number; // 事件类型
@prop({ required: true, default: 0 })
status: number; // 状态 1-已达成 0-未达成 -1-失败
@prop({ required: true, default: 0 })
battleStatus: number; // 状态 1-成功 -1-失败
@prop({ required: true, default: 0 })
refTime: number; // 刷新时间
@prop({ required: true, default: 0 })
battleId: number; // 关卡类型关卡id
@prop({ required: true, default: 0 })
turn: number; // 随机的轮数保证每个event_id都能随机到一次再进行下一轮
public static async getEventRecordByTime(roleId: string, refTime: number, lean=true ) {
let data = await EventRecordModel.find({roleId, refTime}).select('eventCode eventId type quality status battleId').lean(lean);
return data;
}
public static async getHostoryEventRecord(roleId: string, lean=true) {
let latest = await EventRecordModel.findOne({roleId}).sort({turn: -1}).lean();
let {turn = 0} = latest||{};
let result = await EventRecordModel.find({roleId, turn}).lean(lean);
return {history: result, turn};
}
public static async saveEventRecord(eventCode: string, params: {roleId: string, refTime: number, eventId: number, roleName:string, turn: number, type: number, quality: number, battleId?: number } , lean=true ) {
let data = await EventRecordModel.findOneAndUpdate({eventCode}, { $set: {...params, status: 0 } }, {upsert: true, new: true}).select('eventCode eventId type quality status battleId').lean(lean);
return data;
}
public static async setBattleStatus(roleId: string, battleId: number, refTime: number, battleStatus: number, battleCode: string , lean=true ) {
let result = await EventRecordModel.findOneAndUpdate({roleId, battleId, refTime}, {$set:{ battleStatus, battleCode }}).sort({turn: 1}).lean(lean);
return result;
}
}
export const EventRecordModel = getModelForClass(EventRecord);