fix(core-flows): draft order reservations (#12115)

* fix: draft order reservations

* feat: add test case

* fix: assert item ids
This commit is contained in:
Frane Polić
2025-04-13 17:40:16 +02:00
committed by GitHub
parent 1f73281ab8
commit 413a0da26c
4 changed files with 200 additions and 9 deletions

View File

@@ -114,19 +114,25 @@ export const confirmDraftOrderEditWorkflow = createWorkflow(
throw_if_key_not_found: true,
}).config({ name: "order-items-query" })
const lineItemIds = transform(
const { removedLineItemIds } = transform(
{ orderItems, previousOrderItems: order.items },
(data) => {
const previousItemIds = (data.previousOrderItems || []).map(
({ id }) => id
) // items that have been removed with the change
const newItemIds = data.orderItems.items.map(({ id }) => id)
return [...new Set([...previousItemIds, ...newItemIds])]
)
const currentItemIds = data.orderItems.items.map(({ id }) => id)
const removedItemIds = previousItemIds.filter(
(id) => !currentItemIds.includes(id)
)
return {
removedLineItemIds: removedItemIds,
}
}
)
deleteReservationsByLineItemsStep(lineItemIds)
deleteReservationsByLineItemsStep(removedLineItemIds)
const { variants, items } = transform(
{ orderItems, orderPreview },

View File

@@ -1,4 +1,8 @@
import { Modules, OrderStatus } from "@medusajs/framework/utils"
import {
Modules,
OrderStatus,
OrderWorkflowEvents,
} from "@medusajs/framework/utils"
import {
createStep,
createWorkflow,
@@ -7,7 +11,7 @@ import {
WorkflowResponse,
} from "@medusajs/framework/workflows-sdk"
import { IOrderModuleService, OrderDTO } from "@medusajs/types"
import { useRemoteQueryStep } from "../../common"
import { emitEventStep, useRemoteQueryStep } from "../../common"
import { validateDraftOrderStep } from "../steps/validate-draft-order"
const convertDraftOrderWorkflowId = "convert-draft-order"
@@ -91,6 +95,11 @@ export const convertDraftOrderWorkflow = createWorkflow(
const updatedOrder = convertDraftOrderStep({ id: input.id })
emitEventStep({
eventName: OrderWorkflowEvents.PLACED,
data: { id: updatedOrder.id },
})
return new WorkflowResponse(updatedOrder)
}
)