From 89c6ef8fc972810aa365d89034290261431d995a Mon Sep 17 00:00:00 2001 From: "Carlos R. L. Rodrigues" <37986729+carlos-r-l-rodrigues@users.noreply.github.com> Date: Fri, 30 Aug 2024 16:32:08 -0300 Subject: [PATCH] chore(core-flows): added workflow events (#8915) * chore(core-flows): added workflow events * remove from parallelize * check array --- .../src/cart/workflows/complete-cart.ts | 33 ++++++------ .../customer/workflows/create-customers.ts | 23 +++++++- .../customer/workflows/delete-customers.ts | 14 +++++ .../customer/workflows/update-customers.ts | 21 ++++++++ .../src/invite/workflows/accept-invite.ts | 23 ++++++-- .../src/invite/workflows/create-invites.ts | 24 +++++++-- .../src/invite/workflows/delete-invites.ts | 23 ++++++-- .../workflows/update-product-categories.ts | 6 ++- .../product/workflows/update-collections.ts | 6 ++- .../workflows/update-product-variants.ts | 2 +- .../src/product/workflows/update-products.ts | 15 +++--- .../src/region/workflows/create-regions.ts | 20 +++++-- .../src/region/workflows/delete-regions.ts | 21 +++++++- .../src/region/workflows/update-regions.ts | 20 +++++-- .../workflows/create-sales-channels.ts | 31 +++++++++-- .../workflows/delete-sales-channels.ts | 27 ++++++++-- .../workflows/update-sales-channels.ts | 24 ++++++++- .../src/user/workflows/create-user-account.ts | 13 +++-- .../src/user/workflows/create-users.ts | 21 ++++++-- .../src/user/workflows/delete-users.ts | 23 ++++++-- .../src/user/workflows/update-users.ts | 23 ++++++-- packages/core/utils/src/bundles.ts | 1 + packages/core/utils/src/core-flows/events.ts | 53 +++++++++++++++++++ packages/core/utils/src/core-flows/index.ts | 1 + packages/core/utils/src/index.ts | 3 +- packages/core/utils/src/order/events.ts | 5 -- packages/core/utils/src/order/index.ts | 1 - packages/core/utils/src/product/events.ts | 24 --------- packages/core/utils/src/user/events.ts | 6 +++ 29 files changed, 407 insertions(+), 100 deletions(-) create mode 100644 packages/core/utils/src/core-flows/events.ts create mode 100644 packages/core/utils/src/core-flows/index.ts delete mode 100644 packages/core/utils/src/order/events.ts diff --git a/packages/core/core-flows/src/cart/workflows/complete-cart.ts b/packages/core/core-flows/src/cart/workflows/complete-cart.ts index 35e8b0e781..17d9550068 100644 --- a/packages/core/core-flows/src/cart/workflows/complete-cart.ts +++ b/packages/core/core-flows/src/cart/workflows/complete-cart.ts @@ -158,23 +158,24 @@ export const completeCartWorkflow = createWorkflow( ({ createdOrders }) => createdOrders[0] ) - createRemoteLinkStep([ - { - [Modules.ORDER]: { order_id: order.id }, - [Modules.CART]: { cart_id: finalCart.id }, - }, - { - [Modules.ORDER]: { order_id: order.id }, - [Modules.PAYMENT]: { - payment_collection_id: cart.payment_collection.id, + parallelize( + createRemoteLinkStep([ + { + [Modules.ORDER]: { order_id: order.id }, + [Modules.CART]: { cart_id: finalCart.id }, }, - }, - ]) - - emitEventStep({ - eventName: OrderWorkflowEvents.PLACED, - data: { id: order.id }, - }) + { + [Modules.ORDER]: { order_id: order.id }, + [Modules.PAYMENT]: { + payment_collection_id: cart.payment_collection.id, + }, + }, + ]), + emitEventStep({ + eventName: OrderWorkflowEvents.PLACED, + data: { id: order.id }, + }) + ) return new WorkflowResponse(order) } diff --git a/packages/core/core-flows/src/customer/workflows/create-customers.ts b/packages/core/core-flows/src/customer/workflows/create-customers.ts index 4be02e0ca5..8714a58460 100644 --- a/packages/core/core-flows/src/customer/workflows/create-customers.ts +++ b/packages/core/core-flows/src/customer/workflows/create-customers.ts @@ -1,13 +1,18 @@ -import { CreateCustomerDTO, AdditionalData } from "@medusajs/types" +import { AdditionalData, CreateCustomerDTO } from "@medusajs/types" +import { CustomerWorkflowEvents } from "@medusajs/utils" import { WorkflowData, WorkflowResponse, createHook, createWorkflow, + transform, } from "@medusajs/workflows-sdk" +import { emitEventStep } from "../../common/steps/emit-event" import { createCustomersStep } from "../steps" -export type CreateCustomersWorkflowInput = { customersData: CreateCustomerDTO[] } & AdditionalData +export type CreateCustomersWorkflowInput = { + customersData: CreateCustomerDTO[] +} & AdditionalData export const createCustomersWorkflowId = "create-customers" /** @@ -22,6 +27,20 @@ export const createCustomersWorkflow = createWorkflow( additional_data: input.additional_data, }) + const customerIdEvents = transform( + { createdCustomers }, + ({ createdCustomers }) => { + return createdCustomers.map((v) => { + return { id: v.id } + }) + } + ) + + emitEventStep({ + eventName: CustomerWorkflowEvents.CREATED, + data: customerIdEvents, + }) + return new WorkflowResponse(createdCustomers, { hooks: [customersCreated], }) diff --git a/packages/core/core-flows/src/customer/workflows/delete-customers.ts b/packages/core/core-flows/src/customer/workflows/delete-customers.ts index 1232bc3516..d0edfbd2bd 100644 --- a/packages/core/core-flows/src/customer/workflows/delete-customers.ts +++ b/packages/core/core-flows/src/customer/workflows/delete-customers.ts @@ -1,9 +1,12 @@ +import { CustomerWorkflowEvents } from "@medusajs/utils" import { WorkflowData, WorkflowResponse, createHook, createWorkflow, + transform, } from "@medusajs/workflows-sdk" +import { emitEventStep } from "../../common/steps/emit-event" import { deleteCustomersStep } from "../steps" export type DeleteCustomersWorkflowInput = { ids: string[] } @@ -20,6 +23,17 @@ export const deleteCustomersWorkflow = createWorkflow( ids: input.ids, }) + const customerIdEvents = transform({ input }, ({ input }) => { + return input.ids?.map((id) => { + return { id } + }) + }) + + emitEventStep({ + eventName: CustomerWorkflowEvents.DELETED, + data: customerIdEvents, + }) + return new WorkflowResponse(deletedCustomers, { hooks: [customersDeleted], }) diff --git a/packages/core/core-flows/src/customer/workflows/update-customers.ts b/packages/core/core-flows/src/customer/workflows/update-customers.ts index 557c39e3e3..b00a5a8f8c 100644 --- a/packages/core/core-flows/src/customer/workflows/update-customers.ts +++ b/packages/core/core-flows/src/customer/workflows/update-customers.ts @@ -3,12 +3,15 @@ import { CustomerUpdatableFields, FilterableCustomerProps, } from "@medusajs/types" +import { CustomerWorkflowEvents } from "@medusajs/utils" import { WorkflowData, WorkflowResponse, createHook, createWorkflow, + transform, } from "@medusajs/workflows-sdk" +import { emitEventStep } from "../../common/steps/emit-event" import { updateCustomersStep } from "../steps" export type UpdateCustomersWorkflowInput = { @@ -29,6 +32,24 @@ export const updateCustomersWorkflow = createWorkflow( additional_data: input.additional_data, }) + const customerIdEvents = transform( + { updatedCustomers }, + ({ updatedCustomers }) => { + const arr = Array.isArray(updatedCustomers) + ? updatedCustomers + : [updatedCustomers] + + return arr?.map((customer) => { + return { id: customer.id } + }) + } + ) + + emitEventStep({ + eventName: CustomerWorkflowEvents.UPDATED, + data: customerIdEvents, + }) + return new WorkflowResponse(updatedCustomers, { hooks: [customersUpdated], }) diff --git a/packages/core/core-flows/src/invite/workflows/accept-invite.ts b/packages/core/core-flows/src/invite/workflows/accept-invite.ts index 2a1e49657c..de53eb77a7 100644 --- a/packages/core/core-flows/src/invite/workflows/accept-invite.ts +++ b/packages/core/core-flows/src/invite/workflows/accept-invite.ts @@ -1,14 +1,17 @@ import { InviteWorkflow, UserDTO } from "@medusajs/types" +import { InviteWorkflowEvents } from "@medusajs/utils" import { WorkflowData, WorkflowResponse, createWorkflow, + parallelize, transform, } from "@medusajs/workflows-sdk" -import { createUsersStep } from "../../user" +import { setAuthAppMetadataStep } from "../../auth" +import { emitEventStep } from "../../common/steps/emit-event" +import { createUsersWorkflow } from "../../user" import { deleteInvitesStep } from "../steps" import { validateTokenStep } from "../steps/validate-token" -import { setAuthAppMetadataStep } from "../../auth" export const acceptInviteWorkflowId = "accept-invite-workflow" /** @@ -33,7 +36,11 @@ export const acceptInviteWorkflow = createWorkflow( } ) - const users = createUsersStep(createUserInput) + const users = createUsersWorkflow.runAsStep({ + input: { + users: createUserInput, + }, + }) const authUserInput = transform({ input, users }, ({ input, users }) => { const createdUser = users[0] @@ -45,8 +52,14 @@ export const acceptInviteWorkflow = createWorkflow( } }) - setAuthAppMetadataStep(authUserInput) - deleteInvitesStep([invite.id]) + parallelize( + setAuthAppMetadataStep(authUserInput), + deleteInvitesStep([invite.id]), + emitEventStep({ + eventName: InviteWorkflowEvents.ACCEPTED, + data: { id: invite.id }, + }) + ) return new WorkflowResponse(users) } diff --git a/packages/core/core-flows/src/invite/workflows/create-invites.ts b/packages/core/core-flows/src/invite/workflows/create-invites.ts index f7460e55a8..0aa632d72e 100644 --- a/packages/core/core-flows/src/invite/workflows/create-invites.ts +++ b/packages/core/core-flows/src/invite/workflows/create-invites.ts @@ -1,11 +1,13 @@ +import { InviteDTO, InviteWorkflow } from "@medusajs/types" +import { InviteWorkflowEvents } from "@medusajs/utils" import { WorkflowData, WorkflowResponse, createWorkflow, + transform, } from "@medusajs/workflows-sdk" +import { emitEventStep } from "../../common/steps/emit-event" import { createInviteStep } from "../steps" -import { InviteDTO, InviteWorkflow } from "@medusajs/types" - export const createInvitesWorkflowId = "create-invite-step" /** * This workflow creates one or more invites. @@ -15,6 +17,22 @@ export const createInvitesWorkflow = createWorkflow( ( input: WorkflowData ): WorkflowResponse => { - return new WorkflowResponse(createInviteStep(input.invites)) + const createdInvites = createInviteStep(input.invites) + + const invitesIdEvents = transform( + { createdInvites }, + ({ createdInvites }) => { + return createdInvites.map((v) => { + return { id: v.id } + }) + } + ) + + emitEventStep({ + eventName: InviteWorkflowEvents.CREATED, + data: invitesIdEvents, + }) + + return new WorkflowResponse(createdInvites) } ) diff --git a/packages/core/core-flows/src/invite/workflows/delete-invites.ts b/packages/core/core-flows/src/invite/workflows/delete-invites.ts index f6f66b0822..06ef65cf7d 100644 --- a/packages/core/core-flows/src/invite/workflows/delete-invites.ts +++ b/packages/core/core-flows/src/invite/workflows/delete-invites.ts @@ -1,6 +1,12 @@ -import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk" +import { InviteWorkflow } from "@medusajs/types" +import { InviteWorkflowEvents } from "@medusajs/utils" +import { + WorkflowData, + createWorkflow, + transform, +} from "@medusajs/workflows-sdk" +import { emitEventStep } from "../../common/steps/emit-event" import { deleteInvitesStep } from "../steps" -import { InviteWorkflow, UserWorkflow } from "@medusajs/types" export const deleteInvitesWorkflowId = "delete-invites-workflow" /** @@ -11,6 +17,17 @@ export const deleteInvitesWorkflow = createWorkflow( ( input: WorkflowData ): WorkflowData => { - return deleteInvitesStep(input.ids) + deleteInvitesStep(input.ids) + + const invitesIdEvents = transform({ input }, ({ input }) => { + return input.ids?.map((id) => { + return { id } + }) + }) + + emitEventStep({ + eventName: InviteWorkflowEvents.DELETED, + data: invitesIdEvents, + }) } ) diff --git a/packages/core/core-flows/src/product-category/workflows/update-product-categories.ts b/packages/core/core-flows/src/product-category/workflows/update-product-categories.ts index 525775ec0e..1acbdc693e 100644 --- a/packages/core/core-flows/src/product-category/workflows/update-product-categories.ts +++ b/packages/core/core-flows/src/product-category/workflows/update-product-categories.ts @@ -23,7 +23,11 @@ export const updateProductCategoriesWorkflow = createWorkflow( const productCategoryIdEvents = transform( { updatedCategories }, ({ updatedCategories }) => { - return updatedCategories.map((v) => { + const arr = Array.isArray(updatedCategories) + ? updatedCategories + : [updatedCategories] + + return arr?.map((v) => { return { id: v.id } }) } diff --git a/packages/core/core-flows/src/product/workflows/update-collections.ts b/packages/core/core-flows/src/product/workflows/update-collections.ts index 1ed6820f12..85933067ab 100644 --- a/packages/core/core-flows/src/product/workflows/update-collections.ts +++ b/packages/core/core-flows/src/product/workflows/update-collections.ts @@ -27,7 +27,11 @@ export const updateCollectionsWorkflow = createWorkflow( const collectionIdEvents = transform( { updatedCollections }, ({ updatedCollections }) => { - return updatedCollections.map((v) => { + const arr = Array.isArray(updatedCollections) + ? updatedCollections + : [updatedCollections] + + return arr?.map((v) => { return { id: v.id } }) } diff --git a/packages/core/core-flows/src/product/workflows/update-product-variants.ts b/packages/core/core-flows/src/product/workflows/update-product-variants.ts index 1cebef9e66..6801c4b05b 100644 --- a/packages/core/core-flows/src/product/workflows/update-product-variants.ts +++ b/packages/core/core-flows/src/product/workflows/update-product-variants.ts @@ -139,7 +139,7 @@ export const updateProductVariantsWorkflow = createWorkflow( ) const variantIdEvents = transform({ response }, ({ response }) => { - return response.map((v) => { + return response?.map((v) => { return { id: v.id } }) }) diff --git a/packages/core/core-flows/src/product/workflows/update-products.ts b/packages/core/core-flows/src/product/workflows/update-products.ts index d43cd896e3..8963426770 100644 --- a/packages/core/core-flows/src/product/workflows/update-products.ts +++ b/packages/core/core-flows/src/product/workflows/update-products.ts @@ -16,6 +16,7 @@ import { WorkflowResponse, createHook, createWorkflow, + parallelize, transform, } from "@medusajs/workflows-sdk" import { @@ -282,21 +283,23 @@ export const updateProductsWorkflow = createWorkflow( }) dismissRemoteLinkStep(toDeleteSalesChannelLinks) - createRemoteLinkStep(salesChannelLinks) const productIdEvents = transform( { updatedProductIds }, ({ updatedProductIds }) => { - return updatedProductIds.map((id) => { + return updatedProductIds?.map((id) => { return { id } }) } ) - emitEventStep({ - eventName: ProductWorkflowEvents.UPDATED, - data: productIdEvents, - }) + parallelize( + createRemoteLinkStep(salesChannelLinks), + emitEventStep({ + eventName: ProductWorkflowEvents.UPDATED, + data: productIdEvents, + }) + ) const productsUpdated = createHook("productsUpdated", { products: updatedProducts, diff --git a/packages/core/core-flows/src/region/workflows/create-regions.ts b/packages/core/core-flows/src/region/workflows/create-regions.ts index adfd1227a7..135fbe00f9 100644 --- a/packages/core/core-flows/src/region/workflows/create-regions.ts +++ b/packages/core/core-flows/src/region/workflows/create-regions.ts @@ -1,14 +1,16 @@ -import { CreateRegionDTO, WorkflowTypes } from "@medusajs/types" +import { WorkflowTypes } from "@medusajs/types" +import { RegionWorkflowEvents } from "@medusajs/utils" import { + WorkflowData, + WorkflowResponse, createWorkflow, parallelize, transform, - WorkflowData, - WorkflowResponse, } from "@medusajs/workflows-sdk" +import { emitEventStep } from "../../common/steps/emit-event" +import { createPricePreferencesWorkflow } from "../../pricing" import { createRegionsStep } from "../steps" import { setRegionsPaymentProvidersStep } from "../steps/set-regions-payment-providers" -import { createPricePreferencesWorkflow } from "../../pricing" export const createRegionsWorkflowId = "create-regions" /** @@ -76,12 +78,22 @@ export const createRegionsWorkflow = createWorkflow( } ) + const regionsIdEvents = transform({ regions }, ({ regions }) => { + return regions.map((v) => { + return { id: v.id } + }) + }) + parallelize( setRegionsPaymentProvidersStep({ input: normalizedRegionProviderData, }), createPricePreferencesWorkflow.runAsStep({ input: normalizedRegionPricePreferencesData, + }), + emitEventStep({ + eventName: RegionWorkflowEvents.CREATED, + data: regionsIdEvents, }) ) diff --git a/packages/core/core-flows/src/region/workflows/delete-regions.ts b/packages/core/core-flows/src/region/workflows/delete-regions.ts index 4d074c12bd..7d8d988e86 100644 --- a/packages/core/core-flows/src/region/workflows/delete-regions.ts +++ b/packages/core/core-flows/src/region/workflows/delete-regions.ts @@ -1,4 +1,10 @@ -import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk" +import { RegionWorkflowEvents } from "@medusajs/utils" +import { + WorkflowData, + createWorkflow, + transform, +} from "@medusajs/workflows-sdk" +import { emitEventStep } from "../../common/steps/emit-event" import { deleteRegionsStep } from "../steps" export type DeleteRegionsWorkflowInput = { ids: string[] } @@ -10,6 +16,17 @@ export const deleteRegionsWorkflowId = "delete-regions" export const deleteRegionsWorkflow = createWorkflow( deleteRegionsWorkflowId, (input: WorkflowData): WorkflowData => { - return deleteRegionsStep(input.ids) + deleteRegionsStep(input.ids) + + const regionIdEvents = transform({ input }, ({ input }) => { + return input.ids?.map((id) => { + return { id } + }) + }) + + emitEventStep({ + eventName: RegionWorkflowEvents.DELETED, + data: regionIdEvents, + }) } ) diff --git a/packages/core/core-flows/src/region/workflows/update-regions.ts b/packages/core/core-flows/src/region/workflows/update-regions.ts index 54d5b14464..e0f38b24ee 100644 --- a/packages/core/core-flows/src/region/workflows/update-regions.ts +++ b/packages/core/core-flows/src/region/workflows/update-regions.ts @@ -1,4 +1,5 @@ import { WorkflowTypes } from "@medusajs/types" +import { RegionWorkflowEvents } from "@medusajs/utils" import { createWorkflow, parallelize, @@ -7,9 +8,10 @@ import { WorkflowData, WorkflowResponse, } from "@medusajs/workflows-sdk" +import { emitEventStep } from "../../common/steps/emit-event" +import { updatePricePreferencesWorkflow } from "../../pricing" import { updateRegionsStep } from "../steps" import { setRegionsPaymentProvidersStep } from "../steps/set-regions-payment-providers" -import { updatePricePreferencesWorkflow } from "../../pricing" export const updateRegionsWorkflowId = "update-regions" /** @@ -72,10 +74,22 @@ export const updateRegionsWorkflow = createWorkflow( }) }) - setRegionsPaymentProvidersStep({ - input: upsertProvidersNormalizedInput, + const regionIdEvents = transform({ regions }, ({ regions }) => { + return regions?.map((region) => { + return { id: region.id } + }) }) + parallelize( + setRegionsPaymentProvidersStep({ + input: upsertProvidersNormalizedInput, + }), + emitEventStep({ + eventName: RegionWorkflowEvents.UPDATED, + data: regionIdEvents, + }) + ) + return new WorkflowResponse(regions) } ) diff --git a/packages/core/core-flows/src/sales-channel/workflows/create-sales-channels.ts b/packages/core/core-flows/src/sales-channel/workflows/create-sales-channels.ts index 8f7ad18649..244b6c1e16 100644 --- a/packages/core/core-flows/src/sales-channel/workflows/create-sales-channels.ts +++ b/packages/core/core-flows/src/sales-channel/workflows/create-sales-channels.ts @@ -1,12 +1,17 @@ import { CreateSalesChannelDTO, SalesChannelDTO } from "@medusajs/types" +import { SalesChannelWorkflowEvents } from "@medusajs/utils" import { WorkflowData, WorkflowResponse, createWorkflow, + transform, } from "@medusajs/workflows-sdk" +import { emitEventStep } from "../../common/steps/emit-event" import { createSalesChannelsStep } from "../steps/create-sales-channels" -export type CreateSalesChannelsWorkflowInput = { salesChannelsData: CreateSalesChannelDTO[] } +export type CreateSalesChannelsWorkflowInput = { + salesChannelsData: CreateSalesChannelDTO[] +} export const createSalesChannelsWorkflowId = "create-sales-channels" /** @@ -14,9 +19,27 @@ export const createSalesChannelsWorkflowId = "create-sales-channels" */ export const createSalesChannelsWorkflow = createWorkflow( createSalesChannelsWorkflowId, - (input: WorkflowData): WorkflowResponse => { - return new WorkflowResponse( - createSalesChannelsStep({ data: input.salesChannelsData }) + ( + input: WorkflowData + ): WorkflowResponse => { + const createdSalesChannels = createSalesChannelsStep({ + data: input.salesChannelsData, + }) + + const salesChannelsIdEvents = transform( + { createdSalesChannels }, + ({ createdSalesChannels }) => { + return createdSalesChannels.map((v) => { + return { id: v.id } + }) + } ) + + emitEventStep({ + eventName: SalesChannelWorkflowEvents.CREATED, + data: salesChannelsIdEvents, + }) + + return new WorkflowResponse(createdSalesChannels) } ) diff --git a/packages/core/core-flows/src/sales-channel/workflows/delete-sales-channels.ts b/packages/core/core-flows/src/sales-channel/workflows/delete-sales-channels.ts index 9e57fac323..79f6e2ae3f 100644 --- a/packages/core/core-flows/src/sales-channel/workflows/delete-sales-channels.ts +++ b/packages/core/core-flows/src/sales-channel/workflows/delete-sales-channels.ts @@ -1,8 +1,12 @@ -import { createWorkflow, WorkflowData } from "@medusajs/workflows-sdk" - -import { deleteSalesChannelsStep } from "../steps/delete-sales-channels" +import { Modules, UserWorkflowEvents } from "@medusajs/utils" +import { + createWorkflow, + transform, + WorkflowData, +} from "@medusajs/workflows-sdk" +import { emitEventStep } from "../../common" import { removeRemoteLinkStep } from "../../common/steps/remove-remote-links" -import { Modules } from "@medusajs/utils" +import { deleteSalesChannelsStep } from "../steps/delete-sales-channels" export type DeleteSalesChannelsWorkflowInput = { ids: string[] } @@ -12,11 +16,24 @@ export const deleteSalesChannelsWorkflowId = "delete-sales-channels" */ export const deleteSalesChannelsWorkflow = createWorkflow( deleteSalesChannelsWorkflowId, - (input: WorkflowData): WorkflowData => { + ( + input: WorkflowData + ): WorkflowData => { deleteSalesChannelsStep(input.ids) removeRemoteLinkStep({ [Modules.SALES_CHANNEL]: { sales_channel_id: input.ids }, }) + + const salesChannelsIdEvents = transform({ input }, ({ input }) => { + return input.ids?.map((id) => { + return { id } + }) + }) + + emitEventStep({ + eventName: UserWorkflowEvents.DELETED, + data: salesChannelsIdEvents, + }) } ) diff --git a/packages/core/core-flows/src/sales-channel/workflows/update-sales-channels.ts b/packages/core/core-flows/src/sales-channel/workflows/update-sales-channels.ts index a291a1e08a..280a41a22c 100644 --- a/packages/core/core-flows/src/sales-channel/workflows/update-sales-channels.ts +++ b/packages/core/core-flows/src/sales-channel/workflows/update-sales-channels.ts @@ -3,11 +3,14 @@ import { SalesChannelDTO, UpdateSalesChannelDTO, } from "@medusajs/types" +import { SalesChannelWorkflowEvents } from "@medusajs/utils" import { WorkflowData, WorkflowResponse, createWorkflow, + transform, } from "@medusajs/workflows-sdk" +import { emitEventStep } from "../../common" import { updateSalesChannelsStep } from "../steps/update-sales-channels" export type UpdateSalesChannelsWorkflowInput = { @@ -24,6 +27,25 @@ export const updateSalesChannelsWorkflow = createWorkflow( ( input: WorkflowData ): WorkflowResponse => { - return new WorkflowResponse(updateSalesChannelsStep(input)) + const updatedSalesChannels = updateSalesChannelsStep(input) + + const salesChannelIdEvents = transform( + { updatedSalesChannels }, + ({ updatedSalesChannels }) => { + const arr = Array.isArray(updatedSalesChannels) + ? updatedSalesChannels + : [updatedSalesChannels] + return arr?.map((salesChannel) => { + return { id: salesChannel.id } + }) + } + ) + + emitEventStep({ + eventName: SalesChannelWorkflowEvents.UPDATED, + data: salesChannelIdEvents, + }) + + return new WorkflowResponse(updatedSalesChannels) } ) diff --git a/packages/core/core-flows/src/user/workflows/create-user-account.ts b/packages/core/core-flows/src/user/workflows/create-user-account.ts index 2bda92220b..4f50d31bb4 100644 --- a/packages/core/core-flows/src/user/workflows/create-user-account.ts +++ b/packages/core/core-flows/src/user/workflows/create-user-account.ts @@ -5,8 +5,8 @@ import { createWorkflow, transform, } from "@medusajs/workflows-sdk" -import { createUsersStep } from "../steps" import { setAuthAppMetadataStep } from "../../auth" +import { createUsersWorkflow } from "./create-users" export type CreateUserAccountWorkflowInput = { authIdentityId: string @@ -19,8 +19,15 @@ export const createUserAccountWorkflowId = "create-user-account" */ export const createUserAccountWorkflow = createWorkflow( createUserAccountWorkflowId, - (input: WorkflowData): WorkflowResponse => { - const users = createUsersStep([input.userData]) + ( + input: WorkflowData + ): WorkflowResponse => { + const users = createUsersWorkflow.runAsStep({ + input: { + users: [input.userData], + }, + }) + const user = transform(users, (users: UserDTO[]) => users[0]) setAuthAppMetadataStep({ diff --git a/packages/core/core-flows/src/user/workflows/create-users.ts b/packages/core/core-flows/src/user/workflows/create-users.ts index df19dd8c13..6beb7369cb 100644 --- a/packages/core/core-flows/src/user/workflows/create-users.ts +++ b/packages/core/core-flows/src/user/workflows/create-users.ts @@ -1,11 +1,13 @@ -import { CreateUserDTO, UserDTO } from "@medusajs/types" +import { UserDTO, UserWorkflow } from "@medusajs/types" +import { UserWorkflowEvents } from "@medusajs/utils" import { WorkflowData, WorkflowResponse, createWorkflow, + transform, } from "@medusajs/workflows-sdk" +import { emitEventStep } from "../../common/steps/emit-event" import { createUsersStep } from "../steps" -import { UserWorkflow } from "@medusajs/types" export const createUsersWorkflowId = "create-users-workflow" /** @@ -16,6 +18,19 @@ export const createUsersWorkflow = createWorkflow( ( input: WorkflowData ): WorkflowResponse => { - return new WorkflowResponse(createUsersStep(input.users)) + const createdUsers = createUsersStep(input.users) + + const userIdEvents = transform({ createdUsers }, ({ createdUsers }) => { + return createdUsers.map((v) => { + return { id: v.id } + }) + }) + + emitEventStep({ + eventName: UserWorkflowEvents.CREATED, + data: userIdEvents, + }) + + return new WorkflowResponse(createdUsers) } ) diff --git a/packages/core/core-flows/src/user/workflows/delete-users.ts b/packages/core/core-flows/src/user/workflows/delete-users.ts index bee77f537f..dae5d42151 100644 --- a/packages/core/core-flows/src/user/workflows/delete-users.ts +++ b/packages/core/core-flows/src/user/workflows/delete-users.ts @@ -1,6 +1,12 @@ -import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk" -import { deleteUsersStep } from "../steps" import { UserWorkflow } from "@medusajs/types" +import { UserWorkflowEvents } from "@medusajs/utils" +import { + WorkflowData, + createWorkflow, + transform, +} from "@medusajs/workflows-sdk" +import { emitEventStep } from "../../common" +import { deleteUsersStep } from "../steps" export const deleteUsersWorkflowId = "delete-user" /** @@ -11,6 +17,17 @@ export const deleteUsersWorkflow = createWorkflow( ( input: WorkflowData ): WorkflowData => { - return deleteUsersStep(input.ids) + deleteUsersStep(input.ids) + + const userIdEvents = transform({ input }, ({ input }) => { + return input.ids?.map((id) => { + return { id } + }) + }) + + emitEventStep({ + eventName: UserWorkflowEvents.DELETED, + data: userIdEvents, + }) } ) diff --git a/packages/core/core-flows/src/user/workflows/update-users.ts b/packages/core/core-flows/src/user/workflows/update-users.ts index 693577b10a..68bbb59182 100644 --- a/packages/core/core-flows/src/user/workflows/update-users.ts +++ b/packages/core/core-flows/src/user/workflows/update-users.ts @@ -1,11 +1,13 @@ -import { UserDTO } from "@medusajs/types" +import { UserDTO, UserWorkflow } from "@medusajs/types" +import { UserWorkflowEvents } from "@medusajs/utils" import { WorkflowData, WorkflowResponse, createWorkflow, + transform, } from "@medusajs/workflows-sdk" +import { emitEventStep } from "../../common/steps/emit-event" import { updateUsersStep } from "../steps" -import { UserWorkflow } from "@medusajs/types" export const updateUsersWorkflowId = "update-users-workflow" /** @@ -16,6 +18,21 @@ export const updateUsersWorkflow = createWorkflow( ( input: WorkflowData ): WorkflowResponse => { - return new WorkflowResponse(updateUsersStep(input.updates)) + const updatedUsers = updateUsersStep(input.updates) + + const userIdEvents = transform({ updatedUsers }, ({ updatedUsers }) => { + const arr = Array.isArray(updatedUsers) ? updatedUsers : [updatedUsers] + + return arr?.map((user) => { + return { id: user.id } + }) + }) + + emitEventStep({ + eventName: UserWorkflowEvents.UPDATED, + data: userIdEvents, + }) + + return new WorkflowResponse(updatedUsers) } ) diff --git a/packages/core/utils/src/bundles.ts b/packages/core/utils/src/bundles.ts index da46fd2d6c..650ed39213 100644 --- a/packages/core/utils/src/bundles.ts +++ b/packages/core/utils/src/bundles.ts @@ -1,4 +1,5 @@ export * as ApiKeyUtils from "./api-key" +export * as CoreFlowsUitls from "./core-flows" export * as DALUtils from "./dal" export * as DecoratorUtils from "./decorators" export * as DefaultsUtils from "./defaults" diff --git a/packages/core/utils/src/core-flows/events.ts b/packages/core/utils/src/core-flows/events.ts new file mode 100644 index 0000000000..3c1b16e4c2 --- /dev/null +++ b/packages/core/utils/src/core-flows/events.ts @@ -0,0 +1,53 @@ +export const CustomerWorkflowEvents = { + CREATED: "customer.created", + UPDATED: "customer.updated", + DELETED: "customer.deleted", +} + +export const OrderWorkflowEvents = { + PLACED: "order.placed", + CANCELED: "order.canceled", + COMPLETED: "order.completed", +} + +export const SalesChannelWorkflowEvents = { + CREATED: "sales-channel.created", + UPDATED: "sales-channel.updated", + DELETED: "sales-channel.deleted", +} + +export const ProductCategoryWorkflowEvents = { + CREATED: "product-category.created", + UPDATED: "product-category.updated", + DELETED: "product-category.deleted", +} + +export const ProductCollectionWorkflowEvents = { + CREATED: "product-collection.created", + UPDATED: "product-collection.updated", + DELETED: "product-collection.deleted", +} + +export const ProductVariantWorkflowEvents = { + UPDATED: "product-variant.updated", + CREATED: "product-variant.created", + DELETED: "product-variant.deleted", +} + +export const ProductWorkflowEvents = { + UPDATED: "product.updated", + CREATED: "product.created", + DELETED: "product.deleted", +} + +export const InviteWorkflowEvents = { + ACCEPTED: "invite.accepted", + CREATED: "invite.created", + DELETED: "invite.deleted", +} + +export const RegionWorkflowEvents = { + UPDATED: "region.updated", + CREATED: "region.created", + DELETED: "region.deleted", +} diff --git a/packages/core/utils/src/core-flows/index.ts b/packages/core/utils/src/core-flows/index.ts new file mode 100644 index 0000000000..92c2484024 --- /dev/null +++ b/packages/core/utils/src/core-flows/index.ts @@ -0,0 +1 @@ +export * from "./events" diff --git a/packages/core/utils/src/index.ts b/packages/core/utils/src/index.ts index 2e330a8b63..071f297dd1 100644 --- a/packages/core/utils/src/index.ts +++ b/packages/core/utils/src/index.ts @@ -2,6 +2,7 @@ export * from "./api-key" export * from "./auth" export * from "./bundles" export * from "./common" +export * from "./core-flows" export * from "./dal" export * from "./decorators" export * from "./defaults" @@ -18,6 +19,7 @@ export * from "./notification" export * from "./orchestration" export * from "./order" export * from "./payment" +export * from "./pg" export * from "./pricing" export * from "./product" export * from "./promotion" @@ -26,6 +28,5 @@ export * from "./shipping" export * from "./totals" export * from "./totals/big-number" export * from "./user" -export * from "./pg" export const MedusaModuleType = Symbol.for("MedusaModule") diff --git a/packages/core/utils/src/order/events.ts b/packages/core/utils/src/order/events.ts deleted file mode 100644 index 95f2d56246..0000000000 --- a/packages/core/utils/src/order/events.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const OrderWorkflowEvents = { - PLACED: "order.placed", - CANCELED: "order.canceled", - COMPLETED: "order.completed", -} diff --git a/packages/core/utils/src/order/index.ts b/packages/core/utils/src/order/index.ts index a2fff682e9..d434db48de 100644 --- a/packages/core/utils/src/order/index.ts +++ b/packages/core/utils/src/order/index.ts @@ -1,4 +1,3 @@ -export * from "./events" export * from "./order-change" export * from "./order-change-action" export * from "./status" diff --git a/packages/core/utils/src/product/events.ts b/packages/core/utils/src/product/events.ts index 77a7475513..464972bc09 100644 --- a/packages/core/utils/src/product/events.ts +++ b/packages/core/utils/src/product/events.ts @@ -21,27 +21,3 @@ export const ProductEvents = buildEventNamesFromEntityName( eventBaseNames, Modules.PRODUCT ) - -export const ProductCategoryWorkflowEvents = { - CREATED: "product-category.created", - UPDATED: "product-category.updated", - DELETED: "product-category.deleted", -} - -export const ProductCollectionWorkflowEvents = { - CREATED: "product-collection.created", - UPDATED: "product-collection.updated", - DELETED: "product-collection.deleted", -} - -export const ProductVariantWorkflowEvents = { - UPDATED: "product-variant.updated", - CREATED: "product-variant.created", - DELETED: "product-variant.deleted", -} - -export const ProductWorkflowEvents = { - UPDATED: "product.updated", - CREATED: "product.created", - DELETED: "product.deleted", -} diff --git a/packages/core/utils/src/user/events.ts b/packages/core/utils/src/user/events.ts index 49a70d339a..66e9cfcc5e 100644 --- a/packages/core/utils/src/user/events.ts +++ b/packages/core/utils/src/user/events.ts @@ -7,3 +7,9 @@ export const UserEvents = { ...buildEventNamesFromEntityName(eventBaseNames, Modules.USER), INVITE_TOKEN_GENERATED: `${Modules.USER}.user.invite.token_generated`, } + +export const UserWorkflowEvents = { + CREATED: "user.created", + UPDATED: "user.updated", + DELETED: "user.deleted", +}