import { IsNotEmpty, IsString, IsNumber, IsOptional, IsBoolean, IsObject, IsArray, ValidateNested, IsDateString, Matches, Min, Max, } from 'class-validator'; import { Type } from 'class-transformer'; /** * DTO for retry configuration */ export class RetryConfigDto { @IsNumber() @Min(0) @Max(10) maxRetries: number; @IsNumber() @Min(1000) retryDelay: number; @IsNumber() @Min(1) @Max(10) backoffMultiplier: number; } /** * DTO for workflow action configuration */ export class WorkflowActionDto { @IsString() @IsNotEmpty() actionType: string; @IsObject() @IsNotEmpty() actionConfig: Record; @IsString() @IsOptional() targetEntityType?: string; @IsObject() @IsOptional() filterCriteria?: Record; } /** * DTO for creating a scheduled workflow */ export class CreateScheduleDto { @IsNumber() @IsNotEmpty() workflow_id: number; @IsString() @IsOptional() workflow_name?: string; @IsString() @IsNotEmpty() name: string; @IsString() @IsOptional() description?: string; @IsString() @IsNotEmpty() @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() @IsNotEmpty() timezone: string; @IsDateString() @IsOptional() start_date?: string; @IsDateString() @IsOptional() end_date?: string; @IsNumber() @IsOptional() @Min(1) max_executions?: number; @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; @IsNumber() @IsOptional() organization_id?: number; @IsNumber() @IsOptional() enterprise_id?: number; @IsString() @IsOptional() level_id?: string; @IsString() @IsOptional() level_type?: string; @IsString() @IsOptional() appcode?: string; @IsString() @IsOptional() status?: string; }