import { ApiProperty } from '@nestjs/swagger'; import { IsEmail, IsEnum, IsNotEmpty, IsOptional, IsString, Matches, ValidateIf } from 'class-validator'; import { i18nValidationMessage as i18n } from 'nestjs-i18n'; import { COUNTRY_CODE_REGEX } from '~/auth/constants'; import { GrantType } from '~/auth/enums'; import { IsValidPhoneNumber } from '~/core/decorators/validations'; export class LoginRequestDto { @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: 'Abcd1234@' }) @IsString({ message: i18n('validation.IsString', { path: 'general', property: 'auth.password' }) }) @ValidateIf((o) => o.grantType === GrantType.PASSWORD) password!: string; @ApiProperty({ example: 'device-123', description: 'Unique device identifier', required: false }) @IsOptional() @IsString({ message: i18n('validation.IsString', { path: 'general', property: 'auth.deviceId' }) }) deviceId?: string; @ApiProperty({ example: 'cXYzABC:APA91bHunvwY7rKpn8N7y6vDxS0qmQ5RZx2C8K...', description: 'Firebase Cloud Messaging token for push notifications', required: false, }) @IsOptional() @IsString({ message: i18n('validation.IsString', { path: 'general', property: 'auth.fcmToken' }) }) fcmToken?: string; @ApiProperty({ example: 'Asia/Riyadh', description: 'Device timezone (auto-detected from device OS)', required: false, }) @IsOptional() @IsString({ message: i18n('validation.IsString', { path: 'general', property: 'auth.timezone' }) }) timezone?: string; }