import { IsIn, IsNumber, IsOptional, IsString, IsUUID, MinLength } from 'class-validator'; import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; export class UpsertAddressDto { @ApiPropertyOptional({ description: 'ID адреса для обновления' }) @IsOptional() @IsUUID('4', { message: 'ID адреса должен быть UUID' }) addressId?: string; @ApiProperty({ description: 'Тип адреса', enum: ['HOME', 'WORK', 'OTHER'] }) @IsIn(['HOME', 'WORK', 'OTHER'], { message: 'Некорректный тип адреса' }) label!: 'HOME' | 'WORK' | 'OTHER'; @ApiProperty({ description: 'Город' }) @IsString({ message: 'Город должен быть строкой' }) @MinLength(1, { message: 'Укажите город' }) city!: string; @ApiProperty({ description: 'Улица' }) @IsString({ message: 'Улица должна быть строкой' }) @MinLength(1, { message: 'Укажите улицу' }) street!: string; @ApiProperty({ description: 'Дом' }) @IsString({ message: 'Дом должен быть строкой' }) @MinLength(1, { message: 'Укажите дом' }) house!: string; @ApiPropertyOptional({ description: 'Квартира или офис' }) @IsOptional() @IsString({ message: 'Квартира должна быть строкой' }) apartment?: string; @ApiPropertyOptional({ description: 'Комментарий' }) @IsOptional() @IsString({ message: 'Комментарий должен быть строкой' }) comment?: string; @ApiPropertyOptional({ description: 'Широта' }) @IsOptional() @IsNumber({}, { message: 'Широта должна быть числом' }) latitude?: number; @ApiPropertyOptional({ description: 'Долгота' }) @IsOptional() @IsNumber({}, { message: 'Долгота должна быть числом' }) longitude?: number; @ApiPropertyOptional({ description: 'Полный адрес одной строкой' }) @IsOptional() @IsString({ message: 'Полный адрес должен быть строкой' }) fullAddress?: string; }