task-svr/src/models/ActivityInfo.ts
2024-01-05 12:54:57 +08:00

94 lines
2.2 KiB
TypeScript

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 })