Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add hooks to product module's workflows #8389

Merged
merged 9 commits into from
Aug 1, 2024
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { batchLinkProductsToCollectionStep } from "../steps/batch-link-products-

export const batchLinkProductsToCollectionWorkflowId =
"batch-link-products-to-collection"

export const batchLinkProductsToCollectionWorkflow = createWorkflow(
batchLinkProductsToCollectionWorkflowId,
(input: WorkflowData<LinkWorkflowInput>): WorkflowData<void> => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,28 @@ import { ProductTypes } from "@medusajs/types"
import {
WorkflowData,
WorkflowResponse,
createHook,
createWorkflow,
} from "@medusajs/workflows-sdk"
import { createCollectionsStep } from "../steps"

type WorkflowInput = { collections: ProductTypes.CreateProductCollectionDTO[] }
type WorkflowInput = {
collections: ProductTypes.CreateProductCollectionDTO[]
additional_data?: Record<string, unknown>
}

export const createCollectionsWorkflowId = "create-collections"
export const createCollectionsWorkflow = createWorkflow(
createCollectionsWorkflowId,
(
input: WorkflowData<WorkflowInput>
): WorkflowResponse<ProductTypes.ProductCollectionDTO[]> => {
return new WorkflowResponse(createCollectionsStep(input.collections))
(input: WorkflowData<WorkflowInput>) => {
const collections = createCollectionsStep(input.collections)
const collectionsCreated = createHook("collectionsCreated", {
collections,
additional_data: input.additional_data,
})

return new WorkflowResponse(collections, {
hooks: [collectionsCreated],
})
}
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,29 @@ import { ProductTypes } from "@medusajs/types"
import {
WorkflowData,
WorkflowResponse,
createHook,
createWorkflow,
} from "@medusajs/workflows-sdk"
import { createProductOptionsStep } from "../steps"

type WorkflowInput = { product_options: ProductTypes.CreateProductOptionDTO[] }
type WorkflowInput = {
product_options: ProductTypes.CreateProductOptionDTO[]
additional_data?: Record<string, unknown>
}

export const createProductOptionsWorkflowId = "create-product-options"

export const createProductOptionsWorkflow = createWorkflow(
createProductOptionsWorkflowId,
(
input: WorkflowData<WorkflowInput>
): WorkflowResponse<ProductTypes.ProductOptionDTO[]> => {
return new WorkflowResponse(createProductOptionsStep(input.product_options))
(input: WorkflowData<WorkflowInput>) => {
const productOptions = createProductOptionsStep(input.product_options)
const productOptionsCreated = createHook("productOptionsCreated", {
product_options: productOptions,
additional_data: input.additional_data,
})

return new WorkflowResponse(productOptions, {
hooks: [productOptionsCreated],
})
}
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,29 @@ import { ProductTypes } from "@medusajs/types"
import {
WorkflowData,
WorkflowResponse,
createHook,
createWorkflow,
} from "@medusajs/workflows-sdk"
import { createProductTagsStep } from "../steps"

type WorkflowInput = { product_tags: ProductTypes.CreateProductTagDTO[] }
type WorkflowInput = {
product_tags: ProductTypes.CreateProductTagDTO[]
additional_data?: Record<string, unknown>
}

export const createProductTagsWorkflowId = "create-product-tags"

export const createProductTagsWorkflow = createWorkflow(
createProductTagsWorkflowId,
(
input: WorkflowData<WorkflowInput>
): WorkflowResponse<ProductTypes.ProductTagDTO[]> => {
return new WorkflowResponse(createProductTagsStep(input.product_tags))
(input: WorkflowData<WorkflowInput>) => {
const productTags = createProductTagsStep(input.product_tags)
const productTagsCreated = createHook("productTagsCreated", {
product_tags: productTags,
additional_data: input.additional_data,
})

return new WorkflowResponse(productTags, {
hooks: [productTagsCreated],
})
}
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,29 @@ import { ProductTypes } from "@medusajs/types"
import {
WorkflowData,
WorkflowResponse,
createHook,
createWorkflow,
} from "@medusajs/workflows-sdk"
import { createProductTypesStep } from "../steps"

type WorkflowInput = { product_types: ProductTypes.CreateProductTypeDTO[] }
type WorkflowInput = {
product_types: ProductTypes.CreateProductTypeDTO[]
additional_data?: Record<string, unknown>
}

export const createProductTypesWorkflowId = "create-product-types"

export const createProductTypesWorkflow = createWorkflow(
createProductTypesWorkflowId,
(
input: WorkflowData<WorkflowInput>
): WorkflowResponse<ProductTypes.ProductTypeDTO[]> => {
return new WorkflowResponse(createProductTypesStep(input.product_types))
(input: WorkflowData<WorkflowInput>) => {
const productTypes = createProductTypesStep(input.product_types)
const productTypesCreated = createHook("productTypesCreated", {
product_types: productTypes,
additional_data: input.additional_data,
})

return new WorkflowResponse(productTypes, {
hooks: [productTypesCreated],
})
}
)
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { InventoryTypes, PricingTypes, ProductTypes } from "@medusajs/types"
import {
WorkflowData,
WorkflowResponse,
createHook,
createWorkflow,
transform,
} from "@medusajs/workflows-sdk"
Expand All @@ -24,6 +25,7 @@ type WorkflowInput = {
required_quantity?: number
}[]
})[]
additional_data?: Record<string, unknown>
}

const buildLink = (
Expand Down Expand Up @@ -118,11 +120,10 @@ const buildVariantItemCreateMap = (data: {
}

export const createProductVariantsWorkflowId = "create-product-variants"

export const createProductVariantsWorkflow = createWorkflow(
createProductVariantsWorkflowId,
(
input: WorkflowData<WorkflowInput>
): WorkflowResponse<ProductTypes.ProductVariantDTO[]> => {
(input: WorkflowData<WorkflowInput>) => {
// Passing prices to the product module will fail, we want to keep them for after the variant is created.
const variantsWithoutPrices = transform({ input }, (data) =>
data.input.product_variants.map((v) => ({
Expand Down Expand Up @@ -224,6 +225,13 @@ export const createProductVariantsWorkflow = createWorkflow(
}
)

return new WorkflowResponse(response)
const productVariantsCreated = createHook("productVariantsCreated", {
product_variants: response,
additional_data: input.additional_data,
})

return new WorkflowResponse(response, {
hooks: [productVariantsCreated],
})
}
)
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { isPresent } from "@medusajs/utils"
import {
WorkflowData,
WorkflowResponse,
createHook,
createWorkflow,
transform,
} from "@medusajs/workflows-sdk"
Expand All @@ -16,14 +17,14 @@ import { createProductVariantsWorkflow } from "./create-product-variants"

type WorkflowInput = {
products: CreateProductWorkflowInputDTO[]
additional_data?: Record<string, unknown>
}

export const createProductsWorkflowId = "create-products"

export const createProductsWorkflow = createWorkflow(
createProductsWorkflowId,
(
input: WorkflowData<WorkflowInput>
): WorkflowResponse<ProductTypes.ProductDTO[]> => {
(input: WorkflowData<WorkflowInput>) => {
// Passing prices to the product module will fail, we want to keep them for after the product is created.
const productWithoutExternalRelations = transform({ input }, (data) =>
data.input.products.map((p) => ({
Expand Down Expand Up @@ -98,6 +99,13 @@ export const createProductsWorkflow = createWorkflow(
}
)

return new WorkflowResponse(response)
const productsCreated = createHook("productsCreated", {
products: response,
additional_data: input.additional_data,
})

return new WorkflowResponse(response, {
hooks: [productsCreated],
})
}
)
Original file line number Diff line number Diff line change
@@ -1,12 +1,25 @@
import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk"
import {
WorkflowData,
WorkflowResponse,
createHook,
createWorkflow,
} from "@medusajs/workflows-sdk"
import { deleteCollectionsStep } from "../steps"

type WorkflowInput = { ids: string[] }

export const deleteCollectionsWorkflowId = "delete-collections"

export const deleteCollectionsWorkflow = createWorkflow(
deleteCollectionsWorkflowId,
(input: WorkflowData<WorkflowInput>): WorkflowData<void> => {
return deleteCollectionsStep(input.ids)
(input: WorkflowData<WorkflowInput>) => {
const deletedCollections = deleteCollectionsStep(input.ids)
const collectionsDeleted = createHook("collectionsDeleted", {
ids: input.ids,
})

return new WorkflowResponse(deletedCollections, {
hooks: [collectionsDeleted],
})
}
)
Original file line number Diff line number Diff line change
@@ -1,12 +1,24 @@
import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk"
import {
WorkflowData,
WorkflowResponse,
createHook,
createWorkflow,
} from "@medusajs/workflows-sdk"
import { deleteProductOptionsStep } from "../steps"

type WorkflowInput = { ids: string[] }

export const deleteProductOptionsWorkflowId = "delete-product-options"
export const deleteProductOptionsWorkflow = createWorkflow(
deleteProductOptionsWorkflowId,
(input: WorkflowData<WorkflowInput>): WorkflowData<void> => {
return deleteProductOptionsStep(input.ids)
(input: WorkflowData<WorkflowInput>) => {
const deletedProductOptions = deleteProductOptionsStep(input.ids)
const productOptionsDeleted = createHook("productOptionsDeleted", {
ids: input.ids,
})

return new WorkflowResponse(deletedProductOptions, {
hooks: [productOptionsDeleted],
})
}
)
Original file line number Diff line number Diff line change
@@ -1,12 +1,24 @@
import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk"
import {
WorkflowData,
WorkflowResponse,
createHook,
createWorkflow,
} from "@medusajs/workflows-sdk"
import { deleteProductTagsStep } from "../steps"

type WorkflowInput = { ids: string[] }

export const deleteProductTagsWorkflowId = "delete-product-tags"
export const deleteProductTagsWorkflow = createWorkflow(
deleteProductTagsWorkflowId,
(input: WorkflowData<WorkflowInput>): WorkflowData<void> => {
return deleteProductTagsStep(input.ids)
(input: WorkflowData<WorkflowInput>) => {
const deletedProductTags = deleteProductTagsStep(input.ids)
const productTagsDeleted = createHook("productTagsDeleted", {
ids: input.ids,
})

return new WorkflowResponse(deletedProductTags, {
hooks: [productTagsDeleted],
})
}
)
Original file line number Diff line number Diff line change
@@ -1,12 +1,24 @@
import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk"
import {
WorkflowData,
WorkflowResponse,
createHook,
createWorkflow,
} from "@medusajs/workflows-sdk"
import { deleteProductTypesStep } from "../steps"

type WorkflowInput = { ids: string[] }

export const deleteProductTypesWorkflowId = "delete-product-types"
export const deleteProductTypesWorkflow = createWorkflow(
deleteProductTypesWorkflowId,
(input: WorkflowData<WorkflowInput>): WorkflowData<void> => {
return deleteProductTypesStep(input.ids)
(input: WorkflowData<WorkflowInput>) => {
const deletedProductTypes = deleteProductTypesStep(input.ids)
const productTypesDeleted = createHook("productTypesDeleted", {
ids: input.ids,
})

return new WorkflowResponse(deletedProductTypes, {
hooks: [productTypesDeleted],
})
}
)
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
import { createWorkflow, WorkflowData } from "@medusajs/workflows-sdk"
import {
createHook,
createWorkflow,
WorkflowData,
WorkflowResponse,
} from "@medusajs/workflows-sdk"
import { deleteProductVariantsStep } from "../steps"
import { removeRemoteLinkStep } from "../../common"
import { Modules } from "@medusajs/utils"
Expand All @@ -8,11 +13,18 @@ type WorkflowInput = { ids: string[] }
export const deleteProductVariantsWorkflowId = "delete-product-variants"
export const deleteProductVariantsWorkflow = createWorkflow(
deleteProductVariantsWorkflowId,
(input: WorkflowData<WorkflowInput>): WorkflowData<void> => {
(input: WorkflowData<WorkflowInput>) => {
removeRemoteLinkStep({
[Modules.PRODUCT]: { variant_id: input.ids },
}).config({ name: "remove-variant-link-step" })

return deleteProductVariantsStep(input.ids)
const deletedProductVariants = deleteProductVariantsStep(input.ids)
const productVariantsDeleted = createHook("productVariantsDeleted", {
ids: input.ids,
})

return new WorkflowResponse(deletedProductVariants, {
hooks: [productVariantsDeleted],
})
}
)
Loading
Loading