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:
Frane Polić
2024-09-16 09:33:12 +02:00
committed by GitHub
parent 512c6fc8ab
commit 9db334554f
4 changed files with 31 additions and 23 deletions

View File

@@ -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,
})
)

View File

@@ -12,7 +12,7 @@ interface ConfirmInventoryPreparationInput {
}[]
items: {
id?: string
variant_id?: string
variant_id?: string | null
quantity: BigNumberInput
}[]
variants: {

View File

@@ -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 },

View File

@@ -143,8 +143,9 @@ export interface ConfirmVariantInventoryWorkflowInputDTO {
}[]
}[]
items: {
variant_id?: string
variant_id?: string | null
quantity: BigNumberInput
id?: string
}[]
itemsToUpdate?: {
data: {