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:
@@ -10,6 +10,7 @@ import {
|
||||
} from "@medusajs/framework/workflows-sdk"
|
||||
import { useRemoteQueryStep } from "../../common"
|
||||
import { updateFulfillmentWorkflow } from "./update-fulfillment"
|
||||
import { acquireLockStep, releaseLockStep } from "../../locking"
|
||||
|
||||
export const validateFulfillmentDeliverabilityStepId =
|
||||
"validate-fulfillment-deliverability"
|
||||
@@ -84,6 +85,12 @@ export const markFulfillmentAsDeliveredWorkflowId =
|
||||
export const markFulfillmentAsDeliveredWorkflow = createWorkflow(
|
||||
markFulfillmentAsDeliveredWorkflowId,
|
||||
({ id }: WorkflowData<MarkFulfillmentAsDeliveredInput>) => {
|
||||
acquireLockStep({
|
||||
key: id,
|
||||
timeout: 2,
|
||||
ttl: 10,
|
||||
})
|
||||
|
||||
const fulfillment = useRemoteQueryStep({
|
||||
entry_point: "fulfillment",
|
||||
fields: ["id", "delivered_at", "canceled_at"],
|
||||
@@ -99,8 +106,13 @@ export const markFulfillmentAsDeliveredWorkflow = createWorkflow(
|
||||
delivered_at: new Date(),
|
||||
}))
|
||||
|
||||
return new WorkflowResponse(
|
||||
updateFulfillmentWorkflow.runAsStep({ input: updateInput })
|
||||
)
|
||||
const updatedFulfillment = updateFulfillmentWorkflow.runAsStep({
|
||||
input: updateInput,
|
||||
})
|
||||
|
||||
releaseLockStep({
|
||||
key: id,
|
||||
})
|
||||
return new WorkflowResponse(updatedFulfillment)
|
||||
}
|
||||
)
|
||||
|
||||
@@ -27,6 +27,7 @@ import {
|
||||
throwIfItemsDoesNotExistsInOrder,
|
||||
throwIfOrderIsCancelled,
|
||||
} from "../utils/order-validation"
|
||||
import { acquireLockStep, releaseLockStep } from "../../locking"
|
||||
|
||||
type OrderItemWithVariantDTO = OrderLineItemDTO & {
|
||||
variant?: ProductVariantDTO & {
|
||||
@@ -258,10 +259,20 @@ export const markOrderFulfillmentAsDeliveredWorkflow = createWorkflow(
|
||||
prepareRegisterDeliveryData
|
||||
)
|
||||
|
||||
acquireLockStep({
|
||||
key: orderId,
|
||||
timeout: 2,
|
||||
ttl: 10,
|
||||
})
|
||||
|
||||
const deliveredFulfillment = markFulfillmentAsDeliveredWorkflow.runAsStep({
|
||||
input: { id: fulfillment.id },
|
||||
})
|
||||
|
||||
releaseLockStep({
|
||||
key: orderId,
|
||||
})
|
||||
|
||||
registerOrderDeliveryStep(deliveryData)
|
||||
|
||||
emitEventStep({
|
||||
|
||||
Reference in New Issue
Block a user