Skip to content

Commit

Permalink
feat(core-flows): cart events (#9585)
Browse files Browse the repository at this point in the history
  • Loading branch information
carlos-r-l-rodrigues authored Oct 16, 2024
1 parent 6a6c193 commit f7fbc2f
Show file tree
Hide file tree
Showing 6 changed files with 84 additions and 17 deletions.
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import { MedusaError } from "@medusajs/framework/utils"
import { CartWorkflowEvents, MedusaError } from "@medusajs/framework/utils"
import {
createWorkflow,
parallelize,
transform,
WorkflowData,
} from "@medusajs/framework/workflows-sdk"
import { emitEventStep } from "../../common/steps/emit-event"
import { useRemoteQueryStep } from "../../common/steps/use-remote-query"
import {
addShippingMethodToCartStep,
Expand Down Expand Up @@ -137,6 +138,10 @@ export const addShippingMethodToCartWorkflow = createWorkflow(
}),
addShippingMethodToCartStep({
shipping_methods: shippingMethodInput,
}),
emitEventStep({
eventName: CartWorkflowEvents.UPDATED,
data: { id: input.cart_id },
})
)

Expand Down
10 changes: 9 additions & 1 deletion packages/core/core-flows/src/cart/workflows/add-to-cart.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@ import {
AddToCartWorkflowInputDTO,
CreateLineItemForCartDTO,
} from "@medusajs/framework/types"
import { CartWorkflowEvents } from "@medusajs/framework/utils"
import {
createWorkflow,
parallelize,
transform,
WorkflowData,
WorkflowResponse,
} from "@medusajs/framework/workflows-sdk"
import { emitEventStep } from "../../common/steps/emit-event"
import { useRemoteQueryStep } from "../../common/steps/use-remote-query"
import {
createLineItemsStep,
Expand Down Expand Up @@ -120,7 +122,13 @@ export const addToCartWorkflow = createWorkflow(
list: false,
}).config({ name: "refetch–cart" })

refreshCartShippingMethodsStep({ cart })
parallelize(
refreshCartShippingMethodsStep({ cart }),
emitEventStep({
eventName: CartWorkflowEvents.UPDATED,
data: { id: input.cart.id },
})
)

updateTaxLinesWorkflow.runAsStep({
input: {
Expand Down
19 changes: 13 additions & 6 deletions packages/core/core-flows/src/cart/workflows/create-carts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import {
AdditionalData,
CreateCartWorkflowInputDTO,
} from "@medusajs/framework/types"
import { MedusaError } from "@medusajs/framework/utils"
import { CartWorkflowEvents, MedusaError } from "@medusajs/framework/utils"
import {
WorkflowData,
WorkflowResponse,
Expand All @@ -11,6 +11,7 @@ import {
parallelize,
transform,
} from "@medusajs/framework/workflows-sdk"
import { emitEventStep } from "../../common/steps/emit-event"
import { useRemoteQueryStep } from "../../common/steps/use-remote-query"
import {
createCartsStep,
Expand Down Expand Up @@ -173,11 +174,17 @@ export const createCartWorkflow = createWorkflow(
},
})

refreshPaymentCollectionForCartWorkflow.runAsStep({
input: {
cart_id: cart.id,
},
})
parallelize(
refreshPaymentCollectionForCartWorkflow.runAsStep({
input: {
cart_id: cart.id,
},
}),
emitEventStep({
eventName: CartWorkflowEvents.CREATED,
data: { id: cart.id },
})
)

const cartCreated = createHook("cartCreated", {
cart,
Expand Down
43 changes: 37 additions & 6 deletions packages/core/core-flows/src/cart/workflows/update-cart.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@ import {
AdditionalData,
UpdateCartWorkflowInputDTO,
} from "@medusajs/framework/types"
import { MedusaError } from "@medusajs/framework/utils"
import {
CartWorkflowEvents,
isDefined,
MedusaError,
} from "@medusajs/framework/utils"
import {
createHook,
createWorkflow,
Expand All @@ -12,7 +16,7 @@ import {
WorkflowData,
WorkflowResponse,
} from "@medusajs/framework/workflows-sdk"
import { useRemoteQueryStep } from "../../common"
import { emitEventStep, useRemoteQueryStep } from "../../common"
import {
findOrCreateCustomerStep,
findSalesChannelStep,
Expand Down Expand Up @@ -113,23 +117,50 @@ export const updateCartWorkflow = createWorkflow(
}

if (
updateCartData.customer_id !== undefined ||
updateCartData.email !== undefined
isDefined(updateCartData.customer_id) ||
isDefined(updateCartData.email)
) {
data_.customer_id = data.customerData.customer?.id || null
data_.email =
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
}

return data_
}
)

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({
input: { cart_id: cartInput.id, promo_codes: input.promo_codes },
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
import { UpdateLineItemInCartWorkflowInputDTO } from "@medusajs/framework/types"
import { CartWorkflowEvents } from "@medusajs/framework/utils"
import {
WorkflowData,
WorkflowResponse,
createWorkflow,
parallelize,
transform,
} from "@medusajs/framework/workflows-sdk"
import { emitEventStep } from "../../common/steps/emit-event"
import { useRemoteQueryStep } from "../../common/steps/use-remote-query"
import { updateLineItemsStepWithSelector } from "../../line-item/steps"
import { refreshCartShippingMethodsStep } from "../steps"
Expand Down Expand Up @@ -103,9 +106,15 @@ export const updateLineItemInCartWorkflow = createWorkflow(
},
})

refreshPaymentCollectionForCartWorkflow.runAsStep({
input: { cart_id: input.cart.id },
})
parallelize(
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])

Expand Down
7 changes: 7 additions & 0 deletions packages/core/utils/src/core-flows/events.ts
Original file line number Diff line number Diff line change
@@ -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 = {
CREATED: "customer.created",
UPDATED: "customer.updated",
Expand Down

0 comments on commit f7fbc2f

Please sign in to comment.