import { getModelForClass, modelOptions, mongoose, prop, Severity } from '@typegoose/typegoose' import { dbconn } from 'decorators/dbconn' // @ts-ignore import findOrCreate from 'mongoose-findorcreate' import { Base, TimeStamps } from '@typegoose/typegoose/lib/defaultClasses' import { BaseModule } from './Base' import exp from 'constants' export enum TaskTypeEnum { ONCE = 1, DAILY = 2, } @modelOptions({ schemaOptions: { _id: false }, options: { allowMixed: Severity.ALLOW }, }) export class TaskCfg { @prop() id: string @prop() task: string @prop() title: string @prop({ enum: TaskTypeEnum, default: TaskTypeEnum.ONCE }) type: TaskTypeEnum @prop() desc: string @prop({ type: mongoose.Schema.Types.Mixed }) category: any @prop({default: false}) autoclaim: boolean @prop({ type: () => [String], default: [] }) pretasks: string[] @prop() score: number @prop({default: true}) show: boolean @prop({ type: mongoose.Schema.Types.Mixed }) cfg: any @prop({ type: mongoose.Schema.Types.Mixed }) params: any } interface ActivityInfoClass extends Base, TimeStamps {} @dbconn() @modelOptions({ schemaOptions: { collection: 'activity_info', timestamps: true } }) class ActivityInfoClass extends BaseModule { @prop() public _id: string @prop({ required: true }) public name: string @prop() public description: string @prop({ type: () => [TaskCfg], default: [] }) public tasks: TaskCfg[] @prop({ required: false }) public pause: boolean @prop() public startTime: number @prop() public endTime: number @prop() public comment?: string public toJson() { let result = super.toJson() let tasks = [] for (let task of this.tasks) { if (task.show) { tasks.push({ id: task.id, task: task.task, title: task.title, desc: task.desc, type: task.type, pretasks: task.pretasks, score: task.score, category: task.category, autoclaim: task.autoclaim, cfg: task.cfg, }) } } result.tasks = tasks return result } } export const ActivityInfo = getModelForClass(ActivityInfoClass, { existingConnection: ActivityInfoClass.db })