import { IsNotEmpty, IsOptional, IsString, IsInt, IsObject, Min, Max, MaxLength } from "class-validator"; /** 频率配置:字段按 freqType 取用,由 util/cron_schedule 统一校验与翻译 */ export class UpdateJobDTO { @IsString() @IsNotEmpty({ message: "频率类型不能为空" }) @MaxLength(16, { message: "频率类型非法" }) freqType!: string; @IsOptional() @IsObject() freqConfig?: Record; @IsOptional() @IsObject() params?: Record; @IsInt() @Min(0, { message: "重试次数不能小于 0" }) @Max(5, { message: "重试次数不能超过 5" }) retryTimes!: number; @IsInt() @Min(10, { message: "重试间隔不能小于 10 秒" }) @Max(3600, { message: "重试间隔不能超过 3600 秒" }) retryInterval!: number; @IsOptional() @IsString() @MaxLength(255, { message: "备注最大 255 字符" }) remark?: string; } /** 频率预览入参:只传频率配置,cron 与下次执行时间由后端计算 */ export class CronPreviewDTO { @IsString() @IsNotEmpty({ message: "频率类型不能为空" }) @MaxLength(16, { message: "频率类型非法" }) freqType!: string; @IsOptional() @IsObject() freqConfig?: Record; } export class JobStatusDTO { @IsInt() @Min(0, { message: "状态值非法" }) @Max(1, { message: "状态值非法" }) status!: number; } export class JobLogQueryDTO { @IsOptional() @IsInt() @Min(1) page?: number = 1; @IsOptional() @IsInt() @Min(1) @Max(200, { message: "分页大小不能超过 200 条" }) pageSize?: number = 10; @IsOptional() @IsInt() status?: number; @IsOptional() @IsInt() triggerType?: number; @IsOptional() @IsString() startDate?: string; @IsOptional() @IsString() endDate?: string; }