54 lines
2.4 KiB
TypeScript
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>; // 将所有字段变成可选项
|