From 5cae91040ef0cdd92074fb63615b340a0491ce36 Mon Sep 17 00:00:00 2001 From: "Carlos R. L. Rodrigues" <37986729+carlos-r-l-rodrigues@users.noreply.github.com> Date: Fri, 2 Aug 2024 06:18:39 -0300 Subject: [PATCH] chore(core-flows): use create order step on complete cart (#8397) --- .../cart/steps/create-order-from-cart.ts | 57 ------------------- .../src/definition/cart/steps/index.ts | 1 - .../cart/workflows/complete-cart.ts | 40 ++++++++++++- 3 files changed, 37 insertions(+), 61 deletions(-) delete mode 100644 packages/core/core-flows/src/definition/cart/steps/create-order-from-cart.ts diff --git a/packages/core/core-flows/src/definition/cart/steps/create-order-from-cart.ts b/packages/core/core-flows/src/definition/cart/steps/create-order-from-cart.ts deleted file mode 100644 index f2dac943d1..0000000000 --- a/packages/core/core-flows/src/definition/cart/steps/create-order-from-cart.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { CartWorkflowDTO } from "@medusajs/types" -import { OrderStatus } from "@medusajs/utils" -import { StepResponse, createStep } from "@medusajs/workflows-sdk" -import { createOrdersWorkflow } from "../../../order/workflows/create-orders" - -interface StepInput { - cart: CartWorkflowDTO -} - -export const createOrderFromCartStepId = "create-order-from-cart" -export const createOrderFromCartStep = createStep( - createOrderFromCartStepId, - async (input: StepInput, { container }) => { - const { cart } = input - - const itemAdjustments = (cart.items || []) - ?.map((item) => item.adjustments || []) - .flat(1) - const shippingAdjustments = (cart.shipping_methods || []) - ?.map((sm) => sm.adjustments || []) - .flat(1) - - const promoCodes = [...itemAdjustments, ...shippingAdjustments] - .map((adjustment) => adjustment.code) - .filter((code) => Boolean) as string[] - - const { transaction, result } = await createOrdersWorkflow(container).run({ - input: { - region_id: cart.region?.id, - customer_id: cart.customer?.id, - sales_channel_id: cart.sales_channel_id, - status: OrderStatus.PENDING, - email: cart.email, - currency_code: cart.currency_code, - shipping_address: cart.shipping_address, - billing_address: cart.billing_address, - // TODO: This should be handle correctly - no_notification: false, - items: cart.items, - shipping_methods: cart.shipping_methods, - metadata: cart.metadata, - promo_codes: promoCodes, - }, - }) - - return new StepResponse(result, { transaction }) - }, - async (flow, { container }) => { - if (!flow) { - return - } - - await createOrdersWorkflow(container).cancel({ - transaction: flow.transaction, - }) - } -) diff --git a/packages/core/core-flows/src/definition/cart/steps/index.ts b/packages/core/core-flows/src/definition/cart/steps/index.ts index 9b18ae5170..caaee7c2b2 100644 --- a/packages/core/core-flows/src/definition/cart/steps/index.ts +++ b/packages/core/core-flows/src/definition/cart/steps/index.ts @@ -3,7 +3,6 @@ export * from "./confirm-inventory" export * from "./create-carts" export * from "./create-line-item-adjustments" export * from "./create-line-items" -export * from "./create-order-from-cart" export * from "./create-shipping-method-adjustments" export * from "./find-one-or-any-region" export * from "./find-or-create-customer" diff --git a/packages/core/core-flows/src/definition/cart/workflows/complete-cart.ts b/packages/core/core-flows/src/definition/cart/workflows/complete-cart.ts index 2f5f395a3c..b9ef4b05fd 100644 --- a/packages/core/core-flows/src/definition/cart/workflows/complete-cart.ts +++ b/packages/core/core-flows/src/definition/cart/workflows/complete-cart.ts @@ -1,5 +1,5 @@ import { OrderDTO } from "@medusajs/types" -import { Modules, OrderEvents } from "@medusajs/utils" +import { Modules, OrderEvents, OrderStatus } from "@medusajs/utils" import { WorkflowData, WorkflowResponse, @@ -12,8 +12,9 @@ import { emitEventStep, useRemoteQueryStep, } from "../../../common" +import { createOrdersStep } from "../../../order/steps/create-orders" import { authorizePaymentSessionStep } from "../../../payment/steps/authorize-payment-session" -import { createOrderFromCartStep, validateCartPaymentsStep } from "../steps" +import { validateCartPaymentsStep } from "../steps" import { reserveInventoryStep } from "../steps/reserve-inventory" import { completeCartFields } from "../utils/fields" import { confirmVariantInventoryWorkflow } from "./confirm-variant-inventory" @@ -78,7 +79,40 @@ export const completeCartWorkflow = createWorkflow( }).config({ name: "final-cart" }) ) - const order = createOrderFromCartStep({ cart: finalCart }) + const cartToOrder = transform({ input, cart }, ({ cart }) => { + const itemAdjustments = (cart.items || []) + ?.map((item) => item.adjustments || []) + .flat(1) + const shippingAdjustments = (cart.shipping_methods || []) + ?.map((sm) => sm.adjustments || []) + .flat(1) + + const promoCodes = [...itemAdjustments, ...shippingAdjustments] + .map((adjustment) => adjustment.code) + .filter((code) => Boolean) as string[] + + return { + region_id: cart.region?.id, + customer_id: cart.customer?.id, + sales_channel_id: cart.sales_channel_id, + status: OrderStatus.PENDING, + email: cart.email, + currency_code: cart.currency_code, + shipping_address: cart.shipping_address, + billing_address: cart.billing_address, + no_notification: false, + items: cart.items, + shipping_methods: cart.shipping_methods, + metadata: cart.metadata, + promo_codes: promoCodes, + } + }) + + const createdOrders = createOrdersStep([cartToOrder]) + const order = transform( + { createdOrders }, + ({ createdOrders }) => createdOrders[0] + ) createRemoteLinkStep([ {