bid-tool/auto-bid-server/src/system/validators/is-unique.validator.ts

29 lines
1.0 KiB
TypeScript

import { Injectable } from '@nestjs/common';
import { ValidationArguments, ValidatorConstraint, ValidatorConstraintInterface } from 'class-validator';
import { EntityManager } from 'typeorm';
import { IsUniqueInput } from './decorators/is-unique';
@Injectable()
@ValidatorConstraint({ name: 'isUnique', async: true })
export class IsUniqueValidator implements ValidatorConstraintInterface {
constructor(private readonly entityManager: EntityManager) {}
async validate(value: string, args: ValidationArguments) {
const { column, tableName, queryOption }: IsUniqueInput = args.constraints[0];
const result = await this.entityManager
.getRepository(tableName)
.createQueryBuilder(tableName)
.where({ [column]: value, ...(queryOption || {}) })
.getOne();
return !result;
}
defaultMessage(args: ValidationArguments) {
const { column }: IsUniqueInput = args.constraints[0];
return `${column} $value already exists`;
}
}