import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; import { IsBoolean, IsEmail, IsEnum, IsOptional, IsString, Matches, MinLength } from 'class-validator'; export enum GatewayUserStatus { ACTIVE = 'ACTIVE', SUSPENDED = 'SUSPENDED', DELETED = 'DELETED' } export class ListUsersQueryDto { @ApiPropertyOptional({ description: 'Поиск по почте, телефону, имени или логину' }) @IsOptional() @IsString({ message: 'Поисковая строка должна быть текстом' }) search?: string; } export class UpdateUserDto { @ApiPropertyOptional({ description: 'Отображаемое имя' }) @IsOptional() @IsString({ message: 'Имя должно быть строкой' }) displayName?: string; @ApiPropertyOptional({ description: 'Основная почта' }) @IsOptional() @IsEmail({}, { message: 'Укажите корректную почту' }) email?: string; @ApiPropertyOptional({ description: 'Основной телефон' }) @IsOptional() @Matches(/^\+?[1-9]\d{7,14}$/, { message: 'Укажите корректный телефон' }) phone?: string; @ApiPropertyOptional({ description: 'Резервная почта' }) @IsOptional() @IsEmail({}, { message: 'Укажите корректную резервную почту' }) backupEmail?: string; @ApiPropertyOptional({ description: 'Резервный телефон' }) @IsOptional() @Matches(/^\+?[1-9]\d{7,14}$/, { message: 'Укажите корректный резервный телефон' }) backupPhone?: string; @ApiPropertyOptional({ description: 'Статус пользователя', enum: GatewayUserStatus }) @IsOptional() @IsEnum(GatewayUserStatus, { message: 'Укажите корректный статус пользователя' }) status?: GatewayUserStatus; } export class ResetPasswordDto { @ApiProperty({ description: 'Новый пароль пользователя', minLength: 8 }) @IsString({ message: 'Пароль должен быть строкой' }) @MinLength(8, { message: 'Пароль должен содержать минимум 8 символов' }) newPassword!: string; } export class SetSuperAdminDto { @ApiProperty({ description: 'Выдать или снять права супер-администратора' }) @IsBoolean({ message: 'isSuperAdmin должно быть boolean' }) isSuperAdmin!: boolean; } export class SetUserVerificationDto { @ApiProperty({ description: 'Верифицировать или снять верификацию' }) @IsBoolean({ message: 'isVerified должно быть boolean' }) isVerified!: boolean; @ApiPropertyOptional({ description: 'Slug значка из списка (badge-check, star, moon и т.д.)' }) @IsOptional() @IsString({ message: 'Значок должен быть строкой' }) verificationIcon?: string; }