Files
ZYZ/shared/db/RougelikeCard.ts
2023-09-04 14:48:16 +08:00

89 lines
3.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 { 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, useCount?: 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>; // 将所有字段变成可选项