diff --git a/.changeset/eleven-news-hug.md b/.changeset/eleven-news-hug.md new file mode 100644 index 0000000000..eba3414d6f --- /dev/null +++ b/.changeset/eleven-news-hug.md @@ -0,0 +1,6 @@ +--- +"@medusajs/core-flows": patch +"@medusajs/utils": patch +--- + +feat(core-flows,utils): Shipping options workflow events emission diff --git a/packages/core/core-flows/src/fulfillment/workflows/create-shipping-options.ts b/packages/core/core-flows/src/fulfillment/workflows/create-shipping-options.ts index c459aa7372..e760ecd122 100644 --- a/packages/core/core-flows/src/fulfillment/workflows/create-shipping-options.ts +++ b/packages/core/core-flows/src/fulfillment/workflows/create-shipping-options.ts @@ -13,6 +13,8 @@ import { import { setShippingOptionsPriceSetsStep } from "../steps/set-shipping-options-price-sets" import { validateFulfillmentProvidersStep } from "../steps/validate-fulfillment-providers" import { validateShippingOptionPricesStep } from "../steps/validate-shipping-option-prices" +import { emitEventStep } from "../../common" +import { ShippingOptionWorkflowEvents } from "@medusajs/framework/utils" /** * The data to create the shipping options. @@ -132,6 +134,12 @@ export const createShippingOptionsWorkflow = createWorkflow( data.shippingOptions ) + const eventData = transform(createdShippingOptions, (data) => { + return data.map((option) => { + return { id: option.id } + }) + }) + const normalizedShippingOptionsPrices = transform( { shippingOptions: createdShippingOptions, @@ -171,7 +179,13 @@ export const createShippingOptionsWorkflow = createWorkflow( } ) - setShippingOptionsPriceSetsStep(normalizedLinkData) + parallelize( + setShippingOptionsPriceSetsStep(normalizedLinkData), + emitEventStep({ + eventName: ShippingOptionWorkflowEvents.CREATED, + data: eventData, + }) + ) return new WorkflowResponse(createdShippingOptions) } ) diff --git a/packages/core/core-flows/src/fulfillment/workflows/delete-shipping-options.ts b/packages/core/core-flows/src/fulfillment/workflows/delete-shipping-options.ts index 721b099982..aed452e306 100644 --- a/packages/core/core-flows/src/fulfillment/workflows/delete-shipping-options.ts +++ b/packages/core/core-flows/src/fulfillment/workflows/delete-shipping-options.ts @@ -1,7 +1,12 @@ import type { FulfillmentWorkflow } from "@medusajs/framework/types" -import { createWorkflow, WorkflowData } from "@medusajs/framework/workflows-sdk" +import { + createWorkflow, + parallelize, + WorkflowData, +} from "@medusajs/framework/workflows-sdk" import { deleteShippingOptionsStep } from "../steps" -import { removeRemoteLinkStep } from "../../common" +import { emitEventStep, removeRemoteLinkStep } from "../../common" +import { ShippingOptionWorkflowEvents } from "@medusajs/framework/utils" export const deleteShippingOptionsWorkflowId = "delete-shipping-options-workflow" @@ -31,6 +36,12 @@ export const deleteShippingOptionsWorkflow = createWorkflow( ) => { const softDeletedEntities = deleteShippingOptionsStep(input.ids) - removeRemoteLinkStep(softDeletedEntities) + parallelize( + removeRemoteLinkStep(softDeletedEntities), + emitEventStep({ + eventName: ShippingOptionWorkflowEvents.DELETED, + data: input.ids, + }) + ) } ) diff --git a/packages/core/core-flows/src/fulfillment/workflows/update-shipping-options.ts b/packages/core/core-flows/src/fulfillment/workflows/update-shipping-options.ts index 3fc20057df..dae6f54ccc 100644 --- a/packages/core/core-flows/src/fulfillment/workflows/update-shipping-options.ts +++ b/packages/core/core-flows/src/fulfillment/workflows/update-shipping-options.ts @@ -12,7 +12,11 @@ import { } from "../steps" import { validateFulfillmentProvidersStep } from "../steps/validate-fulfillment-providers" import { validateShippingOptionPricesStep } from "../steps/validate-shipping-option-prices" -import { ShippingOptionPriceType } from "@medusajs/framework/utils" +import { + ShippingOptionPriceType, + ShippingOptionWorkflowEvents, +} from "@medusajs/framework/utils" +import { emitEventStep } from "../../common" /** * The data to update the shipping options. @@ -92,6 +96,10 @@ export const updateShippingOptionsWorkflow = createWorkflow( data.shippingOptions ) + const eventData = transform(updatedShippingOptions, (data) => { + return data.map((option) => option.id) + }) + const normalizedShippingOptionsPrices = transform( { shippingOptions: updatedShippingOptions, @@ -115,8 +123,14 @@ export const updateShippingOptionsWorkflow = createWorkflow( } ) - setShippingOptionsPricesStep( - normalizedShippingOptionsPrices.shippingOptionsPrices + parallelize( + setShippingOptionsPricesStep( + normalizedShippingOptionsPrices.shippingOptionsPrices + ), + emitEventStep({ + eventName: ShippingOptionWorkflowEvents.UPDATED, + data: eventData, + }) ) return new WorkflowResponse(updatedShippingOptions) diff --git a/packages/core/utils/src/core-flows/events.ts b/packages/core/utils/src/core-flows/events.ts index 6c6d8b4f66..37d9e591cd 100644 --- a/packages/core/utils/src/core-flows/events.ts +++ b/packages/core/utils/src/core-flows/events.ts @@ -861,6 +861,46 @@ export const ShippingOptionTypeWorkflowEvents = { DELETED: "shipping-option-type.deleted", } +/** + * @category Shipping Option + * @customNamespace Fulfillment + */ +export const ShippingOptionWorkflowEvents = { + /** + * Emitted when shipping options are created. + * + * @eventPayload + * ```ts + * { + * id, // The ID of the shipping option + * } + * ``` + */ + CREATED: "shipping-option.created", + /** + * Emitted when shipping options are updated. + * + * @eventPayload + * ```ts + * { + * id, // The ID of the shipping option + * } + * ``` + */ + UPDATED: "shipping-option.updated", + /** + * Emitted when shipping options are deleted. + * + * @eventPayload + * ```ts + * { + * id, // The ID of the shipping option + * } + * ``` + */ + DELETED: "shipping-option.deleted", +} + /** * @category Payment * @customNamespace Payment