ACSD-53148: duas solicitações paralelas no GraphQL para adicionar o mesmo produto configurável
O patch ACSD-53148 corrige o problema em que duas solicitações paralelas no GraphQL para adicionar o mesmo produto configurável ao carrinho resultaram em dois itens separados no carrinho com o mesmo SKU de produto. Este patch está disponível quando o Quality Patches Tool (QPT) 1.1.37 está instalado. A ID do patch é ACSD-53148. Observe que o problema está programado para ser corrigido no Adobe Commerce 2.4.7.
Produtos e versões afetados
O patch foi criado para a versão do Adobe Commerce:
- Adobe Commerce (todos os métodos de implantação) 2.4.5-p2
Compatível com as versões do Adobe Commerce:
- Adobe Commerce (todos os métodos de implantação) 2.4.4 - 2.4.6-p2
magento/quality-patches
para a versão mais recente e verifique a compatibilidade na Quality Patches Tool: página Procurar patches. Use a ID do patch como palavra-chave de pesquisa para localizar o patch.Problema
Duas solicitações paralelas no GraphQL para adicionar o mesmo produto configurável ao carrinho resultaram em dois itens separados no carrinho com o mesmo SKU de produto.
Etapas a serem reproduzidas:
-
Crie um produto configurável com SKU Test e um produto simples com SKU Test-A.
-
Crie um novo carrinho vazio via GraphQL (altere o local com seu próprio URL):
code language-graphql curl --location 'http://mag.local/graphql' \ --header 'Store: default' \ --header 'Content-Type: application/json' \ --data '{"query":"mutation{\n createEmptyCart\n}","variables"{}}'
-
Execute duas solicitações simultâneas para adicionar o mesmo produto ao carrinho (altere cartID e o local para ambas as solicitações):
code language-graphql curl --location 'http://mag.local/graphql' --header 'Store: default' --header 'Content-Type: application/json' --data '{"query":"mutation($cartId: String!, $preSku: String!, $preParentSku: String!) {\r\n addConfigurableProductsToCart(\r\n input: {\r\n cart_id: $cartId\r\n cart_items: [\r\n {\r\n parent_sku: $preParentSku\r\n data: {\r\n quantity: 1\r\n sku: $preSku\r\n }\r\n }\r\n ]\r\n }\r\n ) {\r\n cart {\r\n items {\r\n id\r\n product {\r\n name\r\n sku\r\n }\r\n quantity\r\n \r\n prices {\r\n price {\r\n value\r\n currency\r\n }\r\n }\r\n ... on ConfigurableCartItem {\r\n configurable_options {\r\n option_label\r\n value_label\r\n }\r\n }\r\n }\r\n total_quantity\r\n prices {\r\n grand_total {\r\n value\r\n currency\r\n }\r\n discounts {\r\n amount {\r\n value\r\n currency\r\n }\r\n label\r\n }\r\n subtotal_excluding_tax {\r\n value\r\n currency\r\n }\r\n } \r\n }\r\n }\r\n}","variables":{"cartId":"VV85vRfmCrRm0aKLKkNDrXH2S5y7sSpf","preParentSku":"Test","preSku":"Test-A"}}' & curl --location 'http://mag.local/graphql' --header 'Store: default' --header 'Content-Type: application/json' --data '{"query":"mutation($cartId: String!, $preSku: String!, $preParentSku: String!) {\r\n addConfigurableProductsToCart(\r\n input: {\r\n cart_id: $cartId\r\n cart_items: [\r\n {\r\n parent_sku: $preParentSku\r\n data: {\r\n quantity: 1\r\n sku: $preSku\r\n }\r\n }\r\n ]\r\n }\r\n ) {\r\n cart {\r\n items {\r\n id\r\n product {\r\n name\r\n sku\r\n }\r\n quantity\r\n \r\n prices {\r\n price {\r\n value\r\n currency\r\n }\r\n }\r\n ... on ConfigurableCartItem {\r\n configurable_options {\r\n option_label\r\n value_label\r\n }\r\n }\r\n }\r\n total_quantity\r\n prices {\r\n grand_total {\r\n value\r\n currency\r\n }\r\n discounts {\r\n amount {\r\n value\r\n currency\r\n }\r\n label\r\n }\r\n subtotal_excluding_tax {\r\n value\r\n currency\r\n }\r\n } \r\n }\r\n }\r\n}","variables":{"cartId":"VV85vRfmCrRm0aKLKkNDrXH2S5y7sSpf","preParentSku":"Test","preSku":"Test-A"}}'
-
Faça com que o carrinho veja os itens (altere cartId e o local):
code language-graphql curl --location 'http://mag.local/graphql' \ --header 'Store: default' \ --header 'Content-Type: application/json' \ --data '{"query":"{\n cart(cart_id: \"VV85vRfmCrRm0aKLKkNDrXH2S5y7sSpf\") {\n items {\n id\n product {\n name\n sku\n }\n quantity\n }\n\n }\n}\n","variables":{}}'
Resultados esperados:
Item listado uma vez com qty = 2.
{"data":{"cart":{"items":[{"id":"5","product":{"name":"config1","sku":"config1"},"quantity":2}]}}}%
Resultados reais:
Item listado duas vezes com qty = 1.
{"data":{"cart":{"items":[{"id":"1","product":
{"name":"config1","sku":"config1"},"quantity":1},
{"id":"3","product":{"name":"config1","sku":"config1"},"quantity":1}]}}}%
Aplicar o patch
Para aplicar patches individuais, use os links a seguir, dependendo do método de implantação:
- Adobe Commerce ou Magento Open Source no local: Quality Patches Tool > Uso no guia Quality Patches Tool.
- Adobe Commerce na infraestrutura em nuvem: Atualizações e patches > Aplicar patches no guia do Commerce na infraestrutura em nuvem.
Leitura relacionada
Para saber mais sobre Quality Patches Tool, consulte:
- Quality Patches Tool lançamento: uma nova ferramenta para autoatender patches de qualidade na base de dados de conhecimento de suporte.
- Verifique se há patch disponível para o problema do Adobe Commerce usando o Quality Patches Tool no guia Quality Patches Tool.
Para obter informações sobre outros patches disponíveis no QPT, consulte Quality Patches Tool: Pesquisar patches no guia Quality Patches Tool.