From 263d9d0f22de69b27ae333b9419367a7d194de6e Mon Sep 17 00:00:00 2001 From: Riqwan Thamir Date: Mon, 17 Jun 2024 18:05:05 +0200 Subject: [PATCH] feat(core-flows,utils): add payment + shipment workflow events (#7749) --- .../src/fulfillment/steps/update-fulfillment.ts | 4 ++-- .../src/fulfillment/workflows/create-shipment.ts | 6 ++---- .../src/fulfillment/workflows/update-fulfillment.ts | 6 ++---- .../core-flows/src/order/workflows/create-shipment.ts | 11 ++++++++--- .../src/payment/workflows/capture-payment.ts | 8 ++++++++ .../src/payment/workflows/refund-payment.ts | 8 ++++++++ packages/core/utils/src/fulfillment/events.ts | 8 ++++---- packages/core/utils/src/payment/events.ts | 4 ++++ packages/core/utils/src/payment/index.ts | 1 + 9 files changed, 39 insertions(+), 17 deletions(-) create mode 100644 packages/core/utils/src/payment/events.ts diff --git a/packages/core/core-flows/src/fulfillment/steps/update-fulfillment.ts b/packages/core/core-flows/src/fulfillment/steps/update-fulfillment.ts index f0bb8f8fa7..f3f1d6864f 100644 --- a/packages/core/core-flows/src/fulfillment/steps/update-fulfillment.ts +++ b/packages/core/core-flows/src/fulfillment/steps/update-fulfillment.ts @@ -21,9 +21,9 @@ export const updateFulfillmentStep = createStep( relations, }) - await service.updateFulfillment(id, data) + const updated = await service.updateFulfillment(id, data) - return new StepResponse(void 0, fulfillment) + return new StepResponse(updated, fulfillment) }, async (fulfillment, { container }) => { if (!fulfillment) { diff --git a/packages/core/core-flows/src/fulfillment/workflows/create-shipment.ts b/packages/core/core-flows/src/fulfillment/workflows/create-shipment.ts index a687528d50..8d6e608e1c 100644 --- a/packages/core/core-flows/src/fulfillment/workflows/create-shipment.ts +++ b/packages/core/core-flows/src/fulfillment/workflows/create-shipment.ts @@ -10,9 +10,7 @@ import { updateFulfillmentWorkflow } from "./update-fulfillment" export const createShipmentWorkflowId = "create-shipment-workflow" export const createShipmentWorkflow = createWorkflow( createShipmentWorkflowId, - ( - input: WorkflowData - ): WorkflowData => { + (input: WorkflowData) => { validateShipmentStep(input.id) const update = transform({ input }, (data) => ({ @@ -20,7 +18,7 @@ export const createShipmentWorkflow = createWorkflow( shipped_at: new Date(), })) - updateFulfillmentWorkflow.runAsStep({ + return updateFulfillmentWorkflow.runAsStep({ input: update, }) } diff --git a/packages/core/core-flows/src/fulfillment/workflows/update-fulfillment.ts b/packages/core/core-flows/src/fulfillment/workflows/update-fulfillment.ts index b6cb926bec..2b97b716d5 100644 --- a/packages/core/core-flows/src/fulfillment/workflows/update-fulfillment.ts +++ b/packages/core/core-flows/src/fulfillment/workflows/update-fulfillment.ts @@ -5,9 +5,7 @@ import { updateFulfillmentStep } from "../steps" export const updateFulfillmentWorkflowId = "update-fulfillment-workflow" export const updateFulfillmentWorkflow = createWorkflow( updateFulfillmentWorkflowId, - ( - input: WorkflowData - ): WorkflowData => { - updateFulfillmentStep(input) + (input: WorkflowData) => { + return updateFulfillmentStep(input) } ) diff --git a/packages/core/core-flows/src/order/workflows/create-shipment.ts b/packages/core/core-flows/src/order/workflows/create-shipment.ts index aa6ddb8402..db470d68dd 100644 --- a/packages/core/core-flows/src/order/workflows/create-shipment.ts +++ b/packages/core/core-flows/src/order/workflows/create-shipment.ts @@ -1,5 +1,5 @@ import { FulfillmentDTO, OrderDTO, OrderWorkflow } from "@medusajs/types" -import { Modules } from "@medusajs/utils" +import { FulfillmentEvents, Modules } from "@medusajs/utils" import { WorkflowData, createStep, @@ -7,7 +7,7 @@ import { parallelize, transform, } from "@medusajs/workflows-sdk" -import { useRemoteQueryStep } from "../../common" +import { emitEventStep, useRemoteQueryStep } from "../../common" import { createShipmentWorkflow } from "../../fulfillment" import { registerOrderShipmentStep } from "../steps" import { @@ -101,11 +101,16 @@ export const createOrderShipmentWorkflow = createWorkflow( prepareRegisterShipmentData ) - parallelize( + const [shipment] = parallelize( createShipmentWorkflow.runAsStep({ input: fulfillmentData, }), registerOrderShipmentStep(shipmentData) ) + + emitEventStep({ + eventName: FulfillmentEvents.SHIPMENT_CREATED, + data: { id: shipment.id }, + }) } ) diff --git a/packages/core/core-flows/src/payment/workflows/capture-payment.ts b/packages/core/core-flows/src/payment/workflows/capture-payment.ts index c36859ce76..e17722ce68 100644 --- a/packages/core/core-flows/src/payment/workflows/capture-payment.ts +++ b/packages/core/core-flows/src/payment/workflows/capture-payment.ts @@ -1,5 +1,7 @@ import { BigNumberInput, PaymentDTO } from "@medusajs/types" +import { PaymentEvents } from "@medusajs/utils" import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk" +import { emitEventStep } from "../../common" import { capturePaymentStep } from "../steps/capture-payment" export const capturePaymentWorkflowId = "capture-payment-workflow" @@ -13,6 +15,12 @@ export const capturePaymentWorkflow = createWorkflow( }> ): WorkflowData => { const payment = capturePaymentStep(input) + + emitEventStep({ + eventName: PaymentEvents.CAPTURED, + data: { id: payment.id }, + }) + return payment } ) diff --git a/packages/core/core-flows/src/payment/workflows/refund-payment.ts b/packages/core/core-flows/src/payment/workflows/refund-payment.ts index 081b696066..190a96ac2d 100644 --- a/packages/core/core-flows/src/payment/workflows/refund-payment.ts +++ b/packages/core/core-flows/src/payment/workflows/refund-payment.ts @@ -1,5 +1,7 @@ import { BigNumberInput } from "@medusajs/types" +import { PaymentEvents } from "@medusajs/utils" import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk" +import { emitEventStep } from "../../common" import { refundPaymentStep } from "../steps/refund-payment" export const refundPaymentWorkflowId = "refund-payment-workflow" @@ -13,6 +15,12 @@ export const refundPaymentWorkflow = createWorkflow( }> ) => { const payment = refundPaymentStep(input) + + emitEventStep({ + eventName: PaymentEvents.REFUNDED, + data: { id: payment.id }, + }) + return payment } ) diff --git a/packages/core/utils/src/fulfillment/events.ts b/packages/core/utils/src/fulfillment/events.ts index 04933fc580..1f85fbee16 100644 --- a/packages/core/utils/src/fulfillment/events.ts +++ b/packages/core/utils/src/fulfillment/events.ts @@ -27,7 +27,7 @@ const eventBaseNames: [ "fulfillmentLabel", ] -export const FulfillmentEvents = buildEventNamesFromEntityName( - eventBaseNames, - Modules.FULFILLMENT -) +export const FulfillmentEvents = { + ...buildEventNamesFromEntityName(eventBaseNames, Modules.FULFILLMENT), + SHIPMENT_CREATED: "shipment.created", +} diff --git a/packages/core/utils/src/payment/events.ts b/packages/core/utils/src/payment/events.ts new file mode 100644 index 0000000000..1a7e0b30eb --- /dev/null +++ b/packages/core/utils/src/payment/events.ts @@ -0,0 +1,4 @@ +export const PaymentEvents = { + CAPTURED: "payment.captured", + REFUNDED: "payment.refunded", +} diff --git a/packages/core/utils/src/payment/index.ts b/packages/core/utils/src/payment/index.ts index 315d9f49a1..7e4887faee 100644 --- a/packages/core/utils/src/payment/index.ts +++ b/packages/core/utils/src/payment/index.ts @@ -1,4 +1,5 @@ export * from "./abstract-payment-provider" +export * from "./events" export * from "./payment-collection" export * from "./payment-session" export * from "./webhook"