import { IsNotEmpty, IsString, IsNumber, IsOptional, IsBoolean, IsObject, IsArray, ValidateNested, IsDateString, Matches, Min, } from 'class-validator'; import { Type } from 'class-transformer'; import { RetryConfigDto, WorkflowActionDto } from './create-schedule.dto'; /** * DTO for updating a scheduled workflow * All fields are optional as partial updates should be supported */ export class UpdateScheduleDto { @IsNumber() @IsNotEmpty() id: number; @IsNumber() @IsOptional() workflow_id?: number; @IsString() @IsOptional() workflow_name?: string; @IsString() @IsOptional() name?: string; @IsString() @IsOptional() description?: string; @IsString() @IsOptional() @Matches( /^(\*|([0-5]?\d)) (\*|([01]?\d|2[0-3])) (\*|([01]?\d|2\d|3[01])) (\*|([1-9]|1[0-2])) (\*|([0-6]))$/, { message: 'Invalid cron expression format. Expected format: "minute hour day month weekday"', }, ) cron_expression?: string; @IsString() @IsOptional() timezone?: string; @IsDateString() @IsOptional() start_date?: string; @IsDateString() @IsOptional() end_date?: string; @IsNumber() @IsOptional() @Min(1) max_executions?: number; @IsString() @IsOptional() schedule_status?: string; @ValidateNested() @Type(() => RetryConfigDto) @IsOptional() retry_config?: RetryConfigDto; @IsArray() @ValidateNested({ each: true }) @Type(() => WorkflowActionDto) @IsOptional() actions?: WorkflowActionDto[]; @IsObject() @IsOptional() metadata?: Record; @IsBoolean() @IsOptional() is_enabled?: boolean; @IsString() @IsOptional() status?: string; }