import { IsArray, IsBoolean, IsEmail, IsIn, IsInt, IsNumber, IsOptional, IsString, Max, MaxLength, Min, MinLength, ValidateIf, } from 'class-validator'; import { PRODUCT_PLAN_CODES, USER_ROLES, type ProductPlanCode, type UserRole } from '@mento/shared'; export class PlatformLoginDto { @IsString() @MinLength(8) @MaxLength(40) mobile!: string; @IsString() @MinLength(6) password!: string; } export class CreatePlatformAdminDto { @IsString() @MinLength(2) @MaxLength(120) fullName!: string; @IsString() @MinLength(8) @MaxLength(40) mobile!: string; @IsString() @MinLength(8) @MaxLength(120) password!: string; @IsOptional() @IsEmail() email?: string; } export class ResetPlatformAdminPasswordDto { @IsString() @MinLength(8) @MaxLength(120) password!: string; } export class UpdatePlatformAdminDto { @IsString() @MinLength(2) @MaxLength(120) fullName!: string; @IsString() @MinLength(8) @MaxLength(40) mobile!: string; @IsOptional() @ValidateIf((_, value) => value !== null && value !== '') @IsEmail() email?: string | null; } export class SetMasterPasswordDto { @ValidateIf((_, value) => value !== null) @IsString() @MinLength(8) @MaxLength(120) password!: string | null; } export class UpdatePlatformStatusDto { @IsBoolean() isActive!: boolean; } export class CreatePlatformOrganizationDto { @IsString() @MinLength(2) @MaxLength(120) name!: string; @IsOptional() @IsString() @MaxLength(64) businessField?: string; @IsString() @MinLength(2) @MaxLength(120) ownerFullName!: string; @IsEmail() ownerEmail!: string; @IsString() @MinLength(8) @MaxLength(120) ownerPassword!: string; @IsOptional() @IsString() @MaxLength(40) ownerMobile?: string; } export class UpdatePlatformOrganizationDto { @IsOptional() @IsString() @MinLength(2) @MaxLength(120) name?: string; @IsOptional() @IsString() @MinLength(2) @MaxLength(64) slug?: string; @IsOptional() @ValidateIf((_, v) => v !== null && v !== undefined) @IsString() @MaxLength(64) businessField?: string | null; @IsOptional() @IsBoolean() isActive?: boolean; } export class UpdatePlatformMembershipRoleDto { @IsIn(USER_ROLES) role!: UserRole; } export class ResetPlatformUserPasswordDto { @IsString() @MinLength(8) @MaxLength(120) password!: string; } export class ApplyBillingPlanDto { @IsIn(['trial', 'monthly', 'quarterly', 'semiannual', 'yearly', 'lifetime', 'custom']) planCode!: 'trial' | 'monthly' | 'quarterly' | 'semiannual' | 'yearly' | 'lifetime' | 'custom'; @IsOptional() @IsInt() @Min(1) maxOrganizations?: number; @IsOptional() @IsString() expiresAt?: string; @IsOptional() @IsString() @MaxLength(500) notes?: string | null; @IsOptional() @IsIn(['active', 'expired', 'suspended']) status?: 'active' | 'expired' | 'suspended'; } export class SetUserCapDto { @IsInt() @Min(1) @Max(100_000) maxUsers!: number; } export class SetStorageQuotaDto { /** گیگابایت؛ null = بدون سقف */ @IsNumber() @Min(0) @Max(100_000) @ValidateIf((_, value) => value !== null) quotaGb!: number | null; } export class ApplyProductPlanDto { @IsIn(PRODUCT_PLAN_CODES) planCode!: ProductPlanCode; } export class UpdateOrgModulesDto { @IsArray() @IsString({ each: true }) enabledModules!: string[]; }