AddToCart in parallel doesn't work
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.
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 Damn good catch, bro.