Files
zod-backend/src/saving-goals/dtos/request/create-goal.request.dto.ts
2024-12-15 12:44:59 +03:00

36 lines
1.6 KiB
TypeScript

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;
}