es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Valide un array de objetos con class-validator y Nest.js.

Estoy utilizando class-validator con NestJS y tratando de validar un array de objetos, con el siguiente diseño:

[
    {gameId: 1, numbers: [1, 2, 3, 5, 6]},
    {gameId: 2, numbers: [5, 6, 3, 5, 8]}
]

Mi resolutor:

createBet(@Args('createBetInput') createBetInput: CreateBetInput) {
    return this.betsService.create(createBetInput);
}

Mi DTO createBetInput:

import { InputType, Field, Int } from '@nestjs/graphql';
import { IsArray, IsNumber } from 'class-validator';

@InputType()
export class CreateBetInput {
  @IsNumber()
  @Field(() => Int)
  gameId: number;

  @Field(() => [Int])
  @IsArray()
  numbers: number[];
}

He probado algunas soluciones pero no he tenido éxito, sinceramente, no tengo idea de cómo hacer esto.

¿Cómo puedo modificar el DTO para obtener la validación necesaria?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para validar una matriz de objetos, puedes crear un nuevo DTO que incluya una matriz de objetos CreateBetInput. Aquí tienes un ejemplo:

    import { InputType, Field } from '@nestjs/graphql';
    import { IsArray, ValidateNested } from 'class-validator';
    import { Type } from 'class-transformer';
    
    @InputType()
    export class CreateBetsInput {
      @Field(() => [CreateBetInput])
      @ValidateNested({ each: true })
      @Type(() => CreateBetInput)
      bets: CreateBetInput[];
    }
    

    Observa que estamos utilizando los decoradores ValidateNested y Type de class-validator y class-transformer, respectivamente. Estos son necesarios para validar correctamente los objetos anidados.

    Ahora puedes modificar tu resolver para aceptar el nuevo DTO:

    createBet(@Args('createBetsInput') createBetsInput: CreateBetsInput) {
      return this.betsService.create(createBetsInput.bets);
    }
    

    Y finalmente, puedes utilizar este nuevo DTO en tu mutación GraphQL:

    input CreateBetsInput {
      bets: [CreateBetInput!]!
    }
    
    type Mutation {
      createBets(createBetsInput: CreateBetsInput!): [Bet!]!
    }
    

    Con estos cambios, deberías poder validar correctamente una matriz de objetos CreateBetInput.

Comments are closed.