@graphql_ru
GraphQL — русскоговорящее сообщество

Общаемся на темы, посвященные GraphQL и опыту его использования. Проблемы. Новости. Решения. Вам могут быть полезны: @apollo_ru, @react_js, @vuejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание в чате было полезным и комфортным.

352 members

Архив канала @graphql_ru 18 августа 2017 г.

11:07:20 ДП
User 126017448
Всем привет, пытаюсь реализовать у себя CRUD и столкнулся с проблемой - не могу найти толковых примеров с ним. Я хочу одним запросом выполнить сразу несколько действий.  Так как мутации выполняются последовательно, я попытался получить результат выполнения одной функции (id созданной записи) и использовать его в другой (для обновления этой записи). Но передать его я могу только через переменную, которая видна во всех резолверах. Как это обычно вообще делается?
https://gist.github.com/anonymous/07f37dfa44e50dc19331a10804512ab7
gist.github.com/anonymous/07f37dfa44e50dc19331a10804512ab7
11:37:25 ДП
User 128278891
Может не надо так делать? Не стоит сделать отдельную мутацию, которая за собой будет скрывать эту связь между сущностями?
11:38:32 ДП
User 128278891
Например, в качестве аргумента передавать композитный объект.
11:48:50 ДП
User 126017448
Не очень хочется плодить функции
 (и классы). У меня их около 20 и для каждой прийдется что-то подобное писать. + не могу найти нигде примеров использования чего-то подобного.
11:56:41 ДП
User 141958411
User 126017448
Всем привет, пытаюсь реализовать у себя CRUD и столкнулся с проблемой - не могу найти толковых примеров с ним. Я хочу одним запросом выполнить сразу несколько действий.  Так как мутации выполняются последовательно, я попытался получить результат выполнения одной функции (id созданной записи) и использовать его в другой (для обновления этой записи). Но передать его я могу только через переменную, которая видна во всех резолверах. Как это обычно вообще делается?
https://gist.github.com/anonymous/07f37dfa44e50dc19331a10804512ab7
gist.github.com/anonymous/07f37dfa44e50dc19331a10804512ab7
export default compose(
  graphql(query, configObject1),
  graphql(query2, configObject2)
)(Component)
11:58:02 ДП
User 141958411
User 141958411
export default compose(
  graphql(query, configObject1),
  graphql(query2, configObject2)
)(Component)
const configObject1 = {
  options: props => ({

  })
}
11:58:43 ДП
User 141958411
т.е.  сверху вниз будут запросы выполняться  и в нижних будут видны данные из верхних
11:59:22 ДП
User 141958411
в configObject можно обработать данные из выполненных запросов
12:01:05 ПП
User 141958411
Вот рабочий пример, правда тут вместо верхнего запроса используется connect redux,  но смысл тот же самый, в данном случае из redux передается searchValue

const mapStateToProps = ({ navBar, auth }) => ({
  searchValue: navBar.searchValue,
  userId: auth.userId
})

const configObject = {
  options: ({ endCursor, searchValue = '', ...props }) => ({
    variables: {
      first: 16,
      after: endCursor || null,
      searchValue
    }
  }),
  force: true,
  props
}

export default compose(
  connect(mapStateToProps),
  graphql(ALL_POSTS, configObject)
)(PostsList)
12:52:10 ПП
User 126017448
Ну т.е. это предлагается уже не на серверной строне делать, а чисто в  js?
12:56:27 ПП
User 126017448
т.е. на сервере достаточно просто уметь обрабатывать мутации по одной?
01:16:59 ПП
User 141958411
User 126017448
Ну т.е. это предлагается уже не на серверной строне делать, а чисто в  js?
Смотря что требуется, если между мутациями нужны данные с клиента, то на клиенте последовательно
01:17:33 ПП
User 141958411
А если данные клиента не нужны, тогда на сервере это можно реализовать выставив клиенту одну мутацию
01:19:21 ПП
User 141958411
User 126017448
т.е. на сервере достаточно просто уметь обрабатывать мутации по одной?
На сервере можно сделать сколько угодно вариантов мутаций
01:19:45 ПП
User 126017448
Ну вот мой вопрос был в том, можно ли (нужно?) эту мутацию разбить на несколько? Просто у меня много операций, и мне нужно их в разном порядке выполнять, делать под каждый варианрт отдельную мутацию - плодить классы и функции
01:20:39 ПП
User 126017448
У меня много операций и я не могу получается сделать из них комбинацию любую, не слив их в одну мутацию
01:22:45 ПП
User 126017448
или правильный подход - всегда делать такую мутацию?
01:28:59 ПП
User 141958411
User 126017448
У меня много операций и я не могу получается сделать из них комбинацию любую, не слив их в одну мутацию
Если независимые мутации то их вроде можно одновременное выполнять
01:29:24 ПП
User 141958411
Или собираются добавить эту возможность
01:30:01 ПП
User 126017448
Я хочу зависимые сделать
01:34:16 ПП
User 141958411
User 126017448
Я хочу зависимые сделать
Значит придётся плодить варианты мутаций на сервере
01:34:58 ПП
User 141958411
Или пинг понг с клиентом, как я выше показывал, но этот вариант не очень хороший в данном случае
01:38:15 ПП
User 126017448
Просто я могу легко результат первой мутации класть в контекст, и доставать его во второй. Тогда я смогу выполнять две мутации подряд без пинг-понга и 50+ мутаций на сервере. Но, как я понял, 1) так не делают 2) будут проблемы с возвратом ошибок (даже если 1 мутация выдаст ошибку, вторая начнет выполняться зачем-то)
01:40:10 ПП
User 141958411
User 126017448
Просто я могу легко результат первой мутации класть в контекст, и доставать его во второй. Тогда я смогу выполнять две мутации подряд без пинг-понга и 50+ мутаций на сервере. Но, как я понял, 1) так не делают 2) будут проблемы с возвратом ошибок (даже если 1 мутация выдаст ошибку, вторая начнет выполняться зачем-то)
может я не понимаю, но с клиента получится только сделать сначала одну мутацию, получить ответ, потом сделать следующую опять получтиь ответ и т.д. это и есть пинг понг
01:40:46 ПП
User 141958411
а нужно, как я понял сделать мутацию и если все хорошо чтобы на сервере сделалась следующая мутация и потом еще одна и потом вернулся ответ на клиент
02:21:22 ПП
User 126017448
Ну я пришел к выводу, что 
если операции создания блоков иерархии явные - это каждый отдельный вызов, и за id следит юзер (то что мы говорили про пинг-понг)
если неявные - то только создание внутренней мутации внутри родительской
02:21:37 ПП
User 126017448
Спасибо за помощь