Нужны рекомендации по структуре распознавателей Graphql

#graphql

Вопрос:

Я пытаюсь создать структуру для распознавателей GraphQL, но немного застрял.

Представьте, что у нас есть разные организации типа продаж

 type Sale {  name: String  value: Float  type: Int }  

В настоящее время у нас есть запрос, который получает все продажи по типу и сравнивает их для разных диапазонов дат

 type SaleResult {  name: String  main_value: Float  compare_value: Float  difference: Float  type: Int }  input DateParamsInput {  start: DateTime!  end: DateTime! }  input SomeFilterInput {  dateRangeMain: DateParamsInput  dateRangeCompare: DateParamsInput  type: [Int] }  Query {  getSales(filter: SomeFilterInput) [SaleResult] }  

и теперь нам было предложено добавить переключатель для захвата данных либо без сравнения, либо с ним. Мы можем добавить новый запрос, но я пытаюсь найти способ сделать один запрос для обоих случаев

Есть решение, как я его вижу

 Query {  getSales2(type: [Int]) {  sale {  name  type  diff(mainRange, compareRange) {  main_value  compare_value  diff  }  value(mainRange)  }  } }  

В этом случае у нас будет 2 вложенных решателя: diff и value . Первый может возвращать данные со значением сравнения, а другой-для одного значения

Другой способ

 Query {  getSales2(type: [Int], mainRange) {  sale {  name  type  value  compare(compareRange) {  value  diff  }  }  } }  

но в этом случае мы должны иметь значение, прежде чем начнется распознаватель сравнения, и я не уверен, что это рабочий подход

Поскольку у меня нет никого, кто мог бы подтвердить это, я прошу вас о помощи. У тебя есть какие-нибудь мысли?

Комментарии:

1. Как насчет того, чтобы просто не заполнять compare_value и difference из существующего SaleResult типа, если вы не получили никаких dateRangeCompare входных данных?

2. Вы имеете в виду наличие двух атрибутов фильтра: mainRange и compareRange? Я думаю, что этот подход не поддается расширению, не так ли? Но это определенно сработает