✨ feat(稷下学宫): ff931afe4到7421822f6
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { getModelForClass, prop, DocumentType, index } from '@typegoose/typegoose';
|
||||
|
||||
|
||||
export class RewardInter {
|
||||
@prop({ required: true })
|
||||
id: number;
|
||||
@prop({ required: true })
|
||||
count: number;
|
||||
@prop({ required: true })
|
||||
expireTime?: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* 每场获得的圣物&特性卡
|
||||
*/
|
||||
@index({ roleId: 1 })
|
||||
@index({ gameCode: 1 })
|
||||
@index({ roleId: 1, status: 1 })
|
||||
|
||||
export default class RougelikeRecord extends BaseModel {
|
||||
@prop({ required: true })
|
||||
roleId: string; // 角色id
|
||||
|
||||
@prop({ required: true, default: '' })
|
||||
gameCode: string; // 每场唯一code
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
grade: number; // 难度
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
type: number; // 试炼类型
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
authorType: number; // 流派类型
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
maxLayer: number; // 总共多少层
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
curLayer: number; // 当前在第几层
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
status: number; // 0-选角色卡, 1-进行中 2-已达成
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
score: number; // 本场获得的积分
|
||||
|
||||
@prop({ required: true, type: RewardInter, default: [] })
|
||||
takeoutReward: RewardInter[]; // 本场获得了的奖励(灵石,记录一下)id&count
|
||||
|
||||
@prop({ required: true, default: false })
|
||||
hasReceivedTakeout: boolean; // 是否已带出
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
coin: number; // 试炼币
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
coinTotal: number; // 试炼币累计值
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
techScore: number; // 科技分
|
||||
|
||||
|
||||
|
||||
|
||||
// public static async updateByGameCode(gameCode: string, params: { $set: RougelikeRecordPara, $inc?: { coin?: number, score?: number, techScore?: number } }, lean = true) {
|
||||
// let doc = new RougelikeRecordModel();
|
||||
// let insert = Object.assign(doc);
|
||||
// for (let key in params.$inc) {
|
||||
// if (insert[key] != undefined) delete insert[key];
|
||||
// }
|
||||
// for (let key in params.$set) {
|
||||
// if (insert[key] != undefined) delete insert[key];
|
||||
// }
|
||||
|
||||
// const result: RougelikeRecordType = await RougelikeRecordModel.findOneAndUpdate({ gameCode }, { $setOnInsert: insert, ...params }, { new: true, upsert: true }).lean(lean);
|
||||
// return result;
|
||||
// }
|
||||
|
||||
public static async updateByGameCode(gameCode: string, params: { $set?: RougelikeRecordPara, $inc?: { coin?: number, coinTotal?: number, score?: number, techScore?: number } }, lean = true) {
|
||||
const result: RougelikeRecordType = await RougelikeRecordModel.findOneAndUpdate({ gameCode }, params, { new: true, upsert: true }).lean(lean);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async findByGameCode(gameCode: string, lean = true) {
|
||||
const result: RougelikeRecordType = await RougelikeRecordModel.findOne({ gameCode }).lean(lean);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async findByRoleIdAndStatus(roleId: string, status: number, lean = true) {
|
||||
const result: RougelikeRecordType = await RougelikeRecordModel.findOne({ roleId, status: { $lt: status } }).lean(lean);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async takeout(gameCode: string) {
|
||||
const result: RougelikeRecordType = await RougelikeRecordModel.findOneAndUpdate({ gameCode }, { $set: { hasReceivedTakeout: true } }, { new: true }).lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async costCoin(gameCode: string, costCoin: number) {
|
||||
const result: RougelikeRecordType = await RougelikeRecordModel.findOneAndUpdate({ gameCode, coin: { $gte: costCoin } }, { $inc: { coin: -costCoin } }, { new: true }).lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
};
|
||||
export const RougelikeRecordModel = getModelForClass(RougelikeRecord);
|
||||
export interface RougelikeRecordType extends Pick<DocumentType<RougelikeRecord>, keyof RougelikeRecord> { };
|
||||
export type RougelikeRecordPara = Partial<RougelikeRecordType>; // 将所有字段变成可选项
|
||||
Reference in New Issue
Block a user