fix(core-flows): item id in reservations (#9097)
**What** - on cart completion, when creating reservations, use line item id instead of cart item id - NOTE: inventory reservation is now done after we create the order --- FIXES CC-448
This commit is contained in:
@@ -2238,7 +2238,7 @@ medusaIntegrationTestRunner({
|
||||
location_id: stockLocation.id,
|
||||
inventory_item_id: inventoryItem.id,
|
||||
quantity: cart.items[0].quantity,
|
||||
line_item_id: cart.items[0].id,
|
||||
line_item_id: response.data.order.items[0].id,
|
||||
})
|
||||
)
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ interface ConfirmInventoryPreparationInput {
|
||||
}[]
|
||||
items: {
|
||||
id?: string
|
||||
variant_id?: string
|
||||
variant_id?: string | null
|
||||
quantity: BigNumberInput
|
||||
}[]
|
||||
variants: {
|
||||
|
||||
@@ -84,26 +84,12 @@ export const completeCartWorkflow = createWorkflow(
|
||||
}
|
||||
)
|
||||
|
||||
const formatedInventoryItems = transform(
|
||||
{
|
||||
input: {
|
||||
sales_channel_id,
|
||||
variants,
|
||||
items,
|
||||
},
|
||||
},
|
||||
prepareConfirmInventoryInput
|
||||
)
|
||||
|
||||
const [, finalCart] = parallelize(
|
||||
reserveInventoryStep(formatedInventoryItems),
|
||||
useRemoteQueryStep({
|
||||
entry_point: "cart",
|
||||
fields: completeCartFields,
|
||||
variables: { id: input.id },
|
||||
list: false,
|
||||
}).config({ name: "final-cart" })
|
||||
)
|
||||
const finalCart = useRemoteQueryStep({
|
||||
entry_point: "cart",
|
||||
fields: completeCartFields,
|
||||
variables: { id: input.id },
|
||||
list: false,
|
||||
}).config({ name: "final-cart" })
|
||||
|
||||
const cartToOrder = transform({ cart }, ({ cart }) => {
|
||||
const allItems = (cart.items ?? []).map((item) => {
|
||||
@@ -162,11 +148,31 @@ export const completeCartWorkflow = createWorkflow(
|
||||
})
|
||||
|
||||
const createdOrders = createOrdersStep([cartToOrder])
|
||||
|
||||
const order = transform(
|
||||
{ createdOrders },
|
||||
({ createdOrders }) => createdOrders[0]
|
||||
)
|
||||
|
||||
const reservationItemsData = transform({ order }, ({ order }) =>
|
||||
order.items!.map((i) => ({
|
||||
variant_id: i.variant_id,
|
||||
quantity: i.quantity,
|
||||
id: i.id,
|
||||
}))
|
||||
)
|
||||
|
||||
const formatedInventoryItems = transform(
|
||||
{
|
||||
input: {
|
||||
sales_channel_id,
|
||||
variants,
|
||||
items: reservationItemsData,
|
||||
},
|
||||
},
|
||||
prepareConfirmInventoryInput
|
||||
)
|
||||
|
||||
const updateCompletedAt = transform({ cart }, ({ cart }) => {
|
||||
return {
|
||||
id: cart.id,
|
||||
@@ -188,6 +194,7 @@ export const completeCartWorkflow = createWorkflow(
|
||||
},
|
||||
]),
|
||||
updateCartsStep([updateCompletedAt]),
|
||||
reserveInventoryStep(formatedInventoryItems),
|
||||
emitEventStep({
|
||||
eventName: OrderWorkflowEvents.PLACED,
|
||||
data: { id: order.id },
|
||||
|
||||
@@ -143,8 +143,9 @@ export interface ConfirmVariantInventoryWorkflowInputDTO {
|
||||
}[]
|
||||
}[]
|
||||
items: {
|
||||
variant_id?: string
|
||||
variant_id?: string | null
|
||||
quantity: BigNumberInput
|
||||
id?: string
|
||||
}[]
|
||||
itemsToUpdate?: {
|
||||
data: {
|
||||
|
||||
Reference in New Issue
Block a user