✨ feat(稷下学宫): ff931afe4到7421822f6
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { getModelForClass, prop, DocumentType, index } from '@typegoose/typegoose';
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 每场获得的圣物&特性卡
|
||||
*/
|
||||
@index({ roleId: 1 })
|
||||
@index({ gameCode: 1 })
|
||||
@index({ gameCode: 1, cardCode: 1 })
|
||||
@index({ gameCode: 1, type: 1 })
|
||||
|
||||
|
||||
export default class RougelikeCard extends BaseModel {
|
||||
@prop({ required: true })
|
||||
roleId: string; // 角色id
|
||||
|
||||
@prop({ required: true, default: '' })
|
||||
gameCode: string; // 场次唯一code
|
||||
|
||||
@prop({ required: true, default: '' })
|
||||
cardCode: string; // 卡唯一code
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
cardId: number; // 卡id
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
type: number; // 卡类型
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
charaId: number; // 装备在哪个角色上,没有装备为0
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
lv: number; // 特性卡的等级
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
getLayer: number; // 在哪一层获得的
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
getWay: number; // 在做什么的时候获得的
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
useCount?: number // 可使用次数
|
||||
|
||||
|
||||
public static async updateByCode(gameCode: string, cardCode: string, params: { $set?: RougelikeCardPara, $inc?: { lv?: number } }, lean = true) {
|
||||
const result: RougelikeCardType = await RougelikeCardModel.findOneAndUpdate({ gameCode, cardCode }, params, { new: true, upsert: true }).lean(lean);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async findByGameCode(gameCode: string, lean = true) {
|
||||
const result: RougelikeCardType[] = await RougelikeCardModel.find({ gameCode }).lean(lean);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async findByCode(gameCode: string, cardCode: string, lean = true) {
|
||||
const result: RougelikeCardType = await RougelikeCardModel.findOne({ gameCode, cardCode }).lean(lean);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async findByGameCodeAndType(gameCode: string, type: number, lean = true) {
|
||||
const result: RougelikeCardType[] = await RougelikeCardModel.find({ gameCode, type: { $eq: type }, }).lean(lean);
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
public static async findByGameCodeAndCardCodes(gameCode: string, cardCodes: string[], lean = true) {
|
||||
const result: RougelikeCardType[] = await RougelikeCardModel.find({ gameCode, cardCode: { $in: cardCodes } }).lean(lean);
|
||||
return result;
|
||||
}
|
||||
|
||||
// public static async bulkWriteUpdate(updateArr: { gameCode: string, cardCode: string, charaId: number }[]) {
|
||||
// if (updateArr.length == 0) return;
|
||||
// await RougelikeCardModel.bulkWrite(updateArr.map(({ gameCode, cardCode, charaId }) => {
|
||||
// return { updateOne: { filter: { gameCode, cardCode }, update: { $set: { charaId } }, upsert: true } }
|
||||
// }))
|
||||
// }
|
||||
public static async bulkWriteUpdate(updateArr: RougelikeCardPara[]) {
|
||||
if (updateArr.length == 0) return;
|
||||
await RougelikeCardModel.bulkWrite(updateArr.map((param) => {
|
||||
const { gameCode, cardCode } = param
|
||||
return { updateOne: { filter: { gameCode, cardCode }, update: { $set: { ...param } }, upsert: true } }
|
||||
}))
|
||||
}
|
||||
};
|
||||
export const RougelikeCardModel = getModelForClass(RougelikeCard);
|
||||
export interface RougelikeCardType extends Pick<DocumentType<RougelikeCard>, keyof RougelikeCard> { };
|
||||
export type RougelikeCardPara = Partial<RougelikeCardType>; // 将所有字段变成可选项
|
||||
Reference in New Issue
Block a user