Как использовать переменные в мутации GraphQL для массовой корректировки инвентаря? - PullRequest
0 голосов
/ 16 мая 2019

Я пытался выполнить массовую настройку элемента инвентаризации вариантов своего продукта Shopify, как описано в этой статье: https://www.shopify.com/partners/blog/multi-location_and_graphql

Я попытался жестко закодировать идентификатор варианта в запросе, и он отлично работал:

<<-'GRAPHQL'
      mutation {
      inventoryBulkAdjustQuantityAtLocation(
        locationId: "gid://shopify/Location/5537988719",
        inventoryItemAdjustments: [
          {inventoryItemId: "gid://shopify/InventoryItem/21112836292719", availableDelta: 1},
          {inventoryItemId: "gid://shopify/InventoryItem/21112836325487", availableDelta: 10}
          ]) {
        inventoryLevels {
          available
        }
      }
    }
  GRAPHQL

Теперь я пытаюсь установить идентификатор варианта продукта в виде переменных, как показано ниже:

require "graphql/client"
require "graphql/client/http"

class HomeController < ApplicationController
  API_KEY       = 'XXXXXX'.freeze
  PASSWORD      = 'XXXXXX'.freeze
  SHARED_SECRET = 'XXXXXX'.freeze
  SHOP_NAME     = 'xxxxxx'.freeze
  API_VERSION   = '2019-04'.freeze

  shop_url                      = "https://#{API_KEY}:#{PASSWORD}@#{SHOP_NAME}.myshopify.com/admin"
  ShopifyAPI::Base.site         = shop_url
  ShopifyAPI::Base.api_version  = API_VERSION
  CLIENT                        = ShopifyAPI::GraphQL.new

  BULK_ADJUST = CLIENT.parse <<-'GRAPHQL'
      mutation inventoryBulkAdjustQuantityAtLocation($inventoryItemAdjustments: [InventoryAdjustItemInput!]!, $locationId: ID!) {
        inventoryBulkAdjustQuantityAtLocation(inventoryItemAdjustments: $inventoryItemAdjustments, locationId: $locationId) {
          inventoryLevels {
            id
          }
          userErrors {
            field
            message
          }
        }
      }
  GRAPHQL

  def bulk_update_inventory
    inventoryItemAdjustments = [
        { "inventoryItemId" => "gid://shopify/InventoryItem/1234", "availableDelta" => 1 },
        { "inventoryItemId" => "gid://shopify/InventoryItem/5678", "availableDelta" => 10 }
    ]

    variables = {
        "inventoryItemAdjustments" => inventoryItemAdjustments,
        "locationId" => "gid://shopify/Location/9012"
    }

      result = CLIENT.query(BULK_ADJUST,
                          variables: variables)
    render :json => { :result => result }
  end

end

Когда я пытаюсь выполнить запрос, я получаю следующую ошибку:

Unknown action

The action 'bulk_update_inventory' could not be found for HomeController

ТамКто-нибудь знает, почему у меня эта ошибка?

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

проверьте файл маршрутов и убедитесь, что вы настроили его для этого специального пути.

0 голосов
/ 16 мая 2019

Наконец-то получил ответ! Правильный запрос был:

BULK_ADJUST = CLIENT.parse <<-'GRAPHQL'
      mutation($inventoryItemAdjustments: [InventoryAdjustItemInput!]!, $locationId: ID!) {
        inventoryBulkAdjustQuantityAtLocation(inventoryItemAdjustments: $inventoryItemAdjustments, locationId: $locationId) {
          inventoryLevels {
            id
          }
          userErrors {
            field
            message
          }
        }
      }
  GRAPHQL

Слово "inventoryBulkAdjustQuantityAtLocation" после ключевого слова "мутация" пришлось удалить.

...