LocalInventory
são as informações de inventário associadas a um determinado local, identificado por place_id
. Por exemplo, uma LocalInventory
pode ser
criada para uma loja ou região em que um determinado preço está disponível.
LocalInventory
tem os campos abaixo:
LocalInventory.price_info
LocalInventory.attributes
LocalInventory.fulfillment_types
As entradas LocalInventory
atuais podem ser vistas usando
Product.local_inventories
, exceto fulfillment_types
, que,
para compatibilidade com versões anteriores, está disponível em
Product.fulfillment_info
. Esse campo é somente para saída. Definir
Product.local_inventories
para APIs CRUD Product
ou SetInventory
não tem
efeito.
Cada par (LocalInventory.place_id,
LocalInventory.fulfillment_types[...])
aponta para o mesmo
par (fulfillment_info.place_ids, fulfillment_info.type)
mencionado na
documentação de atualização de inventário. O fulfillment_types
atualizado por AddLocalInventories
e RemoveLocalInventories
descritos abaixo reflete um mapeamento de cada ID de lugar para uma lista de tipos de fulfillment compatíveis, enquanto fulfillment_info
atualizado por AddFulfillmentPlaces
e RemoveFulfillmentPlaces
reflete um mapeamento de cada tipo de fulfillment específico para uma lista de IDs de lugar compatíveis com esse tipo.
No entanto, os dois tipos de APIs estão modificando as mesmas informações
de fulfillment, e o efeito dos dois tipos de APIs será refletido em
Product.fulfillment_info
.
Métodos de atualização de inventário local
As mudanças nas informações de inventário local de um produto podem ocorrer com muito mais frequência do que as mudanças nas informações de catálogo. Um conjunto especializado de métodos é fornecido para lidar com grandes volumes de atualizações específicas do inventário local. Esses métodos são assíncronos devido a otimizações downstream que oferecem suporte a centenas de atualizações simultâneas por produto, sem sacrificar o desempenho.
AddLocalInventories
O AddLocalInventories
pode ser usado para criar inventários
locais em novos lugares (representados por novos place_id
s) ou atualizar campos
em inventários locais. Os campos adicionados ou atualizados na lista de entradas LocalInventory
no corpo da solicitação podem ser especificados por meio de AddLocalInventoriesRequest.add_mask
. Os valores de add_mask
válidos são:
price_info
: substituiLocalInventory.price_info
.attributes
: substitui todos osLocalInventory.attributes
. Os atributos atuais que não são mencionados no corpo da solicitação são removidos.attributes.PLACEHOLDER_NAME
: substitui apenas o atributo personalizado especificado. Se um nome de atributo existente não for fornecido na solicitação, o atributo será excluído. É possível especificar váriosattributes.PLACEHOLDER_NAME
, desde que o nome de cada atributo seja diferente. No entanto,AddLocalInventoriesRequest.add_mask
não pode incluir os valoresattributes
eattributes.PLACEHOLDER_NAME
na mesma solicitação.fulfillment_types
: substitui todos os tipos de fulfillment compatíveis. Os tipos de fulfillment atuais que não forem mencionados no corpo da solicitação serão removidos.
Proto
{ product: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123" local_inventories: { place_id: "store1" price_info: { currency_code: "USD" price: 100 original_price: 110 cost: 95 } fulfillment_types: "pickup-in-store" fulfillment_types: "ship-to-store" } local_inventories: { place_id: "store2" price_info: { currency_code: "USD" price: 200 original_price: 210 cost: 195 } attributes: { key: "attr1", value: { text: "store2_value" } } fulfillment_types: "custom-type-1" } add_mask: { paths: "price_info" paths: "attributes.attr1" paths: "fulfillment_types" } add_time: { seconds: 100 nanos: 100 } allow_missing: true }
Esta amostra de AddLocalInventoriesRequest
adiciona ou atualiza dois inventários locais com IDs de lugar "store1"
e "store2"
para o produto especificado. Se store1
existir e store2
não existir antes da solicitação, a solicitação atualizará os campos de store1
e criará store2
com os valores de campo fornecidos.
Esse AddLocalInventoriesRequest.add_mask
especifica que price_info
, um único
atributo personalizado com o nome "attr1"
, e fulfillment_types
precisam ser
atualizados usando os valores fornecidos no
AddLocalInventoriesRequest.local_inventories
.
attributes
são atributos associados a um local com nome e valores personalizáveis. Como LocalInventory
de store1
não fornece o valor de attr1
na solicitação, o atributo personalizado attr1
será excluído do LocalInventory
existente de store1
, se houver. store2
vai ter o valor do atributo
attr1
definido como um valor de texto store2_value
. Outros atributos personalizados
existentes em store1
e store2
permanecem intactos.
fulfillment_types
representa uma lista de disponibilidade de fulfillment para uma
Product
em um único local. É o mesmo e aceita os mesmos valores que
fulfillment_info.type
. Este AddLocalInventoriesRequest
especifica que
store1
oferece suporte aos tipos de fulfillment pickup-in-store
e ship-to-store
, enquanto
store1
oferece suporte a custom-type-1
. Os tipos de fulfillment existentes antes dessa atualização que não forem mencionados na solicitação serão excluídos.
Como AddLocalInventoriesRequest.allow_missing
é definido como verdadeiro, mesmo que o produto ainda não exista, as informações atualizadas do inventário local serão armazenadas para quando o produto for criado. A atualização tem o carimbo de data/hora AddLocalInventoriesRequest.add_time
para evitar que atualizações desatualizadas substituam os campos especificados desses IDs de lugar. Para saber mais sobre como evitar
atualizações desatualizadas e armazenar informações de inventário local antes da criação do
produto, consulte
Proteções de carimbo de data/hora para atualizações de inventário local e
Pré-carregamento de informações de inventário.
Proto
{ product: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123" local_inventories: { place_id: "store3" attributes: { key: "attr1", value: { text: "attr1_value" } } attributes: { key: "attr2", value: { numbers: 123 } } } add_mask: { paths: "attributes" } add_time: { seconds: 100 nanos: 100 } }
Esta amostra de AddLocalInventoriesRequest
adiciona ou atualiza um único inventário local com o ID de lugar "store3"
para o produto especificado. Como o
add_mask
contém "attributes"
, todos os atributos personalizados atuais de store3
são excluídos e substituídos por attr1
e attr2
, conforme especificado na solicitação.
Observe que, como allow_missing
não está definido, ele exige que o produto especificado exista. Caso contrário, um erro NOT_FOUND
será gerado.
RemoveLocalInventories
RemoveLocalInventories
pode ser usado para remover inventários locais em lugares com determinados IDs de lugar.
Proto
{ product: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123" place_ids: "store1" place_ids: "store2" remove_time: { seconds: 100 nanos: 100 } allow_missing: true }
Esta amostra de RemoveLocalInventoriesRequest
remove inventários locais de lugares com IDs de lugar "store1"
e "store2"
para o produto especificado. A atualização tem o carimbo de data/hora RemoveLocalInventoriesRequest.remove_time
para evitar que atualizações desatualizadas substituam a exclusão desses IDs de lugares. Para IDs de lugares especificados sem inventários locais, a solicitação também registra o horário de atualização para remove_time
. Para mais informações sobre carimbos de data/hora de atualização, consulte Proteções de carimbo de data/hora para atualizações de inventário local.
Proteções de carimbo de data/hora para atualizações de inventário local
Para proteger contra atualizações fora de ordem, cada campo de inventário local está associado a um horário de atualização mais recente.
O horário de atualização mais recente é registrado para cada par de (place_id, price_info)
,
(place_id, attributes[...])
e
(place_id, fulfillment_types[...])
.
Os métodos AddLocalInventories
e
RemoveLocalInventories
permitem que o autor da chamada especifique
um horário de atualização para quando a solicitação será emitida. Esse horário de atualização é
comparado com o horário da atualização mais recente registrado para os campos de inventário
relevantes, e a atualização será confirmada somente se o horário da atualização for estritamente
após o horário da atualização mais recente.
Por exemplo, suponha que o ID de lugar "store1"
tenha price_info
com o último horário de atualização registrado definido como T
. Se RemoveLocalInventoriesRequest.place_ids
contiver "store1"
, a solicitação removerá price_info
de "store1"
somente se RemoveLocalInventoriesRequest.remove_time
for posterior ao horário T
.
O mesmo acontece com RemoveLocalInventoriesRequest
s.
Na proteção de carimbo de data/hora, é possível que um
RemoveLocalInventoriesRequest
remova apenas alguns campos de uma
LocalInventory
em vez de tudo. Suponha que um inventário local com o ID de lugar "store1"
tenha price_info
com o horário da última atualização registrada definido como T1
e tenha o único atributo personalizado com o nome "attr1"
com o último horário de atualização registrado às T2
. Se um RemoveLocalInventoriesRequest.place_ids
contiver
"store1"
e tiver remove_time
definido como T3
(em que T1 < T3 < T2
), o
price_info
de store_1
será removido, enquanto o atributo attr1
dele permanecerá
permanecido.
Como pré-carregar informações de inventário
Cada um dos métodos de atualização de inventário local permite que o autor da chamada defina
allow_missing
na solicitação. Quando allow_missing
é definido como verdadeiro, uma atualização
de inventário local para um Product
inexistente é processada como se a
Product
existisse de acordo com as especificações do método. As informações de inventário local
vão ser mantidas por, no máximo, dois dias se o
Product
correspondente não for criado usando CreateProduct
nesse
período.