Как я могу написать запрос GraphQL для проверки нескольких перечислений для одного и того же значения? - PullRequest
0 голосов
/ 14 июля 2020

Я создаю приложение для реагирования с бэкэндом на GraphCMS (которое использует GraphQL для запроса к базам данных). По сути, у меня есть страница, на которой мне нужно запрашивать элементы из 3 разных таблиц, но только там, где их тип элемента соответствует предоставленному типу.

Типы для каждой таблицы указаны как 3 разных перечисления.

Здесь я вызываю метод для запроса API:

graphCMSClient
  .request(query, { articleType: params.extendedContentCategory, reportType: params.extendedContentCategory, videoType: params.extendedContentCategory })
  .then((data) => {
    this.setState({
      data: [...data.reports, ...data.articles, ...data.videos],
    })
  })

Мой запрос graphQL (представленный переменной query выше) выглядит следующим образом:

query getData($articleType: ArticleType, $reportType: ReportType, $videoType: VideoType){
  reports(where: {reportType: $reportType, featured: true}, orderBy: releaseDate_DESC, first: 5) {
    id
    ... other fields
  }
  articles(where: {articleType: $articleType, featured: true}, orderBy: releaseDate_DESC, first: 5) {
    id
    ... other fields
  }
  videos(where: {videoType: $videoType, featured: true}, orderBy: releaseDate_DESC) {
    id
    ... other fields
  }
}

ArticleType, ReportType и VideoType - это 3 разных перечисления.

Причина, по которой один и тот же param передается всем 3 переменным, заключается в том, что эта страница может содержать любые / все эти типы данных - У меня также нет возможности заранее узнать, запрашивает ли пользователь статью, видео, отчет или любую их комбинацию. Более того, есть некоторые типы, которые присутствуют во всех этих 3 - например, ArticleType, ReportType и VideoType все имеют в них значение Economy.

Однако я сохраняю получение этой ошибки: Error: variable 'reportType' with 'Thoughts_Opinions' is not a valid 'ReportType' - это имеет смысл, поскольку тип Thoughts_Opinions находится только в перечислении ArticleType.

Можно ли как-нибудь написать этот запрос? Например, в этом запросе я могу проверить, существует ли значение в перечислении, а затем условно передать его как переменную? Или мне понадобится отдельный запрос, чтобы проверить это в моем коде и изменить запрос на основе этого?

...