import { IsArray, IsIn, IsObject, IsOptional, IsString, IsUUID, MaxLength } from 'class-validator'; const missionStatuses = ['planning', 'active', 'paused', 'completed', 'failed'] as const; const taskStatuses = ['not-started', 'in-progress', 'blocked', 'done', 'cancelled'] as const; export class CreateMissionDto { @IsString() @MaxLength(255) name!: string; @IsOptional() @IsString() @MaxLength(10_000) description?: string; @IsOptional() @IsUUID() projectId?: string; @IsOptional() @IsIn(missionStatuses) status?: 'planning' | 'active' | 'paused' | 'completed' | 'failed'; @IsOptional() @IsString() @MaxLength(255) phase?: string; @IsOptional() @IsArray() milestones?: Record[]; @IsOptional() @IsObject() config?: Record; } export class UpdateMissionDto { @IsOptional() @IsString() @MaxLength(255) name?: string; @IsOptional() @IsString() @MaxLength(10_000) description?: string | null; @IsOptional() @IsUUID() projectId?: string | null; @IsOptional() @IsIn(missionStatuses) status?: 'planning' | 'active' | 'paused' | 'completed' | 'failed'; @IsOptional() @IsString() @MaxLength(255) phase?: string; @IsOptional() @IsArray() milestones?: Record[]; @IsOptional() @IsObject() config?: Record; @IsOptional() @IsObject() metadata?: Record | null; } export class CreateMissionTaskDto { @IsOptional() @IsUUID() taskId?: string; @IsOptional() @IsIn(taskStatuses) status?: 'not-started' | 'in-progress' | 'blocked' | 'done' | 'cancelled'; @IsOptional() @IsString() @MaxLength(10_000) description?: string; @IsOptional() @IsString() @MaxLength(10_000) notes?: string; @IsOptional() @IsString() @MaxLength(255) pr?: string; } export class UpdateMissionTaskDto { @IsOptional() @IsUUID() taskId?: string; @IsOptional() @IsIn(taskStatuses) status?: 'not-started' | 'in-progress' | 'blocked' | 'done' | 'cancelled'; @IsOptional() @IsString() @MaxLength(10_000) description?: string; @IsOptional() @IsString() @MaxLength(10_000) notes?: string; @IsOptional() @IsString() @MaxLength(255) pr?: string; }