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, keyof RougelikeCollection> { }; export type RougelikeCollectionPara = Partial; // 将所有字段变成可选项