From 89859987565b1fc872c7cd1c6d23144b97f454bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frane=20Poli=C4=87?= <16856471+fPolic@users.noreply.github.com> Date: Wed, 30 Apr 2025 17:44:39 +0200 Subject: [PATCH] feat(core-flows, utils): add OrderEdit events (#12320) * feat(core-flows, utils): add OrderEdit events * fix: typo --- .changeset/green-papayas-explain.md | 6 +++ .../order-edit/cancel-begin-order-edit.ts | 40 ++++++++++++++----- .../order-edit/confirm-order-edit-request.ts | 18 ++++++++- .../order-edit/request-order-edit.ts | 24 +++++++++-- packages/core/utils/src/core-flows/events.ts | 6 +++ 5 files changed, 79 insertions(+), 15 deletions(-) create mode 100644 .changeset/green-papayas-explain.md diff --git a/.changeset/green-papayas-explain.md b/.changeset/green-papayas-explain.md new file mode 100644 index 0000000000..955a9df04d --- /dev/null +++ b/.changeset/green-papayas-explain.md @@ -0,0 +1,6 @@ +--- +"@medusajs/core-flows": patch +"@medusajs/utils": patch +--- + +feat(core-flows,utils): add Order Edit events diff --git a/packages/core/core-flows/src/order/workflows/order-edit/cancel-begin-order-edit.ts b/packages/core/core-flows/src/order/workflows/order-edit/cancel-begin-order-edit.ts index dcd00f76f9..dcf2d8daec 100644 --- a/packages/core/core-flows/src/order/workflows/order-edit/cancel-begin-order-edit.ts +++ b/packages/core/core-flows/src/order/workflows/order-edit/cancel-begin-order-edit.ts @@ -1,5 +1,9 @@ import { OrderChangeDTO, OrderDTO } from "@medusajs/framework/types" -import { ChangeActionType, OrderChangeStatus } from "@medusajs/framework/utils" +import { + ChangeActionType, + OrderChangeStatus, + OrderEditWorkflowEvents, +} from "@medusajs/framework/utils" import { WorkflowData, createStep, @@ -7,7 +11,7 @@ import { parallelize, transform, } from "@medusajs/framework/workflows-sdk" -import { useRemoteQueryStep } from "../../../common" +import { emitEventStep, useRemoteQueryStep } from "../../../common" import { deleteOrderChangesStep, deleteOrderShippingMethods } from "../../steps" import { throwIfIsCancelled, @@ -31,14 +35,14 @@ export type CancelBeginOrderEditValidationStepInput = { /** * This step validates that a requested order edit can be canceled. * If the order is canceled or the order change is not active, the step will throw an error. - * + * * :::note - * + * * You can retrieve an order and order change details using [Query](https://docs.medusajs.com/learn/fundamentals/module-links/query), * or [useQueryGraphStep](https://docs.medusajs.com/resources/references/medusa-workflows/steps/useQueryGraphStep). - * + * * ::: - * + * * @example * const data = cancelBeginOrderEditValidationStep({ * order: { @@ -76,10 +80,10 @@ export const cancelBeginOrderEditWorkflowId = "cancel-begin-order-edit" /** * This workflow cancels a requested edit for an order. It's used by the * [Cancel Order Edit Admin API Route](https://docs.medusajs.com/api/admin#order-edits_deleteordereditsid). - * + * * You can use this workflow within your customizations or your own custom workflows, allowing you to cancel an order edit * in your custom flow. - * + * * @example * const { result } = await cancelBeginOrderEditWorkflow(container) * .run({ @@ -87,9 +91,9 @@ export const cancelBeginOrderEditWorkflowId = "cancel-begin-order-edit" * order_id: "order_123", * } * }) - * + * * @summary - * + * * Cancel a requested order edit. */ export const cancelBeginOrderEditWorkflow = createWorkflow( @@ -128,9 +132,23 @@ export const cancelBeginOrderEditWorkflow = createWorkflow( } ) + const eventData = transform( + { order, orderChange }, + ({ order, orderChange }) => { + return { + order_id: order.id, + actions: orderChange.actions, + } + } + ) + parallelize( deleteOrderChangesStep({ ids: [orderChange.id] }), - deleteOrderShippingMethods({ ids: shippingToRemove }) + deleteOrderShippingMethods({ ids: shippingToRemove }), + emitEventStep({ + eventName: OrderEditWorkflowEvents.CANCELED, + data: eventData, + }) ) } ) diff --git a/packages/core/core-flows/src/order/workflows/order-edit/confirm-order-edit-request.ts b/packages/core/core-flows/src/order/workflows/order-edit/confirm-order-edit-request.ts index dc0c4d1b6c..77a877d5a4 100644 --- a/packages/core/core-flows/src/order/workflows/order-edit/confirm-order-edit-request.ts +++ b/packages/core/core-flows/src/order/workflows/order-edit/confirm-order-edit-request.ts @@ -8,6 +8,7 @@ import { ChangeActionType, MathBN, OrderChangeStatus, + OrderEditWorkflowEvents, } from "@medusajs/framework/utils" import { WorkflowResponse, @@ -17,7 +18,7 @@ import { } from "@medusajs/framework/workflows-sdk" import { reserveInventoryStep } from "../../../cart/steps/reserve-inventory" import { prepareConfirmInventoryInput } from "../../../cart/utils/prepare-confirm-inventory-input" -import { useRemoteQueryStep } from "../../../common" +import { emitEventStep, useRemoteQueryStep } from "../../../common" import { deleteReservationsByLineItemsStep } from "../../../reservation" import { previewOrderChangeStep } from "../../steps" import { confirmOrderChanges } from "../../steps/confirm-order-changes" @@ -287,6 +288,21 @@ export const confirmOrderEditRequestWorkflow = createWorkflow( }, }) + const eventData = transform( + { order, orderChange }, + ({ order, orderChange }) => { + return { + order_id: order.id, + actions: orderChange.actions, + } + } + ) + + emitEventStep({ + eventName: OrderEditWorkflowEvents.CONFIRMED, + data: eventData, + }) + return new WorkflowResponse(orderPreview) } ) diff --git a/packages/core/core-flows/src/order/workflows/order-edit/request-order-edit.ts b/packages/core/core-flows/src/order/workflows/order-edit/request-order-edit.ts index 0d52e63bbb..7cd8ecb922 100644 --- a/packages/core/core-flows/src/order/workflows/order-edit/request-order-edit.ts +++ b/packages/core/core-flows/src/order/workflows/order-edit/request-order-edit.ts @@ -3,14 +3,17 @@ import { OrderDTO, OrderPreviewDTO, } from "@medusajs/framework/types" -import { OrderChangeStatus } from "@medusajs/framework/utils" +import { + OrderChangeStatus, + OrderEditWorkflowEvents, +} from "@medusajs/framework/utils" import { WorkflowResponse, createStep, createWorkflow, transform, } from "@medusajs/framework/workflows-sdk" -import { useRemoteQueryStep } from "../../../common" +import { emitEventStep, useRemoteQueryStep } from "../../../common" import { previewOrderChangeStep } from "../../steps" import { updateOrderChangesStep } from "../../steps/update-order-changes" import { @@ -134,7 +137,7 @@ export const requestOrderEditRequestWorkflow = createWorkflow( const orderChange: OrderChangeDTO = useRemoteQueryStep({ entry_point: "order_change", - fields: ["id", "canceled_at"], + fields: ["id", "canceled_at", "actions.*"], variables: { filters: { order_id: input.order_id, @@ -152,6 +155,21 @@ export const requestOrderEditRequestWorkflow = createWorkflow( const updateOrderChangesData = getOrderChangesData({ input, orderChange }) updateOrderChangesStep(updateOrderChangesData) + const eventData = transform( + { order, orderChange }, + ({ order, orderChange }) => { + return { + order_id: order.id, + actions: orderChange.actions, + } + } + ) + + emitEventStep({ + eventName: OrderEditWorkflowEvents.REQUESTED, + data: eventData, + }) + return new WorkflowResponse(previewOrderChangeStep(order.id)) } ) diff --git a/packages/core/utils/src/core-flows/events.ts b/packages/core/utils/src/core-flows/events.ts index 57d871c54a..670dc04c16 100644 --- a/packages/core/utils/src/core-flows/events.ts +++ b/packages/core/utils/src/core-flows/events.ts @@ -31,6 +31,12 @@ export const OrderWorkflowEvents = { TRANSFER_REQUESTED: "order.transfer_requested", } +export const OrderEditWorkflowEvents = { + REQUESTED: "order-edit.requested", + CONFIRMED: "order-edit.confirmed", + CANCELED: "order-edit.canceled", +} + export const UserWorkflowEvents = { CREATED: "user.created", UPDATED: "user.updated",