more fix and update

This commit is contained in:
lendry
2026-06-24 20:15:19 +03:00
parent dcab6557d3
commit 9727cf3f35
53 changed files with 3479 additions and 494 deletions

View File

@@ -150,6 +150,41 @@ export class VerifyPinDto {
pin!: string;
}
export class VerifyTotpLoginDto {
@ApiProperty({ description: 'Временный токен после первичной аутентификации' })
@IsString({ message: 'Токен подтверждения должен быть строкой' })
@IsNotEmpty({ message: 'Передайте токен подтверждения' })
totpChallengeToken!: string;
@ApiProperty({ description: '6-значный код из приложения-аутентификатора', example: '123456' })
@IsString({ message: 'Код должен быть строкой' })
@Length(6, 6, { message: 'Код должен содержать 6 цифр' })
@Matches(/^\d+$/, { message: 'Код должен содержать только цифры' })
code!: string;
}
export class BeginTotpLoginDto {
@ApiProperty({ description: 'Почта или телефон пользователя', example: 'user@example.com' })
@IsString({ message: 'Получатель должен быть строкой' })
@IsNotEmpty({ message: 'Укажите почту или телефон' })
@Matches(EMAIL_OR_PHONE_PATTERN, { message: 'Укажите корректную почту или телефон в формате +79991234567' })
recipient!: string;
@ApiProperty({ description: 'Уникальный отпечаток устройства' })
@IsString({ message: 'Отпечаток устройства должен быть строкой' })
fingerprint!: string;
@ApiPropertyOptional({ description: 'Название устройства' })
@IsOptional()
@IsString({ message: 'Название устройства должно быть строкой' })
deviceName?: string;
@ApiPropertyOptional({ description: 'Тип устройства', example: 'WEB' })
@IsOptional()
@IsString({ message: 'Тип устройства должен быть строкой' })
deviceType?: string;
}
export class RefreshSessionDto {
@ApiProperty({ description: 'Refresh token текущей сессии' })
@IsString({ message: 'Refresh token должен быть строкой' })

View File

@@ -97,6 +97,16 @@ export class QrSessionDto {
@ApiProperty({ description: 'Название устройства', example: 'Chrome на Windows' })
@IsString({ message: 'Название устройства должно быть строкой' })
deviceName!: string;
@ApiPropertyOptional({ description: 'Отпечаток устройства браузера' })
@IsOptional()
@IsString({ message: 'Отпечаток устройства должен быть строкой' })
fingerprint?: string;
@ApiPropertyOptional({ description: 'Тип устройства', example: 'WEB' })
@IsOptional()
@IsString({ message: 'Тип устройства должен быть строкой' })
deviceType?: string;
}
export class CreateFamilyGroupDto {
@@ -127,10 +137,15 @@ export class AddFamilyMemberDto {
}
export class SendFamilyInviteDto {
@ApiProperty({ description: 'Email, телефон или логин приглашаемого' })
@ApiPropertyOptional({ description: 'Email, телефон или логин (legacy)' })
@IsOptional()
@IsString({ message: 'Укажите контакт приглашаемого' })
@IsNotEmpty({ message: 'Укажите контакт приглашаемого' })
target!: string;
target?: string;
@ApiPropertyOptional({ description: 'ID пользователя из результатов поиска' })
@IsOptional()
@IsString({ message: 'ID пользователя должен быть строкой' })
inviteeUserId?: string;
}
export class RespondFamilyInviteDto {

View File

@@ -40,6 +40,11 @@ export class UpdateProfileDto {
@IsOptional()
@IsString({ message: 'Пол должен быть строкой' })
gender?: string;
@ApiPropertyOptional({ description: 'Дата рождения в формате YYYY-MM-DD', example: '1990-05-15' })
@IsOptional()
@Matches(/^\d{4}-\d{2}-\d{2}$/, { message: 'Укажите дату рождения в формате ГГГГ-ММ-ДД' })
birthDate?: string;
}
export class UpdateContactsDto {

View File

@@ -23,3 +23,11 @@ export class VerifySecurityPinDto extends PinDto {
@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;
}