wp-graphql-woocommerce icon indicating copy to clipboard operation
wp-graphql-woocommerce copied to clipboard

AddToCart in parallel doesn't work

Open Shazamepool opened this issue 1 year ago • 2 comments

Describe the bug When I make several addToCart in parallel, only the products added by the last addToCart launched will appear in my cart.

To Reproduce 0 - It's easier to reproduce on a slow site 1 - Quickly launch 3 addToCart for different products in parallel with the same woocommerce-session header. 2 - Note in their returns that the cart contains only the product just added. 3 - Send a getCart with the same header and see that only the last product added appears in the cart.

 mutation addToCart($productId: Int!, $quantity: Int) {
    addToCart(input: {productId: $productId, quantity: $quantity}) {
        cart {
            contents {
                nodes {
                    quantity
                }
            }
           total
       }
   }
}

Expected behavior All added products should appear in the cart

Plugin Versions

  • WooGraphQL Version: 0.19.0
  • WPGraphQL Version: 1.23.0
  • WordPress Version: 6.5.2
  • WooCommerce Version: 7.9.0

Additional context The bug was caused by changing the graphql_process_http_request_response action to graphql_mutation_response when upgrading to version 0.19.0 of the plugin.

Shazamepool avatar Apr 12 '24 13:04 Shazamepool

I solved this problem by modifying the code of the pop_transaction_id function:

  • I added a negation to the "str_starts_with" condition. This will execute the rest of the code if the mutation seems to be correctly formed.

  • In the case where the transaction is not at the top of the transactionQueue I've added these 2 lines of code:

        $this->save_transaction_queue( null );
        $this->transaction_id = null;

To avoid keeping an invalid transactionQueue.

Shazamepool avatar Apr 15 '24 13:04 Shazamepool

@Shazamepool Damn good catch, bro.

kidunot89 avatar Apr 30 '24 13:04 kidunot89