diff --git a/.changeset/red-pants-raise.md b/.changeset/red-pants-raise.md new file mode 100644 index 0000000000..cb2f4fa527 --- /dev/null +++ b/.changeset/red-pants-raise.md @@ -0,0 +1,6 @@ +--- +"@medusajs/core-flows": patch +"@medusajs/medusa": patch +--- + +chore(medusa): do not use transactionId for cart operations diff --git a/integration-tests/http/__tests__/cart/store/cart.spec.ts b/integration-tests/http/__tests__/cart/store/cart.spec.ts index 666933bdc9..862d40c6c6 100644 --- a/integration-tests/http/__tests__/cart/store/cart.spec.ts +++ b/integration-tests/http/__tests__/cart/store/cart.spec.ts @@ -1922,7 +1922,7 @@ medusaIntegrationTestRunner({ expect(res.data.order).toEqual(successData) } - expect(failure.length).toBeGreaterThan(0) + expect(failure.length).toBe(0) expect(successData).toEqual( expect.objectContaining({ diff --git a/packages/core/core-flows/src/cart/workflows/refresh-cart-items.ts b/packages/core/core-flows/src/cart/workflows/refresh-cart-items.ts index 79c9b9d3dc..083bc7ddb3 100644 --- a/packages/core/core-flows/src/cart/workflows/refresh-cart-items.ts +++ b/packages/core/core-flows/src/cart/workflows/refresh-cart-items.ts @@ -10,7 +10,7 @@ import { } from "@medusajs/framework/workflows-sdk" import { useQueryGraphStep } from "../../common" import { acquireLockStep, releaseLockStep } from "../../locking" -import { updateLineItemsStep } from "../steps" +import { updateLineItemsStep, validateCartStep } from "../steps" import { cartFieldsForRefreshSteps } from "../utils/fields" import { pricingContextResult } from "../utils/schemas" import { getVariantsAndItemsWithPrices } from "./get-variants-and-items-with-prices" @@ -155,6 +155,8 @@ export const refreshCartItemsWorkflow = createWorkflow( }, }) + validateCartStep({ cart }) + const { lineItems } = getVariantsAndItemsWithPrices.runAsStep({ input: { cart, diff --git a/packages/core/core-flows/src/cart/workflows/refresh-cart-shipping-methods.ts b/packages/core/core-flows/src/cart/workflows/refresh-cart-shipping-methods.ts index 6a34fd9b63..09114b509f 100644 --- a/packages/core/core-flows/src/cart/workflows/refresh-cart-shipping-methods.ts +++ b/packages/core/core-flows/src/cart/workflows/refresh-cart-shipping-methods.ts @@ -11,7 +11,7 @@ import { import { AdditionalData } from "@medusajs/types" import { useQueryGraphStep } from "../../common" import { acquireLockStep, releaseLockStep } from "../../locking" -import { removeShippingMethodFromCartStep } from "../steps" +import { removeShippingMethodFromCartStep, validateCartStep } from "../steps" import { updateShippingMethodsStep } from "../steps/update-shipping-methods" import { listShippingOptionsForCartWithPricingWorkflow } from "./list-shipping-options-for-cart-with-pricing" @@ -109,6 +109,8 @@ export const refreshCartShippingMethodsWorkflow = createWorkflow( return fetchCart ?? input.cart }) + validateCartStep({ cart }) + acquireLockStep({ key: cart.id, timeout: 2, diff --git a/packages/core/core-flows/src/cart/workflows/refresh-payment-collection.ts b/packages/core/core-flows/src/cart/workflows/refresh-payment-collection.ts index ad667807b0..71509cc859 100644 --- a/packages/core/core-flows/src/cart/workflows/refresh-payment-collection.ts +++ b/packages/core/core-flows/src/cart/workflows/refresh-payment-collection.ts @@ -12,6 +12,7 @@ import { useQueryGraphStep } from "../../common" import { acquireLockStep, releaseLockStep } from "../../locking" import { updatePaymentCollectionStep } from "../../payment-collection" import { deletePaymentSessionsWorkflow } from "../../payment-collection/workflows/delete-payment-sessions" +import { validateCartStep } from "../steps" /** * The details of the cart to refresh. @@ -107,6 +108,8 @@ export const refreshPaymentCollectionForCartWorkflow = createWorkflow( return fetchCart ?? input.cart }) + validateCartStep({ cart }) + acquireLockStep({ key: cart.id, timeout: 2, diff --git a/packages/core/core-flows/src/cart/workflows/update-cart-promotions.ts b/packages/core/core-flows/src/cart/workflows/update-cart-promotions.ts index 8864f5b985..b16bb99649 100644 --- a/packages/core/core-flows/src/cart/workflows/update-cart-promotions.ts +++ b/packages/core/core-flows/src/cart/workflows/update-cart-promotions.ts @@ -18,6 +18,7 @@ import { prepareAdjustmentsFromPromotionActionsStep, removeLineItemAdjustmentsStep, removeShippingMethodAdjustmentsStep, + validateCartStep, } from "../steps" import { updateCartPromotionsStep } from "../steps/update-cart-promotions" import { cartFieldsForRefreshSteps } from "../utils/fields" @@ -96,6 +97,8 @@ export const updateCartPromotionsWorkflow = createWorkflow( return input.cart ?? fetchCart }) + validateCartStep({ cart }) + acquireLockStep({ key: cart.id, timeout: 2, diff --git a/packages/core/core-flows/src/cart/workflows/update-cart.ts b/packages/core/core-flows/src/cart/workflows/update-cart.ts index 647b06cc53..3678bb7d58 100644 --- a/packages/core/core-flows/src/cart/workflows/update-cart.ts +++ b/packages/core/core-flows/src/cart/workflows/update-cart.ts @@ -24,6 +24,7 @@ import { findOrCreateCustomerStep, findSalesChannelStep, updateCartsStep, + validateCartStep, } from "../steps" import { validateSalesChannelStep } from "../steps/validate-sales-channel" import { refreshCartItemsWorkflow } from "./refresh-cart-items" @@ -111,6 +112,8 @@ export const updateCartWorkflow = createWorkflow( }, }).config({ name: "get-cart" }) + validateCartStep({ cart: cartToUpdate }) + const cartDataInput = transform( { input, cartToUpdate }, (data: { input: UpdateCartWorkflowInput; cartToUpdate: CartDTO }) => { diff --git a/packages/core/core-flows/src/cart/workflows/update-tax-lines.ts b/packages/core/core-flows/src/cart/workflows/update-tax-lines.ts index 40a1506e3e..afdddb990c 100644 --- a/packages/core/core-flows/src/cart/workflows/update-tax-lines.ts +++ b/packages/core/core-flows/src/cart/workflows/update-tax-lines.ts @@ -11,7 +11,7 @@ import { import { useQueryGraphStep } from "../../common" import { acquireLockStep, releaseLockStep } from "../../locking" import { getItemTaxLinesStep } from "../../tax/steps/get-item-tax-lines" -import { setTaxLinesForItemsStep } from "../steps" +import { setTaxLinesForItemsStep, validateCartStep } from "../steps" const cartFields = [ "id", @@ -144,6 +144,8 @@ export const updateTaxLinesWorkflow = createWorkflow( return input.cart ?? fetchCart }) + validateCartStep({ cart }) + acquireLockStep({ key: cart.id, timeout: 2, diff --git a/packages/core/core-flows/src/cart/workflows/upsert-tax-lines.ts b/packages/core/core-flows/src/cart/workflows/upsert-tax-lines.ts index 6abb2139c4..2778c08aaa 100644 --- a/packages/core/core-flows/src/cart/workflows/upsert-tax-lines.ts +++ b/packages/core/core-flows/src/cart/workflows/upsert-tax-lines.ts @@ -10,6 +10,7 @@ import { } from "@medusajs/framework/workflows-sdk" import { useQueryGraphStep } from "../../common" import { getItemTaxLinesStep } from "../../tax/steps/get-item-tax-lines" +import { validateCartStep } from "../steps" import { upsertTaxLinesForItemsStep } from "../steps/upsert-tax-lines-for-items" const cartFields = [ @@ -141,6 +142,8 @@ export const upsertTaxLinesWorkflow = createWorkflow( return input.cart ?? fetchCart }) + validateCartStep({ cart }) + const taxLineItems = getItemTaxLinesStep( transform({ input, cart }, (data) => ({ orderOrCart: data.cart, diff --git a/packages/core/core-flows/src/payment/steps/complete-cart-after-payment.ts b/packages/core/core-flows/src/payment/steps/complete-cart-after-payment.ts index 3ee30c94ff..9bc258bffd 100644 --- a/packages/core/core-flows/src/payment/steps/complete-cart-after-payment.ts +++ b/packages/core/core-flows/src/payment/steps/complete-cart-after-payment.ts @@ -25,7 +25,6 @@ export const completeCartAfterPaymentStep = createStep( input: { id: input.cart_id, }, - transactionId: input.cart_id, }) } ) diff --git a/packages/medusa/src/api/store/carts/[id]/complete/route.ts b/packages/medusa/src/api/store/carts/[id]/complete/route.ts index ad8d78043a..1da17218f4 100644 --- a/packages/medusa/src/api/store/carts/[id]/complete/route.ts +++ b/packages/medusa/src/api/store/carts/[id]/complete/route.ts @@ -19,7 +19,6 @@ export const POST = async ( const { errors, result, transaction } = await we.run(completeCartWorkflowId, { input: { id: cart_id }, - transactionId: cart_id, throwOnError: false, }) diff --git a/packages/medusa/src/api/store/carts/[id]/customer/route.ts b/packages/medusa/src/api/store/carts/[id]/customer/route.ts index 6fa46a35dc..2d95757a4b 100644 --- a/packages/medusa/src/api/store/carts/[id]/customer/route.ts +++ b/packages/medusa/src/api/store/carts/[id]/customer/route.ts @@ -6,8 +6,8 @@ import { MedusaResponse, } from "@medusajs/framework/http" import { Modules } from "@medusajs/framework/utils" -import { refetchCart } from "../../helpers" import { AdditionalData } from "@medusajs/types" +import { refetchCart } from "../../helpers" export const POST = async ( req: AuthenticatedMedusaRequest, @@ -21,7 +21,6 @@ export const POST = async ( customer_id: req.auth_context?.actor_id, additional_data: req.validatedBody.additional_data, }, - transactionId: "cart-transfer-customer-" + req.params.id, }) const cart = await refetchCart( diff --git a/packages/medusa/src/api/store/carts/[id]/line-items/[line_id]/route.ts b/packages/medusa/src/api/store/carts/[id]/line-items/[line_id]/route.ts index 74796ca3cf..87d652795c 100644 --- a/packages/medusa/src/api/store/carts/[id]/line-items/[line_id]/route.ts +++ b/packages/medusa/src/api/store/carts/[id]/line-items/[line_id]/route.ts @@ -22,7 +22,6 @@ export const POST = async ( update: req.validatedBody, additional_data: req.validatedBody.additional_data, }, - transactionId: "cart-update-item-" + req.params.id, }) const updatedCart = await refetchCart( @@ -46,7 +45,6 @@ export const DELETE = async ( cart_id: req.params.id, ids: [id], }, - transactionId: "cart-delete-item-" + req.params.id, }) const cart = await refetchCart( diff --git a/packages/medusa/src/api/store/carts/[id]/line-items/route.ts b/packages/medusa/src/api/store/carts/[id]/line-items/route.ts index 2c3a4c8190..a2beda8081 100644 --- a/packages/medusa/src/api/store/carts/[id]/line-items/route.ts +++ b/packages/medusa/src/api/store/carts/[id]/line-items/route.ts @@ -1,9 +1,9 @@ import { addToCartWorkflowId } from "@medusajs/core-flows" import { MedusaRequest, MedusaResponse } from "@medusajs/framework/http" import { HttpTypes } from "@medusajs/framework/types" +import { AdditionalData } from "@medusajs/types" import { Modules } from "@medusajs/utils" import { refetchCart } from "../../helpers" -import { AdditionalData } from "@medusajs/types" export const POST = async ( req: MedusaRequest< @@ -19,7 +19,6 @@ export const POST = async ( items: [req.validatedBody], additional_data: req.validatedBody.additional_data, }, - transactionId: "cart-add-item-" + req.params.id, }) const cart = await refetchCart( diff --git a/packages/medusa/src/api/store/carts/[id]/promotions/route.ts b/packages/medusa/src/api/store/carts/[id]/promotions/route.ts index c79c971913..849a1d2add 100644 --- a/packages/medusa/src/api/store/carts/[id]/promotions/route.ts +++ b/packages/medusa/src/api/store/carts/[id]/promotions/route.ts @@ -5,10 +5,7 @@ import { Modules, PromotionActions } from "@medusajs/framework/utils" import { refetchCart } from "../../helpers" export const POST = async ( - req: MedusaRequest< - HttpTypes.StoreCartAddPromotion, - HttpTypes.SelectParams - >, + req: MedusaRequest, res: MedusaResponse ) => { const we = req.scope.resolve(Modules.WORKFLOW_ENGINE) @@ -23,7 +20,6 @@ export const POST = async ( ? PromotionActions.ADD : PromotionActions.REPLACE, }, - transactionId: "cart-update-promotions-" + req.params.id, }) const cart = await refetchCart( @@ -36,7 +32,10 @@ export const POST = async ( } export const DELETE = async ( - req: MedusaRequest, + req: MedusaRequest< + HttpTypes.StoreCartRemovePromotion, + HttpTypes.SelectParams + >, res: MedusaResponse<{ cart: HttpTypes.StoreCart }> @@ -50,7 +49,6 @@ export const DELETE = async ( cart_id: req.params.id, action: PromotionActions.REMOVE, }, - transactionId: "cart-delete-promotions-" + req.params.id, }) const cart = await refetchCart( diff --git a/packages/medusa/src/api/store/carts/[id]/route.ts b/packages/medusa/src/api/store/carts/[id]/route.ts index 1bf26546b6..d524012671 100644 --- a/packages/medusa/src/api/store/carts/[id]/route.ts +++ b/packages/medusa/src/api/store/carts/[id]/route.ts @@ -1,8 +1,5 @@ import { updateCartWorkflowId } from "@medusajs/core-flows" -import { - AdditionalData, - HttpTypes, -} from "@medusajs/framework/types" +import { AdditionalData, HttpTypes } from "@medusajs/framework/types" import { MedusaRequest, MedusaResponse } from "@medusajs/framework/http" import { Modules } from "@medusajs/framework/utils" @@ -38,7 +35,6 @@ export const POST = async ( id: req.params.id, additional_data: req.validatedBody.additional_data, }, - transactionId: "cart-update-" + req.params.id, }) const cart = await refetchCart( diff --git a/packages/medusa/src/api/store/payment-collections/route.ts b/packages/medusa/src/api/store/payment-collections/route.ts index 089357357e..89854bcc3a 100644 --- a/packages/medusa/src/api/store/payment-collections/route.ts +++ b/packages/medusa/src/api/store/payment-collections/route.ts @@ -34,7 +34,6 @@ export const POST = async ( const we = req.scope.resolve(Modules.WORKFLOW_ENGINE) await we.run(createPaymentCollectionForCartWorkflowId, { input: req.body, - transactionId: "create-payment-collection-for-cart-" + cart_id, }) const [cartCollectionRelation] = await remoteQuery(