chore: Add locks to order edit flows (#14270)

This commit is contained in:
Oli Juhl
2025-12-10 17:55:03 +01:00
committed by GitHub
parent 8bd1d22765
commit bca145bdbe
13 changed files with 186 additions and 31 deletions

View File

@@ -0,0 +1,5 @@
---
"@medusajs/core-flows": patch
---
chore: Add locks to order edit flows

View File

@@ -11,6 +11,7 @@ import {
transform, transform,
} from "@medusajs/framework/workflows-sdk" } from "@medusajs/framework/workflows-sdk"
import { useQueryGraphStep } from "../../../common" import { useQueryGraphStep } from "../../../common"
import { acquireLockStep, releaseLockStep } from "../../../locking"
import { createOrderChangeStep } from "../../steps/create-order-change" import { createOrderChangeStep } from "../../steps/create-order-change"
import { throwIfOrderIsCancelled } from "../../utils/order-validation" import { throwIfOrderIsCancelled } from "../../utils/order-validation"
import { fieldsToRefreshOrderEdit } from "./utils/fields" import { fieldsToRefreshOrderEdit } from "./utils/fields"
@@ -79,6 +80,12 @@ export const beginOrderEditOrderWorkflow = createWorkflow(
function ( function (
input: WorkflowData<OrderWorkflow.BeginorderEditWorkflowInput> input: WorkflowData<OrderWorkflow.BeginorderEditWorkflowInput>
): WorkflowResponse<OrderChangeDTO> { ): WorkflowResponse<OrderChangeDTO> {
acquireLockStep({
key: input.order_id,
timeout: 2,
ttl: 10,
})
const orderResult = useQueryGraphStep({ const orderResult = useQueryGraphStep({
entity: "order", entity: "order",
fields: fieldsToRefreshOrderEdit, fields: fieldsToRefreshOrderEdit,
@@ -106,6 +113,10 @@ export const beginOrderEditOrderWorkflow = createWorkflow(
const orderChange = createOrderChangeStep(orderChangeInput) const orderChange = createOrderChangeStep(orderChangeInput)
releaseLockStep({
key: input.order_id,
})
return new WorkflowResponse(orderChange) return new WorkflowResponse(orderChange)
} }
) )

View File

@@ -12,6 +12,7 @@ import {
transform, transform,
} from "@medusajs/framework/workflows-sdk" } from "@medusajs/framework/workflows-sdk"
import { emitEventStep, useQueryGraphStep } from "../../../common" import { emitEventStep, useQueryGraphStep } from "../../../common"
import { acquireLockStep, releaseLockStep } from "../../../locking"
import { deleteOrderChangesStep, deleteOrderShippingMethods } from "../../steps" import { deleteOrderChangesStep, deleteOrderShippingMethods } from "../../steps"
import { import {
throwIfIsCancelled, throwIfIsCancelled,
@@ -102,6 +103,12 @@ export const cancelBeginOrderEditWorkflow = createWorkflow(
function ( function (
input: WorkflowData<CancelBeginOrderEditWorkflowInput> input: WorkflowData<CancelBeginOrderEditWorkflowInput>
): WorkflowData<void> { ): WorkflowData<void> {
acquireLockStep({
key: input.order_id,
timeout: 2,
ttl: 10,
})
const orderResult = useQueryGraphStep({ const orderResult = useQueryGraphStep({
entity: "order", entity: "order",
fields: fieldsToRefreshOrderEdit, fields: fieldsToRefreshOrderEdit,
@@ -160,5 +167,9 @@ export const cancelBeginOrderEditWorkflow = createWorkflow(
data: eventData, data: eventData,
}) })
) )
releaseLockStep({
key: input.order_id,
})
} }
) )

View File

@@ -23,6 +23,7 @@ import {
requiredOrderFieldsForInventoryConfirmation, requiredOrderFieldsForInventoryConfirmation,
} from "../../../cart/utils/prepare-confirm-inventory-input" } from "../../../cart/utils/prepare-confirm-inventory-input"
import { emitEventStep, useQueryGraphStep } from "../../../common" import { emitEventStep, useQueryGraphStep } from "../../../common"
import { acquireLockStep, releaseLockStep } from "../../../locking"
import { deleteReservationsByLineItemsStep } from "../../../reservation" import { deleteReservationsByLineItemsStep } from "../../../reservation"
import { previewOrderChangeStep } from "../../steps" import { previewOrderChangeStep } from "../../steps"
import { confirmOrderChanges } from "../../steps/confirm-order-changes" import { confirmOrderChanges } from "../../steps/confirm-order-changes"
@@ -120,6 +121,12 @@ export const confirmOrderEditRequestWorkflow = createWorkflow(
function ( function (
input: ConfirmOrderEditRequestWorkflowInput input: ConfirmOrderEditRequestWorkflowInput
): WorkflowResponse<OrderPreviewDTO> { ): WorkflowResponse<OrderPreviewDTO> {
acquireLockStep({
key: input.order_id,
timeout: 2,
ttl: 10,
})
const orderResult = useQueryGraphStep({ const orderResult = useQueryGraphStep({
entity: "order", entity: "order",
fields: fieldsToRefreshOrderEdit, fields: fieldsToRefreshOrderEdit,
@@ -286,6 +293,10 @@ export const confirmOrderEditRequestWorkflow = createWorkflow(
data: eventData, data: eventData,
}) })
releaseLockStep({
key: input.order_id,
})
return new WorkflowResponse(orderPreview) return new WorkflowResponse(orderPreview)
} }
) )

View File

@@ -15,6 +15,7 @@ import {
} from "@medusajs/framework/workflows-sdk" } from "@medusajs/framework/workflows-sdk"
import { pricingContextResult } from "../../../cart/utils/schemas" import { pricingContextResult } from "../../../cart/utils/schemas"
import { useRemoteQueryStep } from "../../../common" import { useRemoteQueryStep } from "../../../common"
import { acquireLockStep, releaseLockStep } from "../../../locking"
import { previewOrderChangeStep } from "../../steps" import { previewOrderChangeStep } from "../../steps"
import { createOrderShippingMethods } from "../../steps/create-order-shipping-methods" import { createOrderShippingMethods } from "../../steps/create-order-shipping-methods"
import { import {
@@ -113,11 +114,11 @@ export const createOrderEditShippingMethodWorkflowId =
* @summary * @summary
* *
* Create a shipping method for an order edit. * Create a shipping method for an order edit.
* *
* @property hooks.setPricingContext - This hook is executed before the shipping method is created. You can consume this hook to return any custom context useful for the prices retrieval of the shipping method's option. * @property hooks.setPricingContext - This hook is executed before the shipping method is created. You can consume this hook to return any custom context useful for the prices retrieval of the shipping method's option.
* *
* For example, assuming you have the following custom pricing rule: * For example, assuming you have the following custom pricing rule:
* *
* ```json * ```json
* { * {
* "attribute": "location_id", * "attribute": "location_id",
@@ -125,13 +126,13 @@ export const createOrderEditShippingMethodWorkflowId =
* "value": "sloc_123", * "value": "sloc_123",
* } * }
* ``` * ```
* *
* You can consume the `setPricingContext` hook to add the `location_id` context to the prices calculation: * You can consume the `setPricingContext` hook to add the `location_id` context to the prices calculation:
* *
* ```ts * ```ts
* import { createOrderEditShippingMethodWorkflow } from "@medusajs/medusa/core-flows"; * import { createOrderEditShippingMethodWorkflow } from "@medusajs/medusa/core-flows";
* import { StepResponse } from "@medusajs/workflows-sdk"; * import { StepResponse } from "@medusajs/workflows-sdk";
* *
* createOrderEditShippingMethodWorkflow.hooks.setPricingContext(( * createOrderEditShippingMethodWorkflow.hooks.setPricingContext((
* { order, shipping_option_id, additional_data }, { container } * { order, shipping_option_id, additional_data }, { container }
* ) => { * ) => {
@@ -140,13 +141,13 @@ export const createOrderEditShippingMethodWorkflowId =
* }); * });
* }); * });
* ``` * ```
* *
* The price of the shipping method's option will now be retrieved using the context you return. * The price of the shipping method's option will now be retrieved using the context you return.
* *
* :::note * :::note
* *
* Learn more about prices calculation context in the [Prices Calculation](https://docs.medusajs.com/resources/commerce-modules/pricing/price-calculation) documentation. * Learn more about prices calculation context in the [Prices Calculation](https://docs.medusajs.com/resources/commerce-modules/pricing/price-calculation) documentation.
* *
* ::: * :::
*/ */
export const createOrderEditShippingMethodWorkflow = createWorkflow( export const createOrderEditShippingMethodWorkflow = createWorkflow(
@@ -154,6 +155,12 @@ export const createOrderEditShippingMethodWorkflow = createWorkflow(
function ( function (
input: CreateOrderEditShippingMethodWorkflowInput & AdditionalData input: CreateOrderEditShippingMethodWorkflowInput & AdditionalData
) { ) {
acquireLockStep({
key: input.order_id,
timeout: 2,
ttl: 10,
})
const order: OrderDTO = useRemoteQueryStep({ const order: OrderDTO = useRemoteQueryStep({
entry_point: "orders", entry_point: "orders",
fields: ["id", "status", "currency_code", "canceled_at"], fields: ["id", "status", "currency_code", "canceled_at"],
@@ -274,11 +281,16 @@ export const createOrderEditShippingMethodWorkflow = createWorkflow(
input: [orderChangeActionInput], input: [orderChangeActionInput],
}) })
return new WorkflowResponse( const previewOrderChange = previewOrderChangeStep(
previewOrderChangeStep(order.id) as OrderPreviewDTO, order.id
{ ) as OrderPreviewDTO
hooks: [setPricingContext] as const,
} releaseLockStep({
) key: input.order_id,
})
return new WorkflowResponse(previewOrderChange, {
hooks: [setPricingContext] as const,
})
} }
) )

View File

@@ -13,16 +13,17 @@ import {
WorkflowResponse, WorkflowResponse,
} from "@medusajs/framework/workflows-sdk" } from "@medusajs/framework/workflows-sdk"
import { useQueryGraphStep } from "../../../common" import { useQueryGraphStep } from "../../../common"
import { acquireLockStep, releaseLockStep } from "../../../locking"
import { previewOrderChangeStep } from "../../steps/preview-order-change" import { previewOrderChangeStep } from "../../steps/preview-order-change"
import { import {
throwIfIsCancelled, throwIfIsCancelled,
throwIfOrderChangeIsNotActive, throwIfOrderChangeIsNotActive,
} from "../../utils/order-validation" } from "../../utils/order-validation"
import { addOrderLineItemsWorkflow } from "../add-line-items" import { addOrderLineItemsWorkflow } from "../add-line-items"
import { computeAdjustmentsForPreviewWorkflow } from "../compute-adjustments-for-preview"
import { createOrderChangeActionsWorkflow } from "../create-order-change-actions" import { createOrderChangeActionsWorkflow } from "../create-order-change-actions"
import { updateOrderTaxLinesWorkflow } from "../update-tax-lines" import { updateOrderTaxLinesWorkflow } from "../update-tax-lines"
import { fieldsToRefreshOrderEdit } from "./utils/fields" import { fieldsToRefreshOrderEdit } from "./utils/fields"
import { computeAdjustmentsForPreviewWorkflow } from "../compute-adjustments-for-preview"
/** /**
* The data to validate that new items can be added to an order edit. * The data to validate that new items can be added to an order edit.
@@ -103,6 +104,12 @@ export const orderEditAddNewItemWorkflow = createWorkflow(
function ( function (
input: WorkflowData<OrderWorkflow.OrderEditAddNewItemWorkflowInput> input: WorkflowData<OrderWorkflow.OrderEditAddNewItemWorkflowInput>
): WorkflowResponse<OrderPreviewDTO> { ): WorkflowResponse<OrderPreviewDTO> {
acquireLockStep({
key: input.order_id,
timeout: 2,
ttl: 10,
})
const orderResult = useQueryGraphStep({ const orderResult = useQueryGraphStep({
entity: "order", entity: "order",
fields: fieldsToRefreshOrderEdit, fields: fieldsToRefreshOrderEdit,
@@ -193,6 +200,14 @@ export const orderEditAddNewItemWorkflow = createWorkflow(
}, },
}) })
return new WorkflowResponse(previewOrderChangeStep(input.order_id)) const previewOrderChange = previewOrderChangeStep(
input.order_id
) as OrderPreviewDTO
releaseLockStep({
key: input.order_id,
})
return new WorkflowResponse(previewOrderChange)
} }
) )

View File

@@ -18,13 +18,14 @@ import {
WorkflowResponse, WorkflowResponse,
} from "@medusajs/framework/workflows-sdk" } from "@medusajs/framework/workflows-sdk"
import { useQueryGraphStep } from "../../../common" import { useQueryGraphStep } from "../../../common"
import { acquireLockStep, releaseLockStep } from "../../../locking"
import { previewOrderChangeStep } from "../../steps/preview-order-change" import { previewOrderChangeStep } from "../../steps/preview-order-change"
import { import {
throwIfIsCancelled, throwIfIsCancelled,
throwIfOrderChangeIsNotActive, throwIfOrderChangeIsNotActive,
} from "../../utils/order-validation" } from "../../utils/order-validation"
import { createOrderChangeActionsWorkflow } from "../create-order-change-actions"
import { computeAdjustmentsForPreviewWorkflow } from "../compute-adjustments-for-preview" import { computeAdjustmentsForPreviewWorkflow } from "../compute-adjustments-for-preview"
import { createOrderChangeActionsWorkflow } from "../create-order-change-actions"
import { fieldsToRefreshOrderEdit } from "./utils/fields" import { fieldsToRefreshOrderEdit } from "./utils/fields"
/** /**
@@ -113,6 +114,12 @@ export const orderEditUpdateItemQuantityWorkflow = createWorkflow(
function ( function (
input: WorkflowData<OrderWorkflow.OrderEditUpdateItemQuantityWorkflowInput> input: WorkflowData<OrderWorkflow.OrderEditUpdateItemQuantityWorkflowInput>
): WorkflowResponse<OrderPreviewDTO> { ): WorkflowResponse<OrderPreviewDTO> {
acquireLockStep({
key: input.order_id,
timeout: 2,
ttl: 10,
})
const orderResult = useQueryGraphStep({ const orderResult = useQueryGraphStep({
entity: "order", entity: "order",
fields: fieldsToRefreshOrderEdit, fields: fieldsToRefreshOrderEdit,
@@ -194,6 +201,12 @@ export const orderEditUpdateItemQuantityWorkflow = createWorkflow(
}, },
}) })
return new WorkflowResponse(previewOrderChangeStep(input.order_id)) const previewOrderChange = previewOrderChangeStep(input.order_id) as OrderPreviewDTO
releaseLockStep({
key: input.order_id,
})
return new WorkflowResponse(previewOrderChange)
} }
) )

View File

@@ -14,6 +14,7 @@ import {
transform, transform,
} from "@medusajs/framework/workflows-sdk" } from "@medusajs/framework/workflows-sdk"
import { useQueryGraphStep } from "../../../common" import { useQueryGraphStep } from "../../../common"
import { acquireLockStep, releaseLockStep } from "../../../locking"
import { import {
deleteOrderChangeActionsStep, deleteOrderChangeActionsStep,
previewOrderChangeStep, previewOrderChangeStep,
@@ -128,6 +129,12 @@ export const removeItemOrderEditActionWorkflow = createWorkflow(
function ( function (
input: WorkflowData<OrderWorkflow.DeleteOrderEditItemActionWorkflowInput> input: WorkflowData<OrderWorkflow.DeleteOrderEditItemActionWorkflowInput>
): WorkflowResponse<OrderPreviewDTO> { ): WorkflowResponse<OrderPreviewDTO> {
acquireLockStep({
key: input.order_id,
timeout: 2,
ttl: 10,
})
const orderResult = useQueryGraphStep({ const orderResult = useQueryGraphStep({
entity: "order", entity: "order",
fields: fieldsToRefreshOrderEdit, fields: fieldsToRefreshOrderEdit,
@@ -172,6 +179,12 @@ export const removeItemOrderEditActionWorkflow = createWorkflow(
}, },
}) })
return new WorkflowResponse(previewOrderChangeStep(order.id)) const previewOrderChange = previewOrderChangeStep(order.id) as OrderPreviewDTO
releaseLockStep({
key: input.order_id,
})
return new WorkflowResponse(previewOrderChange)
} }
) )

View File

@@ -14,6 +14,7 @@ import {
transform, transform,
} from "@medusajs/framework/workflows-sdk" } from "@medusajs/framework/workflows-sdk"
import { useQueryGraphStep } from "../../../common" import { useQueryGraphStep } from "../../../common"
import { acquireLockStep, releaseLockStep } from "../../../locking"
import { deleteOrderShippingMethods } from "../../steps" import { deleteOrderShippingMethods } from "../../steps"
import { deleteOrderChangeActionsStep } from "../../steps/delete-order-change-actions" import { deleteOrderChangeActionsStep } from "../../steps/delete-order-change-actions"
import { previewOrderChangeStep } from "../../steps/preview-order-change" import { previewOrderChangeStep } from "../../steps/preview-order-change"
@@ -111,6 +112,12 @@ export const removeOrderEditShippingMethodWorkflow = createWorkflow(
function ( function (
input: WorkflowData<OrderWorkflow.DeleteOrderEditShippingMethodWorkflowInput> input: WorkflowData<OrderWorkflow.DeleteOrderEditShippingMethodWorkflowInput>
): WorkflowResponse<OrderPreviewDTO> { ): WorkflowResponse<OrderPreviewDTO> {
acquireLockStep({
key: input.order_id,
timeout: 2,
ttl: 10,
})
const orderChangeResult = useQueryGraphStep({ const orderChangeResult = useQueryGraphStep({
entity: "order_change", entity: "order_change",
fields: ["id", "status", "version", "actions.*"], fields: ["id", "status", "version", "actions.*"],
@@ -151,6 +158,12 @@ export const removeOrderEditShippingMethodWorkflow = createWorkflow(
deleteOrderShippingMethods({ ids: [dataToRemove.shippingMethodId] }) deleteOrderShippingMethods({ ids: [dataToRemove.shippingMethodId] })
) )
return new WorkflowResponse(previewOrderChangeStep(input.order_id)) const previewOrderChange = previewOrderChangeStep(input.order_id) as OrderPreviewDTO
releaseLockStep({
key: input.order_id,
})
return new WorkflowResponse(previewOrderChange)
} }
) )

View File

@@ -14,6 +14,7 @@ import {
transform, transform,
} from "@medusajs/framework/workflows-sdk" } from "@medusajs/framework/workflows-sdk"
import { emitEventStep, useQueryGraphStep } from "../../../common" import { emitEventStep, useQueryGraphStep } from "../../../common"
import { acquireLockStep, releaseLockStep } from "../../../locking"
import { previewOrderChangeStep } from "../../steps" import { previewOrderChangeStep } from "../../steps"
import { updateOrderChangesStep } from "../../steps/update-order-changes" import { updateOrderChangesStep } from "../../steps/update-order-changes"
import { import {
@@ -128,6 +129,12 @@ export const requestOrderEditRequestWorkflow = createWorkflow(
function ( function (
input: OrderEditRequestWorkflowInput input: OrderEditRequestWorkflowInput
): WorkflowResponse<OrderPreviewDTO> { ): WorkflowResponse<OrderPreviewDTO> {
acquireLockStep({
key: input.order_id,
timeout: 2,
ttl: 10,
})
const orderResult = useQueryGraphStep({ const orderResult = useQueryGraphStep({
entity: "order", entity: "order",
fields: fieldsToRefreshOrderEdit, fields: fieldsToRefreshOrderEdit,
@@ -180,6 +187,12 @@ export const requestOrderEditRequestWorkflow = createWorkflow(
data: eventData, data: eventData,
}) })
return new WorkflowResponse(previewOrderChangeStep(order.id)) const previewOrderChange = previewOrderChangeStep(order.id) as OrderPreviewDTO
releaseLockStep({
key: input.order_id,
})
return new WorkflowResponse(previewOrderChange)
} }
) )

View File

@@ -14,6 +14,7 @@ import {
transform, transform,
} from "@medusajs/framework/workflows-sdk" } from "@medusajs/framework/workflows-sdk"
import { useQueryGraphStep } from "../../../common" import { useQueryGraphStep } from "../../../common"
import { acquireLockStep, releaseLockStep } from "../../../locking"
import { import {
previewOrderChangeStep, previewOrderChangeStep,
updateOrderChangeActionsStep, updateOrderChangeActionsStep,
@@ -127,6 +128,12 @@ export const updateOrderEditAddItemWorkflow = createWorkflow(
function ( function (
input: WorkflowData<OrderWorkflow.UpdateOrderEditAddNewItemWorkflowInput> input: WorkflowData<OrderWorkflow.UpdateOrderEditAddNewItemWorkflowInput>
): WorkflowResponse<OrderPreviewDTO> { ): WorkflowResponse<OrderPreviewDTO> {
acquireLockStep({
key: input.order_id,
timeout: 2,
ttl: 10,
})
const orderResult = useQueryGraphStep({ const orderResult = useQueryGraphStep({
entity: "order", entity: "order",
fields: fieldsToRefreshOrderEdit, fields: fieldsToRefreshOrderEdit,
@@ -193,6 +200,12 @@ export const updateOrderEditAddItemWorkflow = createWorkflow(
}, },
}) })
return new WorkflowResponse(previewOrderChangeStep(order.id)) const previewOrderChange = previewOrderChangeStep(order.id) as OrderPreviewDTO
releaseLockStep({
key: input.order_id,
})
return new WorkflowResponse(previewOrderChange)
} }
) )

View File

@@ -14,6 +14,7 @@ import {
transform, transform,
} from "@medusajs/framework/workflows-sdk" } from "@medusajs/framework/workflows-sdk"
import { useQueryGraphStep } from "../../../common" import { useQueryGraphStep } from "../../../common"
import { acquireLockStep, releaseLockStep } from "../../../locking"
import { import {
previewOrderChangeStep, previewOrderChangeStep,
updateOrderChangeActionsStep, updateOrderChangeActionsStep,
@@ -134,6 +135,12 @@ export const updateOrderEditItemQuantityWorkflow = createWorkflow(
function ( function (
input: WorkflowData<OrderWorkflow.UpdateOrderEditItemQuantityWorkflowInput> input: WorkflowData<OrderWorkflow.UpdateOrderEditItemQuantityWorkflowInput>
): WorkflowResponse<OrderPreviewDTO> { ): WorkflowResponse<OrderPreviewDTO> {
acquireLockStep({
key: input.order_id,
timeout: 2,
ttl: 10,
})
const orderResult = useQueryGraphStep({ const orderResult = useQueryGraphStep({
entity: "order", entity: "order",
fields: fieldsToRefreshOrderEdit, fields: fieldsToRefreshOrderEdit,
@@ -196,6 +203,12 @@ export const updateOrderEditItemQuantityWorkflow = createWorkflow(
}, },
}) })
return new WorkflowResponse(previewOrderChangeStep(order.id)) const previewOrderChange = previewOrderChangeStep(order.id) as OrderPreviewDTO
releaseLockStep({
key: input.order_id,
})
return new WorkflowResponse(previewOrderChange)
} }
) )

View File

@@ -18,6 +18,7 @@ import {
} from "@medusajs/framework/workflows-sdk" } from "@medusajs/framework/workflows-sdk"
import { pricingContextResult } from "../../../cart/utils/schemas" import { pricingContextResult } from "../../../cart/utils/schemas"
import { useQueryGraphStep, useRemoteQueryStep } from "../../../common" import { useQueryGraphStep, useRemoteQueryStep } from "../../../common"
import { acquireLockStep, releaseLockStep } from "../../../locking"
import { import {
updateOrderChangeActionsStep, updateOrderChangeActionsStep,
updateOrderShippingMethodsStep, updateOrderShippingMethodsStep,
@@ -162,6 +163,12 @@ export const updateOrderEditShippingMethodWorkflow = createWorkflow(
OrderWorkflow.UpdateOrderEditShippingMethodWorkflowInput & AdditionalData OrderWorkflow.UpdateOrderEditShippingMethodWorkflowInput & AdditionalData
> >
) { ) {
acquireLockStep({
key: input.order_id,
timeout: 2,
ttl: 10,
})
const orderResult = useQueryGraphStep({ const orderResult = useQueryGraphStep({
entity: "order", entity: "order",
fields: fieldsToRefreshOrderEdit, fields: fieldsToRefreshOrderEdit,
@@ -274,11 +281,16 @@ export const updateOrderEditShippingMethodWorkflow = createWorkflow(
updateOrderShippingMethodsStep([updateData.shippingMethod!]) updateOrderShippingMethodsStep([updateData.shippingMethod!])
) )
return new WorkflowResponse( const previewOrderChange = previewOrderChangeStep(
previewOrderChangeStep(input.order_id) as OrderPreviewDTO, input.order_id
{ ) as OrderPreviewDTO
hooks: [setPricingContext] as const,
} releaseLockStep({
) key: input.order_id,
})
return new WorkflowResponse(previewOrderChange, {
hooks: [setPricingContext] as const,
})
} }
) )