Validation error with zodValidationPipe in nestjs

245 views Asked by At

I have the following graphql.

input UpdateStudentInput {
  name: String
  motherName: String
  birthDate: String
  gender: Gender
  email: String
  password: String
  avatar: String
}

And I have the following mutation:

updateStudent(updateStudentInput: UpdateStudentInput!, studentId: String): Student!

but when I try to mutate I get a validation error :

mutation {
  updateStudent(updateStudentInput: {
    name: "Abner Matheus Gomes 23"
  }, studentId: "190fc1f5-2e47-4ead-9a00-352e2081a96f") {
    id
    name
    motherName
    birthDate
    gender
    email
    avatar
    isActive
    createdAt
    updatedAt
    createdBy
    updatedBy
  }
}

The error:

{
  "errors": [
    {
      "message": "Validation failed",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "path": [
        "updateStudent"
      ],
      "extensions": {
        "code": "BAD_REQUEST",
        "stacktrace": [
          "ZodValidationException: Validation failed",
          "    at createZodValidationException (/home/theabnermatheus/Workspace/interacoope-server/node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_@[email protected][email protected]/node_modules/nestjs-zod/dist/index.js:85:10)",
          "    at validate (/home/theabnermatheus/Workspace/interacoope-server/node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_@[email protected][email protected]/node_modules/nestjs-zod/dist/index.js:95:11)",
          "    at ZodValidationPipe2.transform (/home/theabnermatheus/Workspace/interacoope-server/node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_@[email protected][email protected]/node_modules/nestjs-zod/dist/index.js:942:16)",
          "    at /home/theabnermatheus/Workspace/interacoope-server/node_modules/.pnpm/@[email protected]_@[email protected]_@[email protected][email protected][email protected]/node_modules/@nestjs/core/pipes/pipes-consumer.js:16:33",
          "    at processTicksAndRejections (node:internal/process/task_queues:95:5)"
        ],
        "originalError": {
          "statusCode": 400,
          "message": "Validation failed",
          "errors": [
            {
              "code": "invalid_type",
              "expected": "object",
              "received": "string",
              "path": [],
              "message": "Expected object, received string"
            }
          ]
        }
      }
    }
  ],
  "data": null
}

my resolver:

  @Mutation('updateStudent')
  @UsePipes(new ZodValidationPipe(UpdateStudentInputSchema))
  async update(
    @Args('updateStudentInput') updateStudentInput: UpdateStudentInput,
    @Args('studentId') studentId: string,
  ): Promise<Student> {
    console.log('updateStudentInput', updateStudentInput);
    return await this.studentService.update(studentId, updateStudentInput);
  }

and my pipeValidationDto:

export const UpdateStudentInputSchema = z.object({
  name: z.string().min(3).max(255).optional(),
  motherName: z.string().min(3).max(255).optional(),
  birthDate: z.string().min(3).max(30).optional(),
  gender: z.string().min(3).max(10).optional(),
  email: z.string().email().optional(),
  password: z.string().optional(),
  avatar: z.string().optional(),
});

export class UpdateStudentInput extends createZodDto(
  UpdateStudentInputSchema,
) {}

where is the error ?

I'm doing the same thing in other mutations and it works normally.

note: i want the user to be able to enter only one of the fields and not have to enter all of them.

0

There are 0 answers