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:
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
"@medusajs/core-flows": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
fix(core-flows): lock mark as delivered fulfillment/order flows
|
||||||
+15
-3
@@ -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({
|
||||||
|
|||||||
Reference in New Issue
Block a user