import { ApiProperty } from '@nestjs/swagger'; import { IsDateString, IsEmail, IsEnum, IsNotEmpty, IsNumberString, IsOptional, IsString, Matches, MaxLength, MinLength, } from 'class-validator'; import { i18nValidationMessage as i18n } from 'nestjs-i18n'; import { COUNTRY_CODE_REGEX, PASSWORD_REGEX } from '~/auth/constants'; import { CountryIso } from '~/common/enums'; import { DEFAULT_OTP_LENGTH } from '~/common/modules/otp/constants'; import { IsAbove18, IsValidPhoneNumber } from '~/core/decorators/validations'; export class VerifyUserRequestDto { @ApiProperty({ example: '+962' }) @Matches(COUNTRY_CODE_REGEX, { message: i18n('validation.Matches', { path: 'general', property: 'auth.countryCode' }), }) countryCode!: string; @ApiProperty({ example: '787259134' }) @IsValidPhoneNumber({ message: i18n('validation.IsValidPhoneNumber', { path: 'general', property: 'auth.phoneNumber' }), }) phoneNumber!: string; @ApiProperty({ example: 'John' }) @IsString({ message: i18n('validation.IsString', { path: 'general', property: 'customer.firstName' }) }) @IsNotEmpty({ message: i18n('validation.IsNotEmpty', { path: 'general', property: 'customer.firstName' }) }) firstName!: string; @ApiProperty({ example: 'Doe' }) @IsString({ message: i18n('validation.IsString', { path: 'general', property: 'customer.lastName' }) }) @IsNotEmpty({ message: i18n('validation.IsNotEmpty', { path: 'general', property: 'customer.lastName' }) }) lastName!: string; @ApiProperty({ example: '2001-01-01' }) @IsDateString({}, { message: i18n('validation.IsDateString', { path: 'general', property: 'customer.dateOfBirth' }) }) @IsAbove18({ message: i18n('validation.IsAbove18', { path: 'general', property: 'customer.dateOfBirth' }) }) dateOfBirth!: Date; @ApiProperty({ example: 'JO' }) @IsEnum(CountryIso, { message: i18n('validation.IsEnum', { path: 'general', property: 'customer.countryOfResidence' }), }) @IsOptional() countryOfResidence: CountryIso = CountryIso.SAUDI_ARABIA; @ApiProperty({ example: 'test@test.com' }) @IsEmail({}, { message: i18n('validation.IsEmail', { path: 'general', property: 'auth.email' }) }) @IsOptional() email!: string; @ApiProperty({ example: 'Abcd1234@' }) @Matches(PASSWORD_REGEX, { message: i18n('validation.Matches', { path: 'general', property: 'auth.password' }), }) password!: string; @ApiProperty({ example: 'Abcd1234@' }) @Matches(PASSWORD_REGEX, { message: i18n('validation.Matches', { path: 'general', property: 'auth.confirmPassword' }), }) confirmPassword!: string; @ApiProperty({ example: '111111' }) @IsNumberString( { no_symbols: true }, { message: i18n('validation.IsNumberString', { path: 'general', property: 'auth.otp' }) }, ) @MaxLength(DEFAULT_OTP_LENGTH, { message: i18n('validation.MaxLength', { path: 'general', property: 'auth.otp', length: DEFAULT_OTP_LENGTH }), }) @MinLength(DEFAULT_OTP_LENGTH, { message: i18n('validation.MinLength', { path: 'general', property: 'auth.otp', length: DEFAULT_OTP_LENGTH }), }) otp!: string; }