import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; import { IsOptional, IsString, Length, Matches } from 'class-validator'; export class PinDto { @ApiProperty({ description: 'PIN-код из 4-6 цифр', example: '1234' }) @IsString({ message: 'PIN-код должен быть строкой' }) @Length(4, 6, { message: 'PIN-код должен содержать от 4 до 6 символов' }) @Matches(/^\d+$/, { message: 'PIN-код должен содержать только цифры' }) pin!: string; } export class OptionalPinDto { @ApiPropertyOptional({ description: 'PIN-код для подтверждения действия' }) @IsOptional() @IsString({ message: 'PIN-код должен быть строкой' }) @Length(4, 6, { message: 'PIN-код должен содержать от 4 до 6 символов' }) @Matches(/^\d+$/, { message: 'PIN-код должен содержать только цифры' }) pin?: string; } export class VerifySecurityPinDto extends PinDto { @ApiProperty({ description: 'ID сессии, которую нужно разблокировать PIN-кодом' }) @IsString({ message: 'ID сессии должен быть строкой' }) sessionId!: string; } export class TotpCodeDto { @ApiProperty({ description: '6-значный код из приложения-аутентификатора', example: '123456' }) @IsString({ message: 'Код должен быть строкой' }) @Length(6, 6, { message: 'Код должен содержать 6 цифр' }) @Matches(/^\d+$/, { message: 'Код должен содержать только цифры' }) code!: string; }