fix(core-flows): lock mark as delivered fulfillment/order flows (#14111)

* Lock markFulfillmentAsDeliveredWorkflow with fulifllment id

* Lock markOrderFulfillmentAsDeliveredWorkflow by orderId before calling markFulfillmentAsDeliveredWorkflow

* Add changeset
This commit is contained in:
Nicolas Gorga
2025-11-25 06:56:10 -03:00
committed by GitHub
parent 78842af1c3
commit 0e73d8d5e3
3 changed files with 31 additions and 3 deletions
+5
View File
@@ -0,0 +1,5 @@
---
"@medusajs/core-flows": patch
---
fix(core-flows): lock mark as delivered fulfillment/order flows
@@ -10,6 +10,7 @@ import {
} from "@medusajs/framework/workflows-sdk" } from "@medusajs/framework/workflows-sdk"
import { useRemoteQueryStep } from "../../common" import { useRemoteQueryStep } from "../../common"
import { updateFulfillmentWorkflow } from "./update-fulfillment" import { updateFulfillmentWorkflow } from "./update-fulfillment"
import { acquireLockStep, releaseLockStep } from "../../locking"
export const validateFulfillmentDeliverabilityStepId = export const validateFulfillmentDeliverabilityStepId =
"validate-fulfillment-deliverability" "validate-fulfillment-deliverability"
@@ -84,6 +85,12 @@ export const markFulfillmentAsDeliveredWorkflowId =
export const markFulfillmentAsDeliveredWorkflow = createWorkflow( export const markFulfillmentAsDeliveredWorkflow = createWorkflow(
markFulfillmentAsDeliveredWorkflowId, markFulfillmentAsDeliveredWorkflowId,
({ id }: WorkflowData<MarkFulfillmentAsDeliveredInput>) => { ({ id }: WorkflowData<MarkFulfillmentAsDeliveredInput>) => {
acquireLockStep({
key: id,
timeout: 2,
ttl: 10,
})
const fulfillment = useRemoteQueryStep({ const fulfillment = useRemoteQueryStep({
entry_point: "fulfillment", entry_point: "fulfillment",
fields: ["id", "delivered_at", "canceled_at"], fields: ["id", "delivered_at", "canceled_at"],
@@ -99,8 +106,13 @@ export const markFulfillmentAsDeliveredWorkflow = createWorkflow(
delivered_at: new Date(), delivered_at: new Date(),
})) }))
return new WorkflowResponse( const updatedFulfillment = updateFulfillmentWorkflow.runAsStep({
updateFulfillmentWorkflow.runAsStep({ input: updateInput }) input: updateInput,
) })
releaseLockStep({
key: id,
})
return new WorkflowResponse(updatedFulfillment)
} }
) )
@@ -27,6 +27,7 @@ import {
throwIfItemsDoesNotExistsInOrder, throwIfItemsDoesNotExistsInOrder,
throwIfOrderIsCancelled, throwIfOrderIsCancelled,
} from "../utils/order-validation" } from "../utils/order-validation"
import { acquireLockStep, releaseLockStep } from "../../locking"
type OrderItemWithVariantDTO = OrderLineItemDTO & { type OrderItemWithVariantDTO = OrderLineItemDTO & {
variant?: ProductVariantDTO & { variant?: ProductVariantDTO & {
@@ -258,10 +259,20 @@ export const markOrderFulfillmentAsDeliveredWorkflow = createWorkflow(
prepareRegisterDeliveryData prepareRegisterDeliveryData
) )
acquireLockStep({
key: orderId,
timeout: 2,
ttl: 10,
})
const deliveredFulfillment = markFulfillmentAsDeliveredWorkflow.runAsStep({ const deliveredFulfillment = markFulfillmentAsDeliveredWorkflow.runAsStep({
input: { id: fulfillment.id }, input: { id: fulfillment.id },
}) })
releaseLockStep({
key: orderId,
})
registerOrderDeliveryStep(deliveryData) registerOrderDeliveryStep(deliveryData)
emitEventStep({ emitEventStep({