Graphql: как определить тип для использования конкретного экземпляра при разрешении другого типа? - PullRequest
0 голосов
/ 28 октября 2018

У меня есть тип User и тип Book, определенные следующим образом:

type User {
  id: ID!
  borrowedBooks: [Book]
}

type Book {
  id: ID!
  name: String
  borrowedBy: [User]
}

Теперь я хотел бы сохранить рейтинг пользователя для каждой книги.Мой вопрос: как мне определить схему, чтобы я мог запросить рейтинг пользователя для каждой заимствованной книги?Могу ли я запросить рейтинг, как показано ниже, и если нет, то каков общий метод решения подобных ситуаций?

getUser(id: "xxx"): {
  borrowedBooks: {
    id
    name
    rating # <------ get the rating value
  }
}

1 Ответ

0 голосов
/ 29 октября 2018

Обычно плохо добавлять поля в тип, который будет заполняться только в определенном контексте.Вы могли бы добавить rating к типу Book, но тогда вы могли бы разрешить его только значением при получении списка книг, которые были заимствованы - если вы выбираете книгу илимассив книг для какого-то другого поля, поле rating не обязательно имеет смысл.

Возможно, вам понадобится другой тип (и другая таблица, если мы говорим о базовой базе данных) для присоединенияпользователь со своими заимствованными книгами.Что-то вроде:

type User {
  id: ID!
  checkouts: [Checkout]
}

type Book {
  id: ID!
  name: String
  checkouts: [Checkout]
}

type Checkout {
  user: User
  book: Book
  rating: Int
  lastCheckoutDate: Date
  # other fields specific to the checkout itself
}

Это делает результирующие данные, возвращаемые запросом, немного более вложенными, но также облегчает моделирование и анализ данных.Решающие устройства для этих полей также могут быть относительно простыми - поле checkouts для User и Book просто получает все Checkouts по User или Book id.Поля user и book в Checkout просто запрашивают User или Book по id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...