Мутации данных

В терминах GraphQL изменение данных называется мутацией.

Мутации данных выполняются в рамках пакета packet.

Список доступных мутаций можно найти в разделе MUTATIONS, справочника DOCS.

После вызова мутации следует указывать содержимое ответа.

mutation {
  packet {
    #Создание компании, предоставляющей подарки
    createGiftVendor(input: {
      name: "Sberdevices"
    }){
      #Ответ будет содержать идентификатор компании     
      id
    }
  }
}

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

mutation createVendor {
  packet {
    createGiftVendor(input: {
      name: "MyVendor"
    }){
      id
    }
  }
}

Создание нескольких сущностей

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

mutation createVendor {
  p1: packet {
    createGiftVendor(input: {
      name: "MyVendor"
    }){
      id
    }
  }
  p2: packet {
    createGiftVendor(input: {
      name: "AnotherVendor"
    }){
      id
    }
  }
}

Предотвращение дублирования

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

mutation createGift {
  #Уникальность подарка опредляется по его серийному номеру
  p1:packet(idempotencePacketId:"123456") {
    createGift(input:{
      kind: TSHIRT
      vendor: 6966642249338191873
      serialNumber: "123456"
    }){id}
  }
}

Если подарок с заданным серийным номером уже существует в базе, в результате повторного выполнения запроса сервис вернет идентификатор подарка.

Оптимистические блокировки

Для использования оптимистической блокировки записей используйте параметр aggregateVersion.

mutation updateRequest {
  packet(aggregateVersion:1){
    updateGiftRequestCounter(input:{
      id: 6967338499520528385
      counter:1
      lastRequest:"2021-05-09T20:20:00.000"
    }) {
      counter
      lastRequest
    }
  }
}

Заметили ошибку?

Выделите текст и нажмите Ctrl + Enter, чтобы сообщить нам о ней