chore(core-flows): product events (#8769)
This commit is contained in:
1 parent
3b4eea08ef
commit
571f0c7629
17 files changed
+360
-32
No files matched your search
@@ -169,6 +169,12 @@ medusaIntegrationTestRunner({
|
|||||||
],
|
],
|
||||||
currency_code: "usd",
|
currency_code: "usd",
|
||||||
customer_id: customer.id,
|
customer_id: customer.id,
|
||||||
|
transactions: [
|
||||||
|
{
|
||||||
|
amount: 61,
|
||||||
|
currency_code: "usd",
|
||||||
|
},
|
||||||
|
],
|
||||||
})
|
})
|
||||||
|
|
||||||
order2 = await orderModule.createOrders({
|
order2 = await orderModule.createOrders({
|
||||||
@@ -1006,6 +1012,104 @@ medusaIntegrationTestRunner({
|
|||||||
expect(orderResult.fulfillment_status).toEqual("shipped")
|
expect(orderResult.fulfillment_status).toEqual("shipped")
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe("with only inbound items", () => {
|
||||||
|
beforeEach(async () => {
|
||||||
|
await api.post(
|
||||||
|
`/admin/orders/${order.id}/fulfillments`,
|
||||||
|
{
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
id: item.id,
|
||||||
|
quantity: 2,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
|
||||||
|
baseClaim = (
|
||||||
|
await api.post(
|
||||||
|
"/admin/claims",
|
||||||
|
{
|
||||||
|
order_id: order.id,
|
||||||
|
type: ClaimType.REPLACE,
|
||||||
|
description: "Base claim",
|
||||||
|
},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
).data.claim
|
||||||
|
|
||||||
|
claimId = baseClaim.id
|
||||||
|
item = order.items[0]
|
||||||
|
|
||||||
|
let result = await api.post(
|
||||||
|
`/admin/claims/${claimId}/inbound/items`,
|
||||||
|
{
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
id: item.id,
|
||||||
|
reason_id: returnReason.id,
|
||||||
|
quantity: 1,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
|
||||||
|
await api.post(
|
||||||
|
`/admin/claims/${claimId}/inbound/shipping-method`,
|
||||||
|
{ shipping_option_id: returnShippingOption.id },
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
|
||||||
|
// Claim Items
|
||||||
|
await api.post(
|
||||||
|
`/admin/claims/${claimId}/claim-items`,
|
||||||
|
{
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
id: item.id,
|
||||||
|
reason: ClaimReason.PRODUCTION_FAILURE,
|
||||||
|
quantity: 1,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
|
||||||
|
await api.post(`/admin/claims/${claimId}/request`, {}, adminHeaders)
|
||||||
|
|
||||||
|
result = (
|
||||||
|
await api.get(
|
||||||
|
`/admin/claims?fields=*claim_items,*additional_items`,
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
).data.claims
|
||||||
|
|
||||||
|
expect(result).toHaveLength(1)
|
||||||
|
expect(result[0].additional_items).toHaveLength(0)
|
||||||
|
expect(result[0].claim_items).toHaveLength(1)
|
||||||
|
expect(result[0].canceled_at).toBeNull()
|
||||||
|
})
|
||||||
|
|
||||||
|
it.only("test inbound only", async () => {
|
||||||
|
const orderCheck = (
|
||||||
|
await api.get(`/admin/orders/${order.id}`, adminHeaders)
|
||||||
|
).data.order
|
||||||
|
|
||||||
|
expect(orderCheck.summary).toEqual(
|
||||||
|
expect.objectContaining({
|
||||||
|
pending_difference: -10,
|
||||||
|
current_order_total: 51,
|
||||||
|
original_order_total: 61,
|
||||||
|
temporary_difference: 15,
|
||||||
|
})
|
||||||
|
)
|
||||||
|
|
||||||
|
expect(true).toBe(true)
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe("GET /admin/claims/:id", () => {
|
describe("GET /admin/claims/:id", () => {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { OrderDTO } from "@medusajs/types"
|
import { OrderDTO } from "@medusajs/types"
|
||||||
import { Modules, OrderEvents, OrderStatus } from "@medusajs/utils"
|
import { Modules, OrderStatus, OrderWorkflowEvents } from "@medusajs/utils"
|
||||||
import {
|
import {
|
||||||
WorkflowData,
|
WorkflowData,
|
||||||
WorkflowResponse,
|
WorkflowResponse,
|
||||||
@@ -171,7 +171,10 @@ export const completeCartWorkflow = createWorkflow(
|
|||||||
},
|
},
|
||||||
])
|
])
|
||||||
|
|
||||||
emitEventStep({ eventName: OrderEvents.PLACED, data: { id: order.id } })
|
emitEventStep({
|
||||||
|
eventName: OrderWorkflowEvents.PLACED,
|
||||||
|
data: { id: order.id },
|
||||||
|
})
|
||||||
|
|
||||||
return new WorkflowResponse(order)
|
return new WorkflowResponse(order)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ type Input = {
|
|||||||
*/
|
*/
|
||||||
options?: Record<string, any>
|
options?: Record<string, any>
|
||||||
/**
|
/**
|
||||||
* Metadata that the subscriber receives in the `metadata` property
|
* Metadata that the subscriber receives in the `metadata` property
|
||||||
* of its first parameter.
|
* of its first parameter.
|
||||||
*/
|
*/
|
||||||
metadata?: Record<string, any>
|
metadata?: Record<string, any>
|
||||||
@@ -33,15 +33,15 @@ export const emitEventStepId = "emit-event-step"
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Emit an event.
|
* Emit an event.
|
||||||
*
|
*
|
||||||
* @example
|
* @example
|
||||||
* import {
|
* import {
|
||||||
* createWorkflow
|
* createWorkflow
|
||||||
* } from "@medusajs/workflows-sdk"
|
* } from "@medusajs/workflows-sdk"
|
||||||
* import {
|
* import {
|
||||||
* emitEventStep
|
* emitEventStep
|
||||||
* } from "@medusajs/core-flows"
|
* } from "@medusajs/core-flows"
|
||||||
*
|
*
|
||||||
* const helloWorldWorkflow = createWorkflow(
|
* const helloWorldWorkflow = createWorkflow(
|
||||||
* "hello-world",
|
* "hello-world",
|
||||||
* () => {
|
* () => {
|
||||||
@@ -57,7 +57,7 @@ export const emitEventStepId = "emit-event-step"
|
|||||||
export const emitEventStep = createStep(
|
export const emitEventStep = createStep(
|
||||||
emitEventStepId,
|
emitEventStepId,
|
||||||
async (input: Input, context) => {
|
async (input: Input, context) => {
|
||||||
if (!input) {
|
if (!input?.data) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,11 +78,16 @@ export const emitEventStep = createStep(
|
|||||||
metadata.eventGroupId = context.eventGroupId
|
metadata.eventGroupId = context.eventGroupId
|
||||||
}
|
}
|
||||||
|
|
||||||
const message: EventBusTypes.Message = {
|
const dataArray = Array.isArray(data_) ? data_ : [data_]
|
||||||
|
const message: EventBusTypes.Message[] = dataArray.map((dt) => ({
|
||||||
name: input.eventName,
|
name: input.eventName,
|
||||||
data: data_,
|
data: dt,
|
||||||
options: input.options,
|
options: input.options,
|
||||||
metadata,
|
metadata,
|
||||||
|
}))
|
||||||
|
|
||||||
|
if (!message.length) {
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
await eventBus.emit(message)
|
await eventBus.emit(message)
|
||||||
|
|||||||
+23
-2
@@ -1,9 +1,12 @@
|
|||||||
import { ProductCategoryWorkflow } from "@medusajs/types"
|
import { ProductCategoryWorkflow } from "@medusajs/types"
|
||||||
|
import { ProductCategoryWorkflowEvents } from "@medusajs/utils"
|
||||||
import {
|
import {
|
||||||
WorkflowData,
|
WorkflowData,
|
||||||
WorkflowResponse,
|
WorkflowResponse,
|
||||||
createWorkflow,
|
createWorkflow,
|
||||||
|
transform,
|
||||||
} from "@medusajs/workflows-sdk"
|
} from "@medusajs/workflows-sdk"
|
||||||
|
import { emitEventStep } from "../../common"
|
||||||
import { createProductCategoriesStep } from "../steps"
|
import { createProductCategoriesStep } from "../steps"
|
||||||
|
|
||||||
export const createProductCategoriesWorkflowId = "create-product-categories"
|
export const createProductCategoriesWorkflowId = "create-product-categories"
|
||||||
@@ -12,7 +15,25 @@ export const createProductCategoriesWorkflowId = "create-product-categories"
|
|||||||
*/
|
*/
|
||||||
export const createProductCategoriesWorkflow = createWorkflow(
|
export const createProductCategoriesWorkflow = createWorkflow(
|
||||||
createProductCategoriesWorkflowId,
|
createProductCategoriesWorkflowId,
|
||||||
(input: WorkflowData<ProductCategoryWorkflow.CreateProductCategoriesWorkflowInput>) => {
|
(
|
||||||
return new WorkflowResponse(createProductCategoriesStep(input))
|
input: WorkflowData<ProductCategoryWorkflow.CreateProductCategoriesWorkflowInput>
|
||||||
|
) => {
|
||||||
|
const createdProducts = createProductCategoriesStep(input)
|
||||||
|
|
||||||
|
const productCategoryIdEvents = transform(
|
||||||
|
{ createdProducts },
|
||||||
|
({ createdProducts }) => {
|
||||||
|
return createdProducts.map((v) => {
|
||||||
|
return { id: v.id }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
emitEventStep({
|
||||||
|
eventName: ProductCategoryWorkflowEvents.CREATED,
|
||||||
|
data: productCategoryIdEvents,
|
||||||
|
})
|
||||||
|
|
||||||
|
return new WorkflowResponse(createdProducts)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
+22
-2
@@ -1,4 +1,11 @@
|
|||||||
import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk"
|
import { ProductCategoryWorkflowEvents } from "@medusajs/utils"
|
||||||
|
import {
|
||||||
|
WorkflowData,
|
||||||
|
WorkflowResponse,
|
||||||
|
createWorkflow,
|
||||||
|
transform,
|
||||||
|
} from "@medusajs/workflows-sdk"
|
||||||
|
import { emitEventStep } from "../../common"
|
||||||
import { deleteProductCategoriesStep } from "../steps"
|
import { deleteProductCategoriesStep } from "../steps"
|
||||||
|
|
||||||
export const deleteProductCategoriesWorkflowId = "delete-product-categories"
|
export const deleteProductCategoriesWorkflowId = "delete-product-categories"
|
||||||
@@ -8,6 +15,19 @@ export const deleteProductCategoriesWorkflowId = "delete-product-categories"
|
|||||||
export const deleteProductCategoriesWorkflow = createWorkflow(
|
export const deleteProductCategoriesWorkflow = createWorkflow(
|
||||||
deleteProductCategoriesWorkflowId,
|
deleteProductCategoriesWorkflowId,
|
||||||
(input: WorkflowData<string[]>) => {
|
(input: WorkflowData<string[]>) => {
|
||||||
return deleteProductCategoriesStep(input)
|
const deleted = deleteProductCategoriesStep(input)
|
||||||
|
|
||||||
|
const productCategoryIdEvents = transform({ input }, ({ input }) => {
|
||||||
|
return input?.map((id) => {
|
||||||
|
return { id }
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
emitEventStep({
|
||||||
|
eventName: ProductCategoryWorkflowEvents.DELETED,
|
||||||
|
data: productCategoryIdEvents,
|
||||||
|
})
|
||||||
|
|
||||||
|
return new WorkflowResponse(deleted)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
+23
-2
@@ -1,9 +1,12 @@
|
|||||||
import { ProductCategoryWorkflow } from "@medusajs/types"
|
import { ProductCategoryWorkflow } from "@medusajs/types"
|
||||||
|
import { ProductCategoryWorkflowEvents } from "@medusajs/utils"
|
||||||
import {
|
import {
|
||||||
WorkflowData,
|
WorkflowData,
|
||||||
WorkflowResponse,
|
WorkflowResponse,
|
||||||
createWorkflow,
|
createWorkflow,
|
||||||
|
transform,
|
||||||
} from "@medusajs/workflows-sdk"
|
} from "@medusajs/workflows-sdk"
|
||||||
|
import { emitEventStep } from "../../common"
|
||||||
import { updateProductCategoriesStep } from "../steps"
|
import { updateProductCategoriesStep } from "../steps"
|
||||||
|
|
||||||
export const updateProductCategoriesWorkflowId = "update-product-categories"
|
export const updateProductCategoriesWorkflowId = "update-product-categories"
|
||||||
@@ -12,7 +15,25 @@ export const updateProductCategoriesWorkflowId = "update-product-categories"
|
|||||||
*/
|
*/
|
||||||
export const updateProductCategoriesWorkflow = createWorkflow(
|
export const updateProductCategoriesWorkflow = createWorkflow(
|
||||||
updateProductCategoriesWorkflowId,
|
updateProductCategoriesWorkflowId,
|
||||||
(input: WorkflowData<ProductCategoryWorkflow.UpdateProductCategoriesWorkflowInput>) => {
|
(
|
||||||
return new WorkflowResponse(updateProductCategoriesStep(input))
|
input: WorkflowData<ProductCategoryWorkflow.UpdateProductCategoriesWorkflowInput>
|
||||||
|
) => {
|
||||||
|
const updatedCategories = updateProductCategoriesStep(input)
|
||||||
|
|
||||||
|
const productCategoryIdEvents = transform(
|
||||||
|
{ updatedCategories },
|
||||||
|
({ updatedCategories }) => {
|
||||||
|
return updatedCategories.map((v) => {
|
||||||
|
return { id: v.id }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
emitEventStep({
|
||||||
|
eventName: ProductCategoryWorkflowEvents.UPDATED,
|
||||||
|
data: productCategoryIdEvents,
|
||||||
|
})
|
||||||
|
|
||||||
|
return new WorkflowResponse(updatedCategories)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@@ -1,10 +1,13 @@
|
|||||||
import { AdditionalData, ProductTypes } from "@medusajs/types"
|
import { AdditionalData, ProductTypes } from "@medusajs/types"
|
||||||
|
import { ProductCollectionWorkflowEvents } from "@medusajs/utils"
|
||||||
import {
|
import {
|
||||||
WorkflowData,
|
WorkflowData,
|
||||||
WorkflowResponse,
|
WorkflowResponse,
|
||||||
createHook,
|
createHook,
|
||||||
createWorkflow,
|
createWorkflow,
|
||||||
|
transform,
|
||||||
} from "@medusajs/workflows-sdk"
|
} from "@medusajs/workflows-sdk"
|
||||||
|
import { emitEventStep } from "../../common"
|
||||||
import { createCollectionsStep } from "../steps"
|
import { createCollectionsStep } from "../steps"
|
||||||
|
|
||||||
export type CreateCollectionsWorkflowInput = {
|
export type CreateCollectionsWorkflowInput = {
|
||||||
@@ -19,6 +22,18 @@ export const createCollectionsWorkflow = createWorkflow(
|
|||||||
createCollectionsWorkflowId,
|
createCollectionsWorkflowId,
|
||||||
(input: WorkflowData<CreateCollectionsWorkflowInput>) => {
|
(input: WorkflowData<CreateCollectionsWorkflowInput>) => {
|
||||||
const collections = createCollectionsStep(input.collections)
|
const collections = createCollectionsStep(input.collections)
|
||||||
|
|
||||||
|
const collectionIdEvents = transform({ collections }, ({ collections }) => {
|
||||||
|
return collections.map((v) => {
|
||||||
|
return { id: v.id }
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
emitEventStep({
|
||||||
|
eventName: ProductCollectionWorkflowEvents.CREATED,
|
||||||
|
data: collectionIdEvents,
|
||||||
|
})
|
||||||
|
|
||||||
const collectionsCreated = createHook("collectionsCreated", {
|
const collectionsCreated = createHook("collectionsCreated", {
|
||||||
collections,
|
collections,
|
||||||
additional_data: input.additional_data,
|
additional_data: input.additional_data,
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import {
|
|||||||
PricingTypes,
|
PricingTypes,
|
||||||
ProductTypes,
|
ProductTypes,
|
||||||
} from "@medusajs/types"
|
} from "@medusajs/types"
|
||||||
import { Modules } from "@medusajs/utils"
|
import { Modules, ProductVariantWorkflowEvents } from "@medusajs/utils"
|
||||||
import {
|
import {
|
||||||
WorkflowData,
|
WorkflowData,
|
||||||
WorkflowResponse,
|
WorkflowResponse,
|
||||||
@@ -13,6 +13,7 @@ import {
|
|||||||
createWorkflow,
|
createWorkflow,
|
||||||
transform,
|
transform,
|
||||||
} from "@medusajs/workflows-sdk"
|
} from "@medusajs/workflows-sdk"
|
||||||
|
import { emitEventStep } from "../../common"
|
||||||
import { createLinksWorkflow } from "../../common/workflows/create-links"
|
import { createLinksWorkflow } from "../../common/workflows/create-links"
|
||||||
import { validateInventoryItems } from "../../inventory/steps/validate-inventory-items"
|
import { validateInventoryItems } from "../../inventory/steps/validate-inventory-items"
|
||||||
import { createInventoryItemsWorkflow } from "../../inventory/workflows/create-inventory-items"
|
import { createInventoryItemsWorkflow } from "../../inventory/workflows/create-inventory-items"
|
||||||
@@ -234,6 +235,17 @@ export const createProductVariantsWorkflow = createWorkflow(
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const variantIdEvents = transform({ response }, ({ response }) => {
|
||||||
|
return response.map((v) => {
|
||||||
|
return { id: v.id }
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
emitEventStep({
|
||||||
|
eventName: ProductVariantWorkflowEvents.CREATED,
|
||||||
|
data: variantIdEvents,
|
||||||
|
})
|
||||||
|
|
||||||
const productVariantsCreated = createHook("productVariantsCreated", {
|
const productVariantsCreated = createHook("productVariantsCreated", {
|
||||||
product_variants: response,
|
product_variants: response,
|
||||||
additional_data: input.additional_data,
|
additional_data: input.additional_data,
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import {
|
|||||||
PricingTypes,
|
PricingTypes,
|
||||||
ProductTypes,
|
ProductTypes,
|
||||||
} from "@medusajs/types"
|
} from "@medusajs/types"
|
||||||
import { isPresent } from "@medusajs/utils"
|
import { ProductWorkflowEvents, isPresent } from "@medusajs/utils"
|
||||||
import {
|
import {
|
||||||
WorkflowData,
|
WorkflowData,
|
||||||
WorkflowResponse,
|
WorkflowResponse,
|
||||||
@@ -12,6 +12,7 @@ import {
|
|||||||
createWorkflow,
|
createWorkflow,
|
||||||
transform,
|
transform,
|
||||||
} from "@medusajs/workflows-sdk"
|
} from "@medusajs/workflows-sdk"
|
||||||
|
import { emitEventStep } from "../../common"
|
||||||
import { associateProductsWithSalesChannelsStep } from "../../sales-channel"
|
import { associateProductsWithSalesChannelsStep } from "../../sales-channel"
|
||||||
import { createProductsStep } from "../steps/create-products"
|
import { createProductsStep } from "../steps/create-products"
|
||||||
import { createProductVariantsWorkflow } from "./create-product-variants"
|
import { createProductVariantsWorkflow } from "./create-product-variants"
|
||||||
@@ -101,6 +102,17 @@ export const createProductsWorkflow = createWorkflow(
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const productIdEvents = transform({ response }, ({ response }) => {
|
||||||
|
return response.map((v) => {
|
||||||
|
return { id: v.id }
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
emitEventStep({
|
||||||
|
eventName: ProductWorkflowEvents.CREATED,
|
||||||
|
data: productIdEvents,
|
||||||
|
})
|
||||||
|
|
||||||
const productsCreated = createHook("productsCreated", {
|
const productsCreated = createHook("productsCreated", {
|
||||||
products: response,
|
products: response,
|
||||||
additional_data: input.additional_data,
|
additional_data: input.additional_data,
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
|
import { ProductCollectionWorkflowEvents } from "@medusajs/utils"
|
||||||
import {
|
import {
|
||||||
WorkflowData,
|
WorkflowData,
|
||||||
WorkflowResponse,
|
WorkflowResponse,
|
||||||
createHook,
|
createHook,
|
||||||
createWorkflow,
|
createWorkflow,
|
||||||
|
transform,
|
||||||
} from "@medusajs/workflows-sdk"
|
} from "@medusajs/workflows-sdk"
|
||||||
|
import { emitEventStep } from "../../common"
|
||||||
import { deleteCollectionsStep } from "../steps"
|
import { deleteCollectionsStep } from "../steps"
|
||||||
|
|
||||||
export type DeleteCollectionsWorkflowInput = { ids: string[] }
|
export type DeleteCollectionsWorkflowInput = { ids: string[] }
|
||||||
@@ -16,6 +19,18 @@ export const deleteCollectionsWorkflow = createWorkflow(
|
|||||||
deleteCollectionsWorkflowId,
|
deleteCollectionsWorkflowId,
|
||||||
(input: WorkflowData<DeleteCollectionsWorkflowInput>) => {
|
(input: WorkflowData<DeleteCollectionsWorkflowInput>) => {
|
||||||
const deletedCollections = deleteCollectionsStep(input.ids)
|
const deletedCollections = deleteCollectionsStep(input.ids)
|
||||||
|
|
||||||
|
const collectionIdEvents = transform({ input }, ({ input }) => {
|
||||||
|
return input.ids?.map((id) => {
|
||||||
|
return { id }
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
emitEventStep({
|
||||||
|
eventName: ProductCollectionWorkflowEvents.DELETED,
|
||||||
|
data: collectionIdEvents,
|
||||||
|
})
|
||||||
|
|
||||||
const collectionsDeleted = createHook("collectionsDeleted", {
|
const collectionsDeleted = createHook("collectionsDeleted", {
|
||||||
ids: input.ids,
|
ids: input.ids,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
|
import { Modules, ProductVariantWorkflowEvents } from "@medusajs/utils"
|
||||||
import {
|
import {
|
||||||
createHook,
|
|
||||||
createWorkflow,
|
|
||||||
WorkflowData,
|
WorkflowData,
|
||||||
WorkflowResponse,
|
WorkflowResponse,
|
||||||
|
createHook,
|
||||||
|
createWorkflow,
|
||||||
|
transform,
|
||||||
} from "@medusajs/workflows-sdk"
|
} from "@medusajs/workflows-sdk"
|
||||||
|
import { emitEventStep, removeRemoteLinkStep } from "../../common"
|
||||||
import { deleteProductVariantsStep } from "../steps"
|
import { deleteProductVariantsStep } from "../steps"
|
||||||
import { removeRemoteLinkStep } from "../../common"
|
|
||||||
import { Modules } from "@medusajs/utils"
|
|
||||||
|
|
||||||
export type DeleteProductVariantsWorkflowInput = { ids: string[] }
|
export type DeleteProductVariantsWorkflowInput = { ids: string[] }
|
||||||
|
|
||||||
@@ -22,6 +23,18 @@ export const deleteProductVariantsWorkflow = createWorkflow(
|
|||||||
}).config({ name: "remove-variant-link-step" })
|
}).config({ name: "remove-variant-link-step" })
|
||||||
|
|
||||||
const deletedProductVariants = deleteProductVariantsStep(input.ids)
|
const deletedProductVariants = deleteProductVariantsStep(input.ids)
|
||||||
|
|
||||||
|
const variantIdEvents = transform({ input }, ({ input }) => {
|
||||||
|
return input.ids?.map((id) => {
|
||||||
|
return { id }
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
emitEventStep({
|
||||||
|
eventName: ProductVariantWorkflowEvents.DELETED,
|
||||||
|
data: variantIdEvents,
|
||||||
|
})
|
||||||
|
|
||||||
const productVariantsDeleted = createHook("productVariantsDeleted", {
|
const productVariantsDeleted = createHook("productVariantsDeleted", {
|
||||||
ids: input.ids,
|
ids: input.ids,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
|
import { Modules, ProductWorkflowEvents } from "@medusajs/utils"
|
||||||
import {
|
import {
|
||||||
|
WorkflowData,
|
||||||
|
WorkflowResponse,
|
||||||
createHook,
|
createHook,
|
||||||
createWorkflow,
|
createWorkflow,
|
||||||
parallelize,
|
parallelize,
|
||||||
transform,
|
transform,
|
||||||
WorkflowData,
|
|
||||||
WorkflowResponse,
|
|
||||||
} from "@medusajs/workflows-sdk"
|
} from "@medusajs/workflows-sdk"
|
||||||
import { removeRemoteLinkStep } from "../../common"
|
import { emitEventStep, removeRemoteLinkStep } from "../../common"
|
||||||
import { deleteProductsStep } from "../steps/delete-products"
|
import { deleteProductsStep } from "../steps/delete-products"
|
||||||
import { getProductsStep } from "../steps/get-products"
|
import { getProductsStep } from "../steps/get-products"
|
||||||
import { Modules } from "@medusajs/utils"
|
|
||||||
|
|
||||||
export type DeleteProductsWorkflowInput = { ids: string[] }
|
export type DeleteProductsWorkflowInput = { ids: string[] }
|
||||||
|
|
||||||
@@ -37,6 +37,17 @@ export const deleteProductsWorkflow = createWorkflow(
|
|||||||
deleteProductsStep(input.ids)
|
deleteProductsStep(input.ids)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const productIdEvents = transform({ input }, ({ input }) => {
|
||||||
|
return input.ids?.map((id) => {
|
||||||
|
return { id }
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
emitEventStep({
|
||||||
|
eventName: ProductWorkflowEvents.DELETED,
|
||||||
|
data: productIdEvents,
|
||||||
|
})
|
||||||
|
|
||||||
const productsDeleted = createHook("productsDeleted", {
|
const productsDeleted = createHook("productsDeleted", {
|
||||||
ids: input.ids,
|
ids: input.ids,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
import { AdditionalData, ProductTypes } from "@medusajs/types"
|
import { AdditionalData, ProductTypes } from "@medusajs/types"
|
||||||
|
import { ProductCollectionWorkflowEvents } from "@medusajs/utils"
|
||||||
import {
|
import {
|
||||||
WorkflowData,
|
WorkflowData,
|
||||||
WorkflowResponse,
|
WorkflowResponse,
|
||||||
createHook,
|
createHook,
|
||||||
createWorkflow,
|
createWorkflow,
|
||||||
|
transform,
|
||||||
} from "@medusajs/workflows-sdk"
|
} from "@medusajs/workflows-sdk"
|
||||||
|
import { emitEventStep } from "../../common"
|
||||||
import { updateCollectionsStep } from "../steps"
|
import { updateCollectionsStep } from "../steps"
|
||||||
|
|
||||||
export type UpdateCollectionsWorkflowInput = {
|
export type UpdateCollectionsWorkflowInput = {
|
||||||
@@ -20,6 +23,21 @@ export const updateCollectionsWorkflow = createWorkflow(
|
|||||||
updateCollectionsWorkflowId,
|
updateCollectionsWorkflowId,
|
||||||
(input: WorkflowData<UpdateCollectionsWorkflowInput>) => {
|
(input: WorkflowData<UpdateCollectionsWorkflowInput>) => {
|
||||||
const updatedCollections = updateCollectionsStep(input)
|
const updatedCollections = updateCollectionsStep(input)
|
||||||
|
|
||||||
|
const collectionIdEvents = transform(
|
||||||
|
{ updatedCollections },
|
||||||
|
({ updatedCollections }) => {
|
||||||
|
return updatedCollections.map((v) => {
|
||||||
|
return { id: v.id }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
emitEventStep({
|
||||||
|
eventName: ProductCollectionWorkflowEvents.UPDATED,
|
||||||
|
data: collectionIdEvents,
|
||||||
|
})
|
||||||
|
|
||||||
const collectionsUpdated = createHook("collectionsUpdated", {
|
const collectionsUpdated = createHook("collectionsUpdated", {
|
||||||
additional_data: input.additional_data,
|
additional_data: input.additional_data,
|
||||||
collections: updatedCollections,
|
collections: updatedCollections,
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import { AdditionalData, PricingTypes, ProductTypes } from "@medusajs/types"
|
import { AdditionalData, PricingTypes, ProductTypes } from "@medusajs/types"
|
||||||
|
import { ProductVariantWorkflowEvents } from "@medusajs/utils"
|
||||||
import {
|
import {
|
||||||
WorkflowData,
|
WorkflowData,
|
||||||
WorkflowResponse,
|
WorkflowResponse,
|
||||||
@@ -6,8 +7,9 @@ import {
|
|||||||
createWorkflow,
|
createWorkflow,
|
||||||
transform,
|
transform,
|
||||||
} from "@medusajs/workflows-sdk"
|
} from "@medusajs/workflows-sdk"
|
||||||
import { updateProductVariantsStep } from "../steps"
|
import { emitEventStep } from "../../common"
|
||||||
import { updatePriceSetsStep } from "../../pricing"
|
import { updatePriceSetsStep } from "../../pricing"
|
||||||
|
import { updateProductVariantsStep } from "../steps"
|
||||||
import { getVariantPricingLinkStep } from "../steps/get-variant-pricing-link"
|
import { getVariantPricingLinkStep } from "../steps/get-variant-pricing-link"
|
||||||
|
|
||||||
export type UpdateProductVariantsWorkflowInput =
|
export type UpdateProductVariantsWorkflowInput =
|
||||||
@@ -29,7 +31,9 @@ export const updateProductVariantsWorkflowId = "update-product-variants"
|
|||||||
*/
|
*/
|
||||||
export const updateProductVariantsWorkflow = createWorkflow(
|
export const updateProductVariantsWorkflow = createWorkflow(
|
||||||
updateProductVariantsWorkflowId,
|
updateProductVariantsWorkflowId,
|
||||||
(input: WorkflowData<UpdateProductVariantsWorkflowInput & AdditionalData>) => {
|
(
|
||||||
|
input: WorkflowData<UpdateProductVariantsWorkflowInput & AdditionalData>
|
||||||
|
) => {
|
||||||
// Passing prices to the product module will fail, we want to keep them for after the variant is updated.
|
// Passing prices to the product module will fail, we want to keep them for after the variant is updated.
|
||||||
const updateWithoutPrices = transform({ input }, (data) => {
|
const updateWithoutPrices = transform({ input }, (data) => {
|
||||||
if ("product_variants" in data.input) {
|
if ("product_variants" in data.input) {
|
||||||
@@ -134,6 +138,17 @@ export const updateProductVariantsWorkflow = createWorkflow(
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const variantIdEvents = transform({ response }, ({ response }) => {
|
||||||
|
return response.map((v) => {
|
||||||
|
return { id: v.id }
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
emitEventStep({
|
||||||
|
eventName: ProductVariantWorkflowEvents.UPDATED,
|
||||||
|
data: variantIdEvents,
|
||||||
|
})
|
||||||
|
|
||||||
const productVariantsUpdated = createHook("productVariantsUpdated", {
|
const productVariantsUpdated = createHook("productVariantsUpdated", {
|
||||||
product_variants: response,
|
product_variants: response,
|
||||||
additional_data: input.additional_data,
|
additional_data: input.additional_data,
|
||||||
|
|||||||
@@ -6,17 +6,22 @@ import {
|
|||||||
ProductTypes,
|
ProductTypes,
|
||||||
UpdateProductVariantWorkflowInputDTO,
|
UpdateProductVariantWorkflowInputDTO,
|
||||||
} from "@medusajs/types"
|
} from "@medusajs/types"
|
||||||
import { arrayDifference, Modules } from "@medusajs/utils"
|
|
||||||
import {
|
import {
|
||||||
|
Modules,
|
||||||
|
ProductWorkflowEvents,
|
||||||
|
arrayDifference,
|
||||||
|
} from "@medusajs/utils"
|
||||||
|
import {
|
||||||
|
WorkflowData,
|
||||||
|
WorkflowResponse,
|
||||||
createHook,
|
createHook,
|
||||||
createWorkflow,
|
createWorkflow,
|
||||||
transform,
|
transform,
|
||||||
WorkflowData,
|
|
||||||
WorkflowResponse,
|
|
||||||
} from "@medusajs/workflows-sdk"
|
} from "@medusajs/workflows-sdk"
|
||||||
import {
|
import {
|
||||||
createRemoteLinkStep,
|
createRemoteLinkStep,
|
||||||
dismissRemoteLinkStep,
|
dismissRemoteLinkStep,
|
||||||
|
emitEventStep,
|
||||||
useRemoteQueryStep,
|
useRemoteQueryStep,
|
||||||
} from "../../common"
|
} from "../../common"
|
||||||
import { upsertVariantPricesWorkflow } from "./upsert-variant-prices"
|
import { upsertVariantPricesWorkflow } from "./upsert-variant-prices"
|
||||||
@@ -36,7 +41,7 @@ export type UpdateProductsWorkflowInputProducts = {
|
|||||||
})[]
|
})[]
|
||||||
} & AdditionalData
|
} & AdditionalData
|
||||||
|
|
||||||
export type UpdateProductWorkflowInput =
|
export type UpdateProductWorkflowInput =
|
||||||
| UpdateProductsWorkflowInputSelector
|
| UpdateProductsWorkflowInputSelector
|
||||||
| UpdateProductsWorkflowInputProducts
|
| UpdateProductsWorkflowInputProducts
|
||||||
|
|
||||||
@@ -279,6 +284,20 @@ export const updateProductsWorkflow = createWorkflow(
|
|||||||
dismissRemoteLinkStep(toDeleteSalesChannelLinks)
|
dismissRemoteLinkStep(toDeleteSalesChannelLinks)
|
||||||
createRemoteLinkStep(salesChannelLinks)
|
createRemoteLinkStep(salesChannelLinks)
|
||||||
|
|
||||||
|
const productIdEvents = transform(
|
||||||
|
{ updatedProductIds },
|
||||||
|
({ updatedProductIds }) => {
|
||||||
|
return updatedProductIds.map((id) => {
|
||||||
|
return { id }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
emitEventStep({
|
||||||
|
eventName: ProductWorkflowEvents.UPDATED,
|
||||||
|
data: productIdEvents,
|
||||||
|
})
|
||||||
|
|
||||||
const productsUpdated = createHook("productsUpdated", {
|
const productsUpdated = createHook("productsUpdated", {
|
||||||
products: updatedProducts,
|
products: updatedProducts,
|
||||||
additional_data: input.additional_data,
|
additional_data: input.additional_data,
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
export const OrderEvents = {
|
export const OrderWorkflowEvents = {
|
||||||
PLACED: "order.placed",
|
PLACED: "order.placed",
|
||||||
CANCELED: "order.canceled",
|
CANCELED: "order.canceled",
|
||||||
COMPLETED: "order.completed",
|
COMPLETED: "order.completed",
|
||||||
|
|||||||
@@ -21,3 +21,27 @@ export const ProductEvents = buildEventNamesFromEntityName(
|
|||||||
eventBaseNames,
|
eventBaseNames,
|
||||||
Modules.PRODUCT
|
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",
|
||||||
|
}
|
||||||
Reference in new issue
Block a user