Files
ZYZ/shared/db/RougelikeCollection.ts
2023-09-06 20:52:59 +08:00

54 lines
2.4 KiB
TypeScript

import { COLLECTION_TYPE } from '../consts';
import BaseModel from './BaseModel';
import { getModelForClass, prop, DocumentType, index } from '@typegoose/typegoose';
@index({ roleId: 1, type: 1, id: 1 })
export default class RougelikeCollection extends BaseModel {
@prop({ required: true })
roleId: string;
@prop({ required: true, default: 0 })
type: number;
@prop({ required: true, default: 0 })
id: number;
@prop({ required: true, default: 0 })
num: number;
@prop({ required: true, default: '' })
gameCode: string;
@prop({ required: true, type: Number, default: [], _id: false })
received: number[]; // 是否领取奖励
public static async addRec(roleId: string, type: number, id: number, gameCode: string, addNum = 1) {
const result: RougelikeCollectionType = await RougelikeCollectionModel.findOneAndUpdate({ roleId, type, id }, { $setOnInsert: { received: [] }, $inc: { num: addNum }, $set: { gameCode } }, { new: true, upsert: true }).lean();
return result;
}
public static async findByRoleId(roleId: string, lean = true) {
const result: RougelikeCollectionType[] = await RougelikeCollectionModel.find({ roleId }).lean(lean);
return result;
}
public static async findByRoleAndId(roleId: string, type: number, id: number) {
const result: RougelikeCollectionType = await RougelikeCollectionModel.findOne({ roleId, type, id: type == COLLECTION_TYPE.PASSIVE_CARD_SUM? 0: id }).lean();
return result;
}
public static async receive(roleId: string, type: number, id: number, num = 1) {
if(type == COLLECTION_TYPE.PASSIVE_CARD_SUM) {
const result: RougelikeCollectionType = await RougelikeCollectionModel.findOneAndUpdate({ roleId, type, id: 0, num: { $gte: num } }, { $push: { received: id } }, { new: true }).lean();
return result;
} else {
const result: RougelikeCollectionType = await RougelikeCollectionModel.findOneAndUpdate({ roleId, type, id }, { $push: { received: id } }, { new: true }).lean();
return result;
}
}
}
export const RougelikeCollectionModel = getModelForClass(RougelikeCollection);
export interface RougelikeCollectionType extends Pick<DocumentType<RougelikeCollection>, keyof RougelikeCollection> { };
export type RougelikeCollectionPara = Partial<RougelikeCollectionType>; // 将所有字段变成可选项