import { registerDecorator, ValidationOptions, ValidatorConstraint, ValidatorConstraintInterface } from 'class-validator'; import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; @ValidatorConstraint({ async: true }) export class UniqueAlbumTitle implements ValidatorConstraintInterface { constructor(@InjectRepository(Album) private albumRepository: Repository ) {} validate(albumTitle: string) { return this.albumRepository.findOneBy({ where: { id: title }).then((albumTitle) => { return albumTitle === undefined; }); } } export function AlbumTitleUnique(validationOptions?: ValidationOptions) { return function (object: object, propertyName: string) { registerDecorator({ target: object.constructor, propertyName: propertyName, options: validationOptions, constraints: [], validator: AlbumTitleUnique, }); }; }