Files
CRM_Montzar/apps/api/src/leads/dto.ts
T

136 lines
4.2 KiB
TypeScript
Raw Normal View History

import {
IsArray,
IsBoolean,
IsIn,
IsNumber,
IsOptional,
IsString,
MaxLength,
MinLength,
} from 'class-validator';
export class LeadSmsDto {
@IsString()
@MinLength(1)
@MaxLength(500)
text!: string;
}
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;
2026-10-13 18:04:53 +03:30
@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;
2026-10-13 18:04:53 +03:30
@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<Record<string, unknown>>;
@IsOptional() @IsString() fileName?: string;
}