From 9a7daca21e5305f35483888670ff4d4d45637709 Mon Sep 17 00:00:00 2001 From: "Carlos R. L. Rodrigues" <37986729+carlos-r-l-rodrigues@users.noreply.github.com> Date: Wed, 11 Sep 2024 12:32:01 -0300 Subject: [PATCH] feat(core-flows): product type, option and tag events (#9105) --- .../workflows/create-product-options.ts | 17 ++++++++++++++ .../product/workflows/create-product-tags.ts | 14 ++++++++++++ .../product/workflows/create-product-types.ts | 14 ++++++++++++ .../workflows/delete-product-options.ts | 14 ++++++++++++ .../product/workflows/delete-product-tags.ts | 14 ++++++++++++ .../product/workflows/delete-product-types.ts | 14 ++++++++++++ .../workflows/update-product-options.ts | 21 ++++++++++++++++++ .../product/workflows/update-product-tags.ts | 22 +++++++++++++++++++ .../product/workflows/update-product-types.ts | 21 ++++++++++++++++++ packages/core/utils/src/core-flows/events.ts | 18 +++++++++++++++ 10 files changed, 169 insertions(+) diff --git a/packages/core/core-flows/src/product/workflows/create-product-options.ts b/packages/core/core-flows/src/product/workflows/create-product-options.ts index 26896e2550..4c6567c2ce 100644 --- a/packages/core/core-flows/src/product/workflows/create-product-options.ts +++ b/packages/core/core-flows/src/product/workflows/create-product-options.ts @@ -1,10 +1,13 @@ import { AdditionalData, ProductTypes } from "@medusajs/types" +import { ProductOptionWorkflowEvents } from "@medusajs/utils" import { WorkflowData, WorkflowResponse, createHook, createWorkflow, + transform, } from "@medusajs/workflows-sdk" +import { emitEventStep } from "../../common/steps/emit-event" import { createProductOptionsStep } from "../steps" export type CreateProductOptionsWorkflowInput = { @@ -24,6 +27,20 @@ export const createProductOptionsWorkflow = createWorkflow( additional_data: input.additional_data, }) + const optionIdEvents = transform( + { productOptions }, + ({ productOptions }) => { + return productOptions.map((v) => { + return { id: v.id } + }) + } + ) + + emitEventStep({ + eventName: ProductOptionWorkflowEvents.CREATED, + data: optionIdEvents, + }) + return new WorkflowResponse(productOptions, { hooks: [productOptionsCreated], }) diff --git a/packages/core/core-flows/src/product/workflows/create-product-tags.ts b/packages/core/core-flows/src/product/workflows/create-product-tags.ts index 092b584007..3e1f360c79 100644 --- a/packages/core/core-flows/src/product/workflows/create-product-tags.ts +++ b/packages/core/core-flows/src/product/workflows/create-product-tags.ts @@ -1,10 +1,13 @@ import { AdditionalData, ProductTypes } from "@medusajs/types" +import { ProductTagWorkflowEvents } from "@medusajs/utils" import { WorkflowData, WorkflowResponse, createHook, createWorkflow, + transform, } from "@medusajs/workflows-sdk" +import { emitEventStep } from "../../common/steps/emit-event" import { createProductTagsStep } from "../steps" export type CreateProductTagsWorkflowInput = { @@ -24,6 +27,17 @@ export const createProductTagsWorkflow = createWorkflow( additional_data: input.additional_data, }) + const tagIdEvents = transform({ productTags }, ({ productTags }) => { + return productTags.map((v) => { + return { id: v.id } + }) + }) + + emitEventStep({ + eventName: ProductTagWorkflowEvents.CREATED, + data: tagIdEvents, + }) + return new WorkflowResponse(productTags, { hooks: [productTagsCreated], }) diff --git a/packages/core/core-flows/src/product/workflows/create-product-types.ts b/packages/core/core-flows/src/product/workflows/create-product-types.ts index 8c9014df12..71d403101c 100644 --- a/packages/core/core-flows/src/product/workflows/create-product-types.ts +++ b/packages/core/core-flows/src/product/workflows/create-product-types.ts @@ -1,10 +1,13 @@ import { AdditionalData, ProductTypes } from "@medusajs/types" +import { ProductTypeWorkflowEvents } from "@medusajs/utils" import { WorkflowData, WorkflowResponse, createHook, createWorkflow, + transform, } from "@medusajs/workflows-sdk" +import { emitEventStep } from "../../common/steps/emit-event" import { createProductTypesStep } from "../steps" export type CreateProductTypesWorkflowInput = { @@ -24,6 +27,17 @@ export const createProductTypesWorkflow = createWorkflow( additional_data: input.additional_data, }) + const typeIdEvents = transform({ productTypes }, ({ productTypes }) => { + return productTypes.map((v) => { + return { id: v.id } + }) + }) + + emitEventStep({ + eventName: ProductTypeWorkflowEvents.CREATED, + data: typeIdEvents, + }) + return new WorkflowResponse(productTypes, { hooks: [productTypesCreated], }) diff --git a/packages/core/core-flows/src/product/workflows/delete-product-options.ts b/packages/core/core-flows/src/product/workflows/delete-product-options.ts index 20d3119643..4a7df15766 100644 --- a/packages/core/core-flows/src/product/workflows/delete-product-options.ts +++ b/packages/core/core-flows/src/product/workflows/delete-product-options.ts @@ -1,9 +1,12 @@ +import { ProductOptionWorkflowEvents } from "@medusajs/utils" import { WorkflowData, WorkflowResponse, createHook, createWorkflow, + transform, } from "@medusajs/workflows-sdk" +import { emitEventStep } from "../../common/steps/emit-event" import { deleteProductOptionsStep } from "../steps" export type DeleteProductOptionsWorkflowInput = { ids: string[] } @@ -20,6 +23,17 @@ export const deleteProductOptionsWorkflow = createWorkflow( ids: input.ids, }) + const optionIdEvents = transform({ input }, ({ input }) => { + return input.ids?.map((id) => { + return { id } + }) + }) + + emitEventStep({ + eventName: ProductOptionWorkflowEvents.DELETED, + data: optionIdEvents, + }) + return new WorkflowResponse(deletedProductOptions, { hooks: [productOptionsDeleted], }) diff --git a/packages/core/core-flows/src/product/workflows/delete-product-tags.ts b/packages/core/core-flows/src/product/workflows/delete-product-tags.ts index c507a85bfd..dd7ea76609 100644 --- a/packages/core/core-flows/src/product/workflows/delete-product-tags.ts +++ b/packages/core/core-flows/src/product/workflows/delete-product-tags.ts @@ -1,9 +1,12 @@ +import { ProductTagWorkflowEvents } from "@medusajs/utils" import { WorkflowData, WorkflowResponse, createHook, createWorkflow, + transform, } from "@medusajs/workflows-sdk" +import { emitEventStep } from "../../common/steps/emit-event" import { deleteProductTagsStep } from "../steps" export type DeleteProductTagsWorkflowInput = { ids: string[] } @@ -20,6 +23,17 @@ export const deleteProductTagsWorkflow = createWorkflow( ids: input.ids, }) + const tagIdEvents = transform({ input }, ({ input }) => { + return input.ids?.map((id) => { + return { id } + }) + }) + + emitEventStep({ + eventName: ProductTagWorkflowEvents.DELETED, + data: tagIdEvents, + }) + return new WorkflowResponse(deletedProductTags, { hooks: [productTagsDeleted], }) diff --git a/packages/core/core-flows/src/product/workflows/delete-product-types.ts b/packages/core/core-flows/src/product/workflows/delete-product-types.ts index ff13ee42a0..aee7d854f5 100644 --- a/packages/core/core-flows/src/product/workflows/delete-product-types.ts +++ b/packages/core/core-flows/src/product/workflows/delete-product-types.ts @@ -1,9 +1,12 @@ +import { ProductTypeWorkflowEvents } from "@medusajs/utils" import { WorkflowData, WorkflowResponse, createHook, createWorkflow, + transform, } from "@medusajs/workflows-sdk" +import { emitEventStep } from "../../common/steps/emit-event" import { deleteProductTypesStep } from "../steps" export type DeleteProductTypesWorkflowInput = { ids: string[] } @@ -20,6 +23,17 @@ export const deleteProductTypesWorkflow = createWorkflow( ids: input.ids, }) + const typeIdEvents = transform({ input }, ({ input }) => { + return input.ids?.map((id) => { + return { id } + }) + }) + + emitEventStep({ + eventName: ProductTypeWorkflowEvents.DELETED, + data: typeIdEvents, + }) + return new WorkflowResponse(deletedProductTypes, { hooks: [productTypesDeleted], }) diff --git a/packages/core/core-flows/src/product/workflows/update-product-options.ts b/packages/core/core-flows/src/product/workflows/update-product-options.ts index f2d86be331..ee52dc9ab2 100644 --- a/packages/core/core-flows/src/product/workflows/update-product-options.ts +++ b/packages/core/core-flows/src/product/workflows/update-product-options.ts @@ -1,10 +1,13 @@ import { AdditionalData, ProductTypes } from "@medusajs/types" +import { ProductOptionWorkflowEvents } from "@medusajs/utils" import { WorkflowData, WorkflowResponse, createHook, createWorkflow, + transform, } from "@medusajs/workflows-sdk" +import { emitEventStep } from "../../common/steps/emit-event" import { updateProductOptionsStep } from "../steps" export type UpdateProductOptionsWorkflowInput = { @@ -25,6 +28,24 @@ export const updateProductOptionsWorkflow = createWorkflow( additional_data: input.additional_data, }) + const optionIdEvents = transform( + { updatedProductOptions }, + ({ updatedProductOptions }) => { + const arr = Array.isArray(updatedProductOptions) + ? updatedProductOptions + : [updatedProductOptions] + + return arr?.map((v) => { + return { id: v.id } + }) + } + ) + + emitEventStep({ + eventName: ProductOptionWorkflowEvents.UPDATED, + data: optionIdEvents, + }) + return new WorkflowResponse(updatedProductOptions, { hooks: [productOptionsUpdated], }) diff --git a/packages/core/core-flows/src/product/workflows/update-product-tags.ts b/packages/core/core-flows/src/product/workflows/update-product-tags.ts index 4dc675f77b..560e408f20 100644 --- a/packages/core/core-flows/src/product/workflows/update-product-tags.ts +++ b/packages/core/core-flows/src/product/workflows/update-product-tags.ts @@ -1,10 +1,13 @@ import { AdditionalData, ProductTypes } from "@medusajs/types" +import { ProductTagWorkflowEvents } from "@medusajs/utils" import { WorkflowData, WorkflowResponse, createHook, createWorkflow, + transform, } from "@medusajs/workflows-sdk" +import { emitEventStep } from "../../common/steps/emit-event" import { updateProductTagsStep } from "../steps" export type UpdateProductTagsWorkflowInput = { @@ -24,6 +27,25 @@ export const updateProductTagsWorkflow = createWorkflow( product_tags: updatedProductTags, additional_data: input.additional_data, }) + + const tagIdEvents = transform( + { updatedProductTags }, + ({ updatedProductTags }) => { + const arr = Array.isArray(updatedProductTags) + ? updatedProductTags + : [updatedProductTags] + + return arr?.map((v) => { + return { id: v.id } + }) + } + ) + + emitEventStep({ + eventName: ProductTagWorkflowEvents.UPDATED, + data: tagIdEvents, + }) + return new WorkflowResponse(updatedProductTags, { hooks: [productTagsUpdated], }) diff --git a/packages/core/core-flows/src/product/workflows/update-product-types.ts b/packages/core/core-flows/src/product/workflows/update-product-types.ts index db37082a33..56ecbd0746 100644 --- a/packages/core/core-flows/src/product/workflows/update-product-types.ts +++ b/packages/core/core-flows/src/product/workflows/update-product-types.ts @@ -1,10 +1,13 @@ import { AdditionalData, ProductTypes } from "@medusajs/types" +import { ProductTypeWorkflowEvents } from "@medusajs/utils" import { WorkflowData, WorkflowResponse, createHook, createWorkflow, + transform, } from "@medusajs/workflows-sdk" +import { emitEventStep } from "../../common/steps/emit-event" import { updateProductTypesStep } from "../steps" type UpdateProductTypesWorkflowInput = { @@ -25,6 +28,24 @@ export const updateProductTypesWorkflow = createWorkflow( additional_data: input.additional_data, }) + const typeIdEvents = transform( + { updatedProductTypes }, + ({ updatedProductTypes }) => { + const arr = Array.isArray(updatedProductTypes) + ? updatedProductTypes + : [updatedProductTypes] + + return arr?.map((v) => { + return { id: v.id } + }) + } + ) + + emitEventStep({ + eventName: ProductTypeWorkflowEvents.UPDATED, + data: typeIdEvents, + }) + return new WorkflowResponse(updatedProductTypes, { hooks: [productTypesUpdated], }) diff --git a/packages/core/utils/src/core-flows/events.ts b/packages/core/utils/src/core-flows/events.ts index 7cd403d5a8..ea8c5a9bb5 100644 --- a/packages/core/utils/src/core-flows/events.ts +++ b/packages/core/utils/src/core-flows/events.ts @@ -50,6 +50,24 @@ export const ProductWorkflowEvents = { DELETED: "product.deleted", } +export const ProductTypeWorkflowEvents = { + UPDATED: "product-type.updated", + CREATED: "product-type.created", + DELETED: "product-type.deleted", +} + +export const ProductTagWorkflowEvents = { + UPDATED: "product-tag.updated", + CREATED: "product-tag.created", + DELETED: "product-tag.deleted", +} + +export const ProductOptionWorkflowEvents = { + UPDATED: "product-tag.updated", + CREATED: "product-tag.created", + DELETED: "product-tag.deleted", +} + export const InviteWorkflowEvents = { ACCEPTED: "invite.accepted", CREATED: "invite.created",