import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; import { Transform } from 'class-transformer'; import { IsArray, IsDateString, IsNotEmpty, IsNumber, IsOptional, IsString, IsUUID } from 'class-validator'; import { i18nValidationMessage as i18n } from 'nestjs-i18n'; export class CreateGoalRequestDto { @ApiProperty() @IsString({ message: i18n('validation.IsString', { path: 'general', property: 'goal.name' }) }) @IsNotEmpty({ message: i18n('validation.IsNotEmpty', { path: 'general', property: 'goal.name' }) }) name!: string; @ApiPropertyOptional() @IsString({ message: i18n('validation.IsString', { path: 'general', property: 'goal.description' }) }) @IsOptional() description?: string; @ApiProperty({ example: '2021-12-31' }) @IsDateString({}, { message: i18n('validation.IsDateString', { path: 'general', property: 'goal.dueDate' }) }) dueDate!: string; @ApiProperty() @IsNumber({}, { message: i18n('validation.IsNumber', { path: 'general', property: 'goal.targetAmount' }) }) @IsNotEmpty({ message: i18n('validation.IsNotEmpty', { path: 'general', property: 'goal.targetAmount' }) }) targetAmount!: number; @ApiProperty() @IsArray({ message: i18n('validation.IsArray', { path: 'general', property: 'goal.categoryIds' }) }) @IsUUID('4', { each: true, message: i18n('validation.IsUUID', { path: 'general', property: 'goal.categoryIds' }) }) @Transform(({ value }) => (typeof value === 'string' ? [value] : value)) categoryIds!: string[]; @ApiPropertyOptional() @IsUUID('4', { message: i18n('validation.IsUUID', { path: 'general', property: 'goal.imageId' }) }) @IsOptional() imageId?: string; }