import { IsArray, IsBoolean, IsIn, IsNumber, IsOptional, IsString, MinLength, } from 'class-validator'; export class CreateLeadDto { @IsString() @MinLength(1) title!: string; @IsString() @MinLength(5) mobile!: string; @IsOptional() @IsString() contactName?: string; @IsOptional() @IsString() phone?: string; @IsOptional() @IsString() city?: string; @IsOptional() @IsString() region?: string; @IsOptional() @IsString() instagram?: string; @IsOptional() @IsString() birthDate?: string | null; @IsOptional() @IsArray() @IsString({ each: true }) addresses?: string[]; @IsOptional() @IsString() trade?: string; @IsOptional() @IsString() source?: string; @IsOptional() @IsString() notes?: string; @IsOptional() @IsNumber() estimatedValue?: number; @IsOptional() @IsString() stageId?: string; @IsOptional() @IsString() assigneeId?: string | null; @IsOptional() @IsString() nextFollowUpAt?: string | null; /** فقط برای ایمپورت اکسل — تاریخ ثبت مبدأ */ @IsOptional() @IsString() registeredAt?: string | null; } export class UpdateLeadDto { @IsOptional() @IsString() @MinLength(1) title?: string; @IsOptional() @IsString() @MinLength(5) mobile?: string; @IsOptional() @IsString() contactName?: string | null; @IsOptional() @IsString() phone?: string | null; @IsOptional() @IsString() city?: string | null; @IsOptional() @IsString() region?: string | null; @IsOptional() @IsString() instagram?: string | null; @IsOptional() @IsString() birthDate?: string | null; @IsOptional() @IsArray() @IsString({ each: true }) addresses?: string[]; @IsOptional() @IsString() trade?: string | null; @IsOptional() @IsString() source?: string | null; @IsOptional() @IsString() notes?: string | null; @IsOptional() @IsNumber() estimatedValue?: number | null; @IsOptional() @IsString() stageId?: string; @IsOptional() @IsString() assigneeId?: string | null; @IsOptional() @IsString() nextFollowUpAt?: string | null; @IsOptional() @IsString() lastContactAt?: string | null; } export class MoveLeadDto { @IsString() stageId!: string; @IsOptional() @IsNumber() position?: number; } export class AssignLeadsDto { @IsArray() @IsString({ each: true }) leadIds!: string[]; @IsString() assigneeId!: string; } export class BulkLeadStageDto { @IsArray() @IsString({ each: true }) leadIds!: string[]; @IsString() stageId!: string; } export class AutoAssignLeadsDto { @IsOptional() @IsIn(['round_robin', 'equal_split']) rule?: string; @IsOptional() @IsArray() @IsString({ each: true }) leadIds?: string[]; @IsOptional() @IsArray() @IsString({ each: true }) assigneeIds?: string[]; @IsOptional() @IsBoolean() onlyUnassigned?: boolean; } export class LeadCallLogDto { @IsOptional() @IsString() outcome?: string; @IsOptional() @IsString() body?: string; @IsOptional() @IsString() nextFollowUpAt?: string | null; @IsOptional() @IsString() stageId?: string; } export class LeadNoteDto { @IsString() @MinLength(1) body!: string; } export class LeadFollowUpDto { @IsString() nextFollowUpAt!: string; @IsOptional() @IsString() body?: string; } export class ConvertLeadDto { @IsOptional() @IsString() firstName?: string; @IsOptional() @IsString() lastName?: string; } export class CreateLeadStageDto { @IsString() @MinLength(1) name!: string; @IsOptional() @IsString() color?: string; @IsOptional() @IsBoolean() showOnBoard?: boolean; @IsOptional() @IsBoolean() isConverted?: boolean; @IsOptional() @IsBoolean() isLost?: boolean; @IsOptional() @IsBoolean() isUnqualified?: boolean; } export class UpdateLeadStageDto { @IsOptional() @IsString() @MinLength(1) name?: string; @IsOptional() @IsString() color?: string; @IsOptional() @IsBoolean() showOnBoard?: boolean; @IsOptional() @IsBoolean() isConverted?: boolean; @IsOptional() @IsBoolean() isLost?: boolean; @IsOptional() @IsBoolean() isUnqualified?: boolean; @IsOptional() @IsNumber() position?: number; } export class ReorderLeadStagesDto { @IsArray() @IsString({ each: true }) stageIds!: string[]; } export class ImportLeadsDto { @IsArray() rows!: Array>; @IsOptional() @IsString() fileName?: string; }