Использование @ nestjs / graphql для создания вложенных запросов с использованием @ResolveProperty и @Resolvers - PullRequest
1 голос
/ 06 мая 2019

Ссылка на репозиторий type-graphql в репозитории NestJS здесь Мне интересно, как создать еще два слоя в глубине запроса.

В настоящее время настроен запрос рецептов, я смог добавить еще один класс @ObjectType

@ObjectType()
export class Author {
  @Field(type => Int)
  id: number;

  @Field({ nullable: true })
  firstName?: string;

  @Field({ nullable: true })
  lastName?: string;
}

и создал @ResolveProperty внутри Resolver Recipe с:


  @ResolveProperty('author', type => Author)
  async getAuthor(@Parent() recipe) {
    console.log('Resolver auth in recipe', recipe);
   // This will be a database call, just mocking data for now.
    return Promise.resolve({ id: 1, firstName: 'john', lastName: 'smith' });
  }

Все это прекрасно работает (я также создал отдельный распознаватель для автора, но это не мой базовый запрос, поэтому я его не включаю), используя этот запрос GraphQL

{
  recipe(id: "1") {
    title,
    author {
      firstName
    }
  }
}

Этот запрос возвращает

{
  "data": {
    "recipe": {
      "title": "1",
      "author": {
        "firstName": "john"
      }
    }
  }
}

как и должно быть. Мой вопрос сейчас, как мне добавить еще один уровень? Я пытался создать ObjectType "Publisher"

@ObjectType()
export class Publisher {
  @Field(type => Int)
  id: number;
}

Но ни одна из комбинаций создания распознавателей или добавления ResolveProperty в распознаватели Author и Recipe не заставила его работать. Куда я должен поместить код распознавателя, чтобы при разрешении GraphQL объекта Author он также разрешал связанную информацию издателя.

Моя цель - получить такой запрос, как:

{
  recipe(id: "1") {
    title,
    author {
      firstName,
      publisher: {
         id
      }
    }
  }
}

вернется

{
  "data": {
    "recipe": {
      "title": "1",
      "author": {
        "firstName": "jay",
        "publisher": {
           id: 4        
        }
      }
    }
  }
}

Не уверен, что я думаю об этом неправильно, но, похоже, это ключевая идея, которую мне не хватает, чтобы иметь возможность расширить ее! Спасибо.

...