import { ArrayMaxSize, IsArray, IsIn, IsISO8601, IsObject, IsOptional, IsString, IsUUID, MaxLength, } from 'class-validator'; const taskStatuses = ['not-started', 'in-progress', 'blocked', 'done', 'cancelled'] as const; const taskPriorities = ['critical', 'high', 'medium', 'low'] as const; export class CreateTaskDto { @IsString() @MaxLength(255) title!: string; @IsOptional() @IsString() @MaxLength(10_000) description?: string; @IsOptional() @IsIn(taskStatuses) status?: 'not-started' | 'in-progress' | 'blocked' | 'done' | 'cancelled'; @IsOptional() @IsIn(taskPriorities) priority?: 'critical' | 'high' | 'medium' | 'low'; @IsOptional() @IsUUID() projectId?: string; @IsOptional() @IsUUID() missionId?: string; @IsOptional() @IsString() @MaxLength(255) assignee?: string; @IsOptional() @IsArray() @ArrayMaxSize(50) @IsString({ each: true }) tags?: string[]; @IsOptional() @IsISO8601() dueDate?: string; } export class UpdateTaskDto { @IsOptional() @IsString() @MaxLength(255) title?: string; @IsOptional() @IsString() @MaxLength(10_000) description?: string | null; @IsOptional() @IsIn(taskStatuses) status?: 'not-started' | 'in-progress' | 'blocked' | 'done' | 'cancelled'; @IsOptional() @IsIn(taskPriorities) priority?: 'critical' | 'high' | 'medium' | 'low'; @IsOptional() @IsUUID() projectId?: string | null; @IsOptional() @IsUUID() missionId?: string | null; @IsOptional() @IsString() @MaxLength(255) assignee?: string | null; @IsOptional() @IsArray() @ArrayMaxSize(50) @IsString({ each: true }) tags?: string[] | null; @IsOptional() @IsISO8601() dueDate?: string | null; @IsOptional() @IsObject() metadata?: Record | null; }