import { Type } from 'class-transformer'; import { IsArray, IsNumber, IsOptional, IsString, MaxLength, Min, MinLength, ValidateIf, } from 'class-validator'; export class CreateProjectBoardDto { @IsString() @MinLength(2) @MaxLength(120) name!: string; } export class CreateProjectBoardStageDto { @IsString() @MinLength(1) @MaxLength(80) name!: string; } export class UpdateProjectBoardStageDto { @IsOptional() @IsString() @MinLength(1) @MaxLength(80) name?: string; } export class ReorderProjectBoardStagesDto { @IsArray() @IsString({ each: true }) stageIds!: string[]; } export class CreateProjectCardDto { @IsString() @MinLength(2) @MaxLength(200) title!: string; @IsOptional() @IsString() boardId?: string; @IsOptional() @IsString() stageId?: string; @IsOptional() @IsString() @MaxLength(4000) notes?: string; @IsOptional() @IsArray() @IsString({ each: true }) tags?: string[]; @IsOptional() @ValidateIf((_, v) => v !== '' && v != null) @IsString() personId?: string | null; @IsOptional() @ValidateIf((_, v) => v !== '' && v != null) @IsString() companyId?: string | null; @IsOptional() @ValidateIf((_, v) => v !== '' && v != null) @IsString() dealId?: string | null; @IsOptional() @ValidateIf((_, v) => v !== '' && v != null) @IsString() ownerId?: string | null; @IsOptional() @IsArray() @IsString({ each: true }) assigneeIds?: string[]; } export class UpdateProjectCardDto { @IsOptional() @IsString() @MinLength(2) @MaxLength(200) title?: string; @IsOptional() @IsString() @MaxLength(4000) notes?: string; @IsOptional() @IsArray() @IsString({ each: true }) tags?: string[]; @IsOptional() @ValidateIf((_, v) => v !== '' && v != null) @IsString() personId?: string | null; @IsOptional() @ValidateIf((_, v) => v !== '' && v != null) @IsString() companyId?: string | null; @IsOptional() @ValidateIf((_, v) => v !== '' && v != null) @IsString() dealId?: string | null; @IsOptional() @ValidateIf((_, v) => v !== '' && v != null) @IsString() ownerId?: string | null; @IsOptional() @IsArray() @IsString({ each: true }) assigneeIds?: string[]; } export class MoveProjectCardDto { @IsString() stageId!: string; @IsOptional() @Type(() => Number) @IsNumber() @Min(0) position?: number; }