Необязательный аргумент - Мутация - TypeGraphQL - PullRequest
0 голосов
/ 07 августа 2020

Я хочу обновить firstName и lastName объекта profile.

Я бы хотел, чтобы пользователь мог обновить оба из них или только один из них. Однако Я не знаю, как сделать такую ​​мутацию, чтобы один из аргументов (firstName и lastName) был необязательным.

Мой текущий код Это работает, если пользователь вводит как firstName, так и lastName

  @Mutation(() => Boolean)
  @UseMiddleware(isAuth)
  async updateProfile(
    @Ctx() {payload}: MyContext,
    @Arg('firstName') firstName: string,
    @Arg('lastName') lastName: string,
  ) {

    try {
      const profile = await Profile.findOne({where: { user: payload!.userId}})
      if (profile) {
        profile.firstName = firstName
        profile.lastName = lastName
        await profile.save();

        return true
      }
      return false
    } catch(err) {
      return false
    }
  }

Если я запускаю мутацию (за исключением одного аргумента):

mutation{
  updateProfile(firstName: "test")
}

, я получаю сообщение об ошибке:

"message": "Поле" updateProfile ", аргумент" lastName "типа" String! "Требуется, но он не был предоставлен.

Я думал, что можно обойти передавать аргумент по умолчанию в @Arg, но потом я понял, что аргумент по умолчанию - stati c, а не Dynami c, поэтому я не могу передать firstName или lastName для этого спецификатора c profile

1 Ответ

2 голосов
/ 07 августа 2020

Чтобы сделать аргумент необязательным, передайте второй параметр для @Arg decorate следующим образом:

@Arg('firstName', { nullable: true }) firstName: string,
@Arg('lastName', { nullable: true }) lastName: string,

В GraphQL аргументы либо обязательны, либо нет. Невозможно указать «требуется только один из этих аргументов». Если вам нужна такая проверка logi c, вам нужно будет реализовать ее самостоятельно внутри преобразователя.

...