src/common/decorators/albumvalid.decorator.ts
Methods |
|
constructor(albumsService: AlbumsService)
|
||||||
|
Parameters :
|
| defaultMessage | ||||||
defaultMessage(args: ValidationArguments)
|
||||||
|
Parameters :
Returns :
any
|
| Async validate | |||||||||
validate(value: any, args: ValidationArguments)
|
|||||||||
|
Parameters :
Returns :
unknown
|
import {
ValidationArguments,
ValidatorConstraintInterface,
ValidatorConstraint,
ValidationOptions,
registerDecorator,
} from 'class-validator';
import { Injectable } from '@nestjs/common';
import { AlbumsEnum } from '../../utils/enums/responses.enum';
import { AlbumsService } from '../../albums/albums.service';
@ValidatorConstraint({ name: 'IsAlbumValid', async: true })
@Injectable()
export class IsAlbumValidRule implements ValidatorConstraintInterface {
constructor(private readonly albumsService: AlbumsService) {}
async validate(value: any, args: ValidationArguments) {
return !!(await this.albumsService.getAlbum(value));
}
defaultMessage(args: ValidationArguments) {
return AlbumsEnum.INVALID_ALBUM;
}
}
export function IsAlbumValid(validationOptions?: ValidationOptions) {
return function (object: any, propertyName: string) {
registerDecorator({
name: 'IsAlbumValid',
target: object.constructor,
propertyName: propertyName,
options: validationOptions,
validator: IsAlbumValidRule,
});
};
}