Estoy tratando de ejecutar la consulta mongoose en mi validador
Hola, estoy tratando de hacer un decorador personalizado que arroja un error si ya existe un valor para ese campo. Estoy tratando de usar el modelo mangosta dentro de la clase que valida la ruta. A diferencia de resolver/controlador, @InjectModel() no funciona en la clase de validación. Mi validador es así
import { getModelToken, InjectModel } from "@nestjs/mongoose"; import { ValidationArguments, ValidatorConstraint, ValidatorConstraintInterface, } from "class-validator"; import { Model } from "mongoose"; import { User } from "../schema/user.schema"; @ValidatorConstraint({ name: "IsUniqueUser", async: true }) export class UniqueValidator implements ValidatorConstraintInterface { constructor( @InjectModel(User.name) private readonly userModel: Model<User>, ) {} async validate(value: any, args: ValidationArguments) { const filter = {}; console.log(this.userModel); console.log(getModelToken(User.name)); filter[args.property] = value; const count = await this.userModel.count(filter); return !count; } defaultMessage(args: ValidationArguments) { return "$(value) is already taken"; } }y mi DTO que usa el decorador anterior es
@InputType({}) export class UserCreateDTO { @IsString() name: string; @IsUniqueUser({ message: "Phone number is already taken", }) @Field(() => String) phone: string; } La consola dice cannot read value count of undefined lo que implica que el modelo de userModel no está definido.
Quiero ejecutar la consulta en mi validador. ¿Como lo puedo hacer?
De acuerdo con este problema (no se puede inyectar una dependencia)
Debe agregar en su main.ts
import { useContainer } from 'class-validator'; useContainer(app.select(AppModule), {fallbackOnErrors: true}); Luego, debe agregar su UniqueValidator a su módulo como una clase @Injectable()
asi que
... providers: [UniqueValidator], ...Luego, en su DTO puede agregar:
@Validate(UniqueValidator, ['email'], { message: 'emailAlreadyExists', })