import { IsInt, IsOptional, IsString, MinLength, Validate } from 'class-validator'; import { Category } from './category.entity'; import { Unique } from './validator'; export class CategoryDto { @IsInt() // checks if value of CategoryDto.id is unique by searching in Category.id in DB @Validate(Unique, [Category]) public id: string; @IsString() // checks if value of CategoryDto.title is unique by searching in Category.title in DB @Validate(Unique, [Category]) public title: string; @IsString() // checks if value of CategoryDto.someField is unique by searching in Category.title in DB @Validate(Unique, [Category, 'title']) public someField: string; @Column() @IsNotEmpty() @IsString() // checks if pair of provided title+description is unique in DB @Validate( Unique, [ Category, ({ object: { title, description } }: { object: CategoryForm }) => ({ title, description, }), ], { message: ({ targetName, }: ValidationArguments) => `${targetName} with the same pair of title and description already exist`, }, ) public description: string; }