94 lines
2.2 KiB
TypeScript
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 })
|