feat(core-flows): cart events (#9585)

This commit is contained in:
Carlos R. L. Rodrigues
2024-10-16 14:27:24 -03:00
committed by GitHub
parent 6a6c193042
commit f7fbc2f97c
6 changed files with 84 additions and 17 deletions
@@ -1,10 +1,11 @@
import { MedusaError } from "@medusajs/framework/utils" import { CartWorkflowEvents, MedusaError } from "@medusajs/framework/utils"
import { import {
createWorkflow, createWorkflow,
parallelize, parallelize,
transform, transform,
WorkflowData, WorkflowData,
} from "@medusajs/framework/workflows-sdk" } from "@medusajs/framework/workflows-sdk"
import { emitEventStep } from "../../common/steps/emit-event"
import { useRemoteQueryStep } from "../../common/steps/use-remote-query" import { useRemoteQueryStep } from "../../common/steps/use-remote-query"
import { import {
addShippingMethodToCartStep, addShippingMethodToCartStep,
@@ -137,6 +138,10 @@ export const addShippingMethodToCartWorkflow = createWorkflow(
}), }),
addShippingMethodToCartStep({ addShippingMethodToCartStep({
shipping_methods: shippingMethodInput, shipping_methods: shippingMethodInput,
}),
emitEventStep({
eventName: CartWorkflowEvents.UPDATED,
data: { id: input.cart_id },
}) })
) )
@@ -2,6 +2,7 @@ import {
AddToCartWorkflowInputDTO, AddToCartWorkflowInputDTO,
CreateLineItemForCartDTO, CreateLineItemForCartDTO,
} from "@medusajs/framework/types" } from "@medusajs/framework/types"
import { CartWorkflowEvents } from "@medusajs/framework/utils"
import { import {
createWorkflow, createWorkflow,
parallelize, parallelize,
@@ -9,6 +10,7 @@ import {
WorkflowData, WorkflowData,
WorkflowResponse, WorkflowResponse,
} from "@medusajs/framework/workflows-sdk" } from "@medusajs/framework/workflows-sdk"
import { emitEventStep } from "../../common/steps/emit-event"
import { useRemoteQueryStep } from "../../common/steps/use-remote-query" import { useRemoteQueryStep } from "../../common/steps/use-remote-query"
import { import {
createLineItemsStep, createLineItemsStep,
@@ -120,7 +122,13 @@ export const addToCartWorkflow = createWorkflow(
list: false, list: false,
}).config({ name: "refetchcart" }) }).config({ name: "refetchcart" })
refreshCartShippingMethodsStep({ cart }) parallelize(
refreshCartShippingMethodsStep({ cart }),
emitEventStep({
eventName: CartWorkflowEvents.UPDATED,
data: { id: input.cart.id },
})
)
updateTaxLinesWorkflow.runAsStep({ updateTaxLinesWorkflow.runAsStep({
input: { input: {
@@ -2,7 +2,7 @@ import {
AdditionalData, AdditionalData,
CreateCartWorkflowInputDTO, CreateCartWorkflowInputDTO,
} from "@medusajs/framework/types" } from "@medusajs/framework/types"
import { MedusaError } from "@medusajs/framework/utils" import { CartWorkflowEvents, MedusaError } from "@medusajs/framework/utils"
import { import {
WorkflowData, WorkflowData,
WorkflowResponse, WorkflowResponse,
@@ -11,6 +11,7 @@ import {
parallelize, parallelize,
transform, transform,
} from "@medusajs/framework/workflows-sdk" } from "@medusajs/framework/workflows-sdk"
import { emitEventStep } from "../../common/steps/emit-event"
import { useRemoteQueryStep } from "../../common/steps/use-remote-query" import { useRemoteQueryStep } from "../../common/steps/use-remote-query"
import { import {
createCartsStep, createCartsStep,
@@ -173,11 +174,17 @@ export const createCartWorkflow = createWorkflow(
}, },
}) })
refreshPaymentCollectionForCartWorkflow.runAsStep({ parallelize(
input: { refreshPaymentCollectionForCartWorkflow.runAsStep({
cart_id: cart.id, input: {
}, cart_id: cart.id,
}) },
}),
emitEventStep({
eventName: CartWorkflowEvents.CREATED,
data: { id: cart.id },
})
)
const cartCreated = createHook("cartCreated", { const cartCreated = createHook("cartCreated", {
cart, cart,
@@ -2,7 +2,11 @@ import {
AdditionalData, AdditionalData,
UpdateCartWorkflowInputDTO, UpdateCartWorkflowInputDTO,
} from "@medusajs/framework/types" } from "@medusajs/framework/types"
import { MedusaError } from "@medusajs/framework/utils" import {
CartWorkflowEvents,
isDefined,
MedusaError,
} from "@medusajs/framework/utils"
import { import {
createHook, createHook,
createWorkflow, createWorkflow,
@@ -12,7 +16,7 @@ import {
WorkflowData, WorkflowData,
WorkflowResponse, WorkflowResponse,
} from "@medusajs/framework/workflows-sdk" } from "@medusajs/framework/workflows-sdk"
import { useRemoteQueryStep } from "../../common" import { emitEventStep, useRemoteQueryStep } from "../../common"
import { import {
findOrCreateCustomerStep, findOrCreateCustomerStep,
findSalesChannelStep, findSalesChannelStep,
@@ -113,15 +117,15 @@ export const updateCartWorkflow = createWorkflow(
} }
if ( if (
updateCartData.customer_id !== undefined || isDefined(updateCartData.customer_id) ||
updateCartData.email !== undefined isDefined(updateCartData.email)
) { ) {
data_.customer_id = data.customerData.customer?.id || null data_.customer_id = data.customerData.customer?.id || null
data_.email = data_.email =
data.input?.email ?? (data.customerData.customer?.email || null) data.input?.email ?? (data.customerData.customer?.email || null)
} }
if (updateCartData.sales_channel_id !== undefined) { if (isDefined(updateCartData.sales_channel_id)) {
data_.sales_channel_id = data.salesChannel?.id || null data_.sales_channel_id = data.salesChannel?.id || null
} }
@@ -129,7 +133,34 @@ export const updateCartWorkflow = createWorkflow(
} }
) )
updateCartsStep([cartInput]) when({ cartInput }, ({ cartInput }) => {
return isDefined(cartInput.customer_id) || isDefined(cartInput.email)
}).then(() => {
emitEventStep({
eventName: CartWorkflowEvents.CUSTOMER_UPDATED,
data: { id: input.id },
}).config({ name: "emit-customer-updated" })
})
when({ input, cartToUpdate }, ({ input, cartToUpdate }) => {
return (
isDefined(input.region_id) &&
input.region_id !== cartToUpdate?.region?.id
)
}).then(() => {
emitEventStep({
eventName: CartWorkflowEvents.REGION_UPDATED,
data: { id: input.id },
}).config({ name: "emit-region-updated" })
})
parallelize(
updateCartsStep([cartInput]),
emitEventStep({
eventName: CartWorkflowEvents.UPDATED,
data: { id: input.id },
})
)
const cart = refreshCartItemsWorkflow.runAsStep({ const cart = refreshCartItemsWorkflow.runAsStep({
input: { cart_id: cartInput.id, promo_codes: input.promo_codes }, input: { cart_id: cartInput.id, promo_codes: input.promo_codes },
@@ -1,10 +1,13 @@
import { UpdateLineItemInCartWorkflowInputDTO } from "@medusajs/framework/types" import { UpdateLineItemInCartWorkflowInputDTO } from "@medusajs/framework/types"
import { CartWorkflowEvents } from "@medusajs/framework/utils"
import { import {
WorkflowData, WorkflowData,
WorkflowResponse, WorkflowResponse,
createWorkflow, createWorkflow,
parallelize,
transform, transform,
} from "@medusajs/framework/workflows-sdk" } from "@medusajs/framework/workflows-sdk"
import { emitEventStep } from "../../common/steps/emit-event"
import { useRemoteQueryStep } from "../../common/steps/use-remote-query" import { useRemoteQueryStep } from "../../common/steps/use-remote-query"
import { updateLineItemsStepWithSelector } from "../../line-item/steps" import { updateLineItemsStepWithSelector } from "../../line-item/steps"
import { refreshCartShippingMethodsStep } from "../steps" import { refreshCartShippingMethodsStep } from "../steps"
@@ -103,9 +106,15 @@ export const updateLineItemInCartWorkflow = createWorkflow(
}, },
}) })
refreshPaymentCollectionForCartWorkflow.runAsStep({ parallelize(
input: { cart_id: input.cart.id }, refreshPaymentCollectionForCartWorkflow.runAsStep({
}) input: { cart_id: input.cart.id },
}),
emitEventStep({
eventName: CartWorkflowEvents.UPDATED,
data: { id: input.cart.id },
})
)
const updatedItem = transform({ result }, (data) => data.result?.[0]) const updatedItem = transform({ result }, (data) => data.result?.[0])
@@ -1,3 +1,10 @@
export const CartWorkflowEvents = {
CREATED: "cart.created",
UPDATED: "cart.updated",
CUSTOMER_UPDATED: "cart.customer_updated",
REGION_UPDATED: "cart.region_updated",
}
export const CustomerWorkflowEvents = { export const CustomerWorkflowEvents = {
CREATED: "customer.created", CREATED: "customer.created",
UPDATED: "customer.updated", UPDATED: "customer.updated",