import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose'; import { getCurWeekDate, getTodayZeroDate } from '../pubUtils/timeUtil'; import { Floor, Hope, Turntable } from '../domain/activityField/gachaField'; import { REFRESH_HOUR } from '../consts'; /** * 玩家抽卡表 **/ @modelOptions({ schemaOptions: { id: false } }) @index({ roleId: 1, itemId: 1 }) export default class UserGacha extends BaseModel { @prop({ required: true }) roleId: string; // 玩家id @prop({ required: true }) gachaId: number; // 抽卡id 1-元宝 2-友情 3-指定 4-限时 @prop({ required: true, default: 0 }) aid: number; // 限时抽卡对应活动id @prop({ required: true, default: 0 }) count: number; // 已抽卡次数 @prop({ required: true, type: (() => Floor)(), default: [] }) floor: Floor[]; // 已抽卡次数 @prop({ required: true, default: 0 }) freeCount: number; // 免费次数 @prop({ required: true, default: () => { return getTodayZeroDate(REFRESH_HOUR) } }) refFreeTime: Date; // 免费次数刷新时间 @prop({ required: true, type: (() => Hope)(), default: [] }) hope: Hope[]; // 心愿单 @prop({ required: true, default: 0 }) point: number; // 积分 @prop({ required: true, type: (() => Turntable)(), default: [] }) turntable: Turntable[]; // 转盘 @prop({ required: true, default: 0 }) pickHero: number; // 玩家指定武将 public static async findAllByRole(roleId: string) { let rec: UserGachaType[] = await UserGachaModel.find({ roleId }).lean(); return rec; } public static async refreshFreeCount(roleId: string, gachaId: number, aid: number, refFreeTime: Date) { let rec: UserGachaType = await UserGachaModel.findOneAndUpdate({ roleId, gachaId, aid }, { $set: { freeCount: 0, refFreeTime } }, { new: true }).lean(); return rec; } } export const UserGachaModel = getModelForClass(UserGacha); export interface UserGachaType extends Pick, keyof UserGacha> { } export type UserGachaParam = Partial;