chore: parallelize steps (#7605)

This commit is contained in:
Carlos R. L. Rodrigues authored and GitHub committed 2024-06-04 11:23:53 -03:00
1 parent e7005a0aac
commit 1ba887f4c9
16 files changed
+99 -67

No files matched your search

@@ -1,6 +1,7 @@
import { import {
WorkflowData, WorkflowData,
createWorkflow, createWorkflow,
parallelize,
transform, transform,
} from "@medusajs/workflows-sdk" } from "@medusajs/workflows-sdk"
import { useRemoteQueryStep } from "../../../common/steps/use-remote-query" import { useRemoteQueryStep } from "../../../common/steps/use-remote-query"
@@ -78,10 +79,13 @@ export const addShippingMethodToWorkflow = createWorkflow(
const shippingMethods = addShippingMethodToCartStep({ const shippingMethods = addShippingMethodToCartStep({
shipping_methods: shippingMethodInput, shipping_methods: shippingMethodInput,
}) })
refreshCartPromotionsStep({ id: input.cart_id })
parallelize(
refreshCartPromotionsStep({ id: input.cart_id }),
updateTaxLinesStep({ updateTaxLinesStep({
cart_or_cart_id: input.cart_id, cart_or_cart_id: input.cart_id,
shipping_methods: shippingMethods, shipping_methods: shippingMethods,
}) })
)
} }
) )
@@ -111,10 +111,12 @@ export const addToCartWorkflow = createWorkflow(
list: false, list: false,
}).config({ name: "refetch–cart" }) }).config({ name: "refetch–cart" })
refreshCartShippingMethodsStep({ cart }) parallelize(
updateTaxLinesStep({ cart_or_cart_id: input.cart.id, items }) refreshCartShippingMethodsStep({ cart }),
refreshCartPromotionsStep({ id: input.cart.id }) updateTaxLinesStep({ cart_or_cart_id: input.cart.id, items }),
refreshCartPromotionsStep({ id: input.cart.id }),
refreshPaymentCollectionForCartStep({ cart_id: input.cart.id }) refreshPaymentCollectionForCartStep({ cart_id: input.cart.id })
)
return items return items
} }
@@ -2,6 +2,7 @@ import { OrderDTO } from "@medusajs/types"
import { import {
WorkflowData, WorkflowData,
createWorkflow, createWorkflow,
parallelize,
transform, transform,
} from "@medusajs/workflows-sdk" } from "@medusajs/workflows-sdk"
import { useRemoteQueryStep } from "../../../common" import { useRemoteQueryStep } from "../../../common"
@@ -62,14 +63,15 @@ export const completeCartWorkflow = createWorkflow(
}, },
}) })
reserveInventoryStep(formatedInventoryItems) const [, finalCart] = parallelize(
reserveInventoryStep(formatedInventoryItems),
const finalCart = useRemoteQueryStep({ useRemoteQueryStep({
entry_point: "cart", entry_point: "cart",
fields: completeCartFields, fields: completeCartFields,
variables: { id: input.id }, variables: { id: input.id },
list: false, list: false,
}).config({ name: "final-cart" }) }).config({ name: "final-cart" })
)
const order = createOrderFromCartStep({ cart: finalCart }) const order = createOrderFromCartStep({ cart: finalCart })
@@ -1,4 +1,5 @@
import { CartDTO, CreateCartWorkflowInputDTO } from "@medusajs/types" import { CartDTO, CreateCartWorkflowInputDTO } from "@medusajs/types"
import { MedusaError } from "@medusajs/utils"
import { import {
WorkflowData, WorkflowData,
createWorkflow, createWorkflow,
@@ -20,7 +21,6 @@ import { productVariantsFields } from "../utils/fields"
import { prepareLineItemData } from "../utils/prepare-line-item-data" import { prepareLineItemData } from "../utils/prepare-line-item-data"
import { confirmVariantInventoryWorkflow } from "./confirm-variant-inventory" import { confirmVariantInventoryWorkflow } from "./confirm-variant-inventory"
import { refreshPaymentCollectionForCartStep } from "./refresh-payment-collection" import { refreshPaymentCollectionForCartStep } from "./refresh-payment-collection"
import { MedusaError } from "@medusajs/utils"
// TODO: The createCartWorkflow are missing the following steps: // TODO: The createCartWorkflow are missing the following steps:
// - Refresh/delete shipping methods (fulfillment module) // - Refresh/delete shipping methods (fulfillment module)
@@ -140,14 +140,16 @@ export const createCartWorkflow = createWorkflow(
const carts = createCartsStep([cartToCreate]) const carts = createCartsStep([cartToCreate])
const cart = transform({ carts }, (data) => data.carts?.[0]) const cart = transform({ carts }, (data) => data.carts?.[0])
parallelize(
refreshCartPromotionsStep({ refreshCartPromotionsStep({
id: cart.id, id: cart.id,
promo_codes: input.promo_codes, promo_codes: input.promo_codes,
}) }),
updateTaxLinesStep({ cart_or_cart_id: cart.id }) updateTaxLinesStep({ cart_or_cart_id: cart.id }),
refreshPaymentCollectionForCartStep({ refreshPaymentCollectionForCartStep({
cart_id: cart.id, cart_id: cart.id,
}) })
)
return cart return cart
} }
@@ -3,6 +3,7 @@ import {
WorkflowData, WorkflowData,
createStep, createStep,
createWorkflow, createWorkflow,
parallelize,
transform, transform,
} from "@medusajs/workflows-sdk" } from "@medusajs/workflows-sdk"
import { useRemoteQueryStep } from "../../../common/steps/use-remote-query" import { useRemoteQueryStep } from "../../../common/steps/use-remote-query"
@@ -55,10 +56,10 @@ export const refreshPaymentCollectionForCartWorkflow = createWorkflow(
const cart = transform({ carts }, (data) => data.carts[0]) const cart = transform({ carts }, (data) => data.carts[0])
parallelize(
deletePaymentSessionStep({ deletePaymentSessionStep({
payment_session_id: cart.payment_collection.payment_sessions?.[0].id, payment_session_id: cart.payment_collection.payment_sessions?.[0].id,
}) }),
updatePaymentCollectionStep({ updatePaymentCollectionStep({
selector: { id: cart.payment_collection.id }, selector: { id: cart.payment_collection.id },
update: { update: {
@@ -66,5 +67,6 @@ export const refreshPaymentCollectionForCartWorkflow = createWorkflow(
currency_code: cart.currency_code, currency_code: cart.currency_code,
}, },
}) })
)
} }
) )
@@ -60,18 +60,16 @@ export const updateCartPromotionsWorkflow = createWorkflow(
removeLineItemAdjustmentsStep({ lineItemAdjustmentIdsToRemove }), removeLineItemAdjustmentsStep({ lineItemAdjustmentIdsToRemove }),
removeShippingMethodAdjustmentsStep({ removeShippingMethodAdjustmentsStep({
shippingMethodAdjustmentIdsToRemove, shippingMethodAdjustmentIdsToRemove,
}) }),
)
parallelize(
createLineItemAdjustmentsStep({ lineItemAdjustmentsToCreate }), createLineItemAdjustmentsStep({ lineItemAdjustmentsToCreate }),
createShippingMethodAdjustmentsStep({ shippingMethodAdjustmentsToCreate }) createShippingMethodAdjustmentsStep({
) shippingMethodAdjustmentsToCreate,
}),
updateCartPromotionsStep({ updateCartPromotionsStep({
id: input.cartId, id: input.cartId,
promo_codes: computedPromotionCodes, promo_codes: computedPromotionCodes,
action: PromotionActions.REPLACE, action: PromotionActions.REPLACE,
}) })
)
} }
) )
@@ -80,16 +80,17 @@ export const updateCartWorkflow = createWorkflow(
list: false, list: false,
}).config({ name: "refetch–cart" }) }).config({ name: "refetch–cart" })
refreshCartShippingMethodsStep({ cart }) parallelize(
updateTaxLinesStep({ cart_or_cart_id: carts[0].id }) refreshCartShippingMethodsStep({ cart }),
updateTaxLinesStep({ cart_or_cart_id: carts[0].id }),
refreshCartPromotionsStep({ refreshCartPromotionsStep({
id: input.id, id: input.id,
promo_codes: input.promo_codes, promo_codes: input.promo_codes,
action: PromotionActions.REPLACE, action: PromotionActions.REPLACE,
}) }),
refreshPaymentCollectionForCartStep({ refreshPaymentCollectionForCartStep({
cart_id: input.id, cart_id: input.id,
}) })
)
} }
) )
@@ -2,6 +2,7 @@ import { UpdateLineItemInCartWorkflowInputDTO } from "@medusajs/types"
import { import {
WorkflowData, WorkflowData,
createWorkflow, createWorkflow,
parallelize,
transform, transform,
} from "@medusajs/workflows-sdk" } from "@medusajs/workflows-sdk"
import { useRemoteQueryStep } from "../../../common/steps/use-remote-query" import { useRemoteQueryStep } from "../../../common/steps/use-remote-query"
@@ -86,9 +87,11 @@ export const updateLineItemInCartWorkflow = createWorkflow(
list: false, list: false,
}).config({ name: "refetch–cart" }) }).config({ name: "refetch–cart" })
refreshCartShippingMethodsStep({ cart }) parallelize(
refreshCartPromotionsStep({ id: input.cart.id }) refreshCartShippingMethodsStep({ cart }),
refreshCartPromotionsStep({ id: input.cart.id }),
refreshPaymentCollectionForCartStep({ cart_id: input.cart.id }) refreshPaymentCollectionForCartStep({ cart_id: input.cart.id })
)
const updatedItem = transform({ result }, (data) => data.result?.[0]) const updatedItem = transform({ result }, (data) => data.result?.[0])
@@ -5,6 +5,7 @@ import {
WorkflowData, WorkflowData,
createStep, createStep,
createWorkflow, createWorkflow,
parallelize,
transform, transform,
} from "@medusajs/workflows-sdk" } from "@medusajs/workflows-sdk"
import { useRemoteQueryStep } from "../../common" import { useRemoteQueryStep } from "../../common"
@@ -125,24 +126,26 @@ export const cancelOrderFulfillmentWorkflow = createWorkflow(
return order.fulfillments.find((f) => f.id === input.fulfillment_id)! return order.fulfillments.find((f) => f.id === input.fulfillment_id)!
}) })
cancelFulfillmentWorkflow.runAsStep({
input: {
id: input.fulfillment_id,
},
})
const cancelOrderFulfillmentData = transform( const cancelOrderFulfillmentData = transform(
{ order, fulfillment }, { order, fulfillment },
prepareCancelOrderFulfillmentData prepareCancelOrderFulfillmentData
) )
cancelOrderFulfillmentStep(cancelOrderFulfillmentData)
const { inventoryAdjustment } = transform( const { inventoryAdjustment } = transform(
{ order, fulfillment }, { order, fulfillment },
prepareInventoryUpdate prepareInventoryUpdate
) )
parallelize(
cancelOrderFulfillmentStep(cancelOrderFulfillmentData),
adjustInventoryLevelsStep(inventoryAdjustment) adjustInventoryLevelsStep(inventoryAdjustment)
)
// last step because there is no compensation for this step
cancelFulfillmentWorkflow.runAsStep({
input: {
id: input.fulfillment_id,
},
})
} }
) )
@@ -9,6 +9,7 @@ import {
WorkflowData, WorkflowData,
createStep, createStep,
createWorkflow, createWorkflow,
parallelize,
transform, transform,
} from "@medusajs/workflows-sdk" } from "@medusajs/workflows-sdk"
import { useRemoteQueryStep } from "../../common" import { useRemoteQueryStep } from "../../common"
@@ -112,7 +113,6 @@ export const cancelOrderWorkflow = createWorkflow(
const lineItemIds = transform({ order }, ({ order }) => { const lineItemIds = transform({ order }, ({ order }) => {
return order.items?.map((i) => i.id) return order.items?.map((i) => i.id)
}) })
deleteReservationsByLineItemsStep(lineItemIds)
const paymentIds = transform({ order }, ({ order }) => { const paymentIds = transform({ order }, ({ order }) => {
return deepFlatMap( return deepFlatMap(
@@ -123,8 +123,11 @@ export const cancelOrderWorkflow = createWorkflow(
} }
) )
}) })
cancelPaymentStep({ paymentIds })
parallelize(
deleteReservationsByLineItemsStep(lineItemIds),
cancelPaymentStep({ paymentIds }),
cancelOrdersStep({ orderIds: [order.id] }) cancelOrdersStep({ orderIds: [order.id] })
)
} }
) )
@@ -261,8 +261,6 @@ export const createOrderFulfillmentWorkflow = createWorkflow(
prepareRegisterOrderFulfillmentData prepareRegisterOrderFulfillmentData
) )
registerOrderFulfillmentStep(registerOrderFulfillmentData)
const link = transform( const link = transform(
{ order_id: input.order_id, fulfillment }, { order_id: input.order_id, fulfillment },
(data) => { (data) => {
@@ -274,7 +272,6 @@ export const createOrderFulfillmentWorkflow = createWorkflow(
] ]
} }
) )
createRemoteLinkStep(link)
const { toDelete, toUpdate, inventoryAdjustment } = transform( const { toDelete, toUpdate, inventoryAdjustment } = transform(
{ order, reservations, input }, { order, reservations, input },
@@ -282,6 +279,8 @@ export const createOrderFulfillmentWorkflow = createWorkflow(
) )
parallelize( parallelize(
registerOrderFulfillmentStep(registerOrderFulfillmentData),
createRemoteLinkStep(link),
updateReservationsStep(toUpdate), updateReservationsStep(toUpdate),
deleteReservationsStep(toDelete), deleteReservationsStep(toDelete),
adjustInventoryLevelsStep(inventoryAdjustment) adjustInventoryLevelsStep(inventoryAdjustment)
@@ -19,6 +19,7 @@ import {
WorkflowData, WorkflowData,
createStep, createStep,
createWorkflow, createWorkflow,
parallelize,
transform, transform,
} from "@medusajs/workflows-sdk" } from "@medusajs/workflows-sdk"
import { createRemoteLinkStep, useRemoteQueryStep } from "../../common" import { createRemoteLinkStep, useRemoteQueryStep } from "../../common"
@@ -295,18 +296,6 @@ export const createReturnOrderWorkflow = createWorkflow(
prepareShippingMethodData prepareShippingMethodData
) )
createReturnStep({
order_id: input.order_id,
items: input.items,
shipping_method: shippingMethodData,
created_by: input.created_by,
})
updateOrderTaxLinesStep({
order_id: input.order_id,
shipping_methods: [shippingMethodData as any], // The types does not seems correct in that step and expect too many things compared to the actual needs
})
const fulfillmentData = transform( const fulfillmentData = transform(
{ order, input, returnShippingOption }, { order, input, returnShippingOption },
prepareFulfillmentData prepareFulfillmentData
@@ -326,6 +315,19 @@ export const createReturnOrderWorkflow = createWorkflow(
] ]
} }
) )
parallelize(
createReturnStep({
order_id: input.order_id,
items: input.items,
shipping_method: shippingMethodData,
created_by: input.created_by,
}),
updateOrderTaxLinesStep({
order_id: input.order_id,
shipping_methods: [shippingMethodData as any], // The types does not seems correct in that step and expect too many things compared to the actual needs
}),
createRemoteLinkStep(link) createRemoteLinkStep(link)
)
} }
) )
@@ -4,6 +4,7 @@ import {
WorkflowData, WorkflowData,
createStep, createStep,
createWorkflow, createWorkflow,
parallelize,
transform, transform,
} from "@medusajs/workflows-sdk" } from "@medusajs/workflows-sdk"
import { useRemoteQueryStep } from "../../common" import { useRemoteQueryStep } from "../../common"
@@ -95,15 +96,16 @@ export const createOrderShipmentWorkflow = createWorkflow(
} }
}) })
createShipmentWorkflow.runAsStep({
input: fulfillmentData,
})
const shipmentData = transform( const shipmentData = transform(
{ order, input }, { order, input },
prepareRegisterShipmentData prepareRegisterShipmentData
) )
parallelize(
createShipmentWorkflow.runAsStep({
input: fulfillmentData,
}),
registerOrderShipmentStep(shipmentData) registerOrderShipmentStep(shipmentData)
)
} }
) )
@@ -1,12 +1,13 @@
import { Modules } from "@medusajs/modules-sdk"
import { import {
WorkflowData, WorkflowData,
createWorkflow, createWorkflow,
parallelize,
transform, transform,
} from "@medusajs/workflows-sdk" } from "@medusajs/workflows-sdk"
import { Modules } from "@medusajs/modules-sdk" import { 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 { removeRemoteLinkStep } from "../../common"
type WorkflowInput = { ids: string[] } type WorkflowInput = { ids: string[] }
@@ -21,14 +22,16 @@ export const deleteProductsWorkflow = createWorkflow(
.map((variant) => variant.id) .map((variant) => variant.id)
}) })
const [, deletedProduct] = parallelize(
removeRemoteLinkStep({ removeRemoteLinkStep({
[Modules.PRODUCT]: { variant_id: variantsToBeDeleted }, [Modules.PRODUCT]: {
}).config({ name: "remove-variant-link-step" }) variant_id: variantsToBeDeleted,
product_id: input.ids,
},
}).config({ name: "remove-product-variant-link-step" }),
deleteProductsStep(input.ids)
)
removeRemoteLinkStep({ return deletedProduct
[Modules.PRODUCT]: { product_id: input.ids },
}).config({ name: "remove-product-link-step" })
return deleteProductsStep(input.ids)
} }
) )
@@ -166,13 +166,13 @@ export const updateProductsWorkflow = createWorkflow(
const toDeleteLinks = transform({ currentLinks }, prepareToDeleteLinks) const toDeleteLinks = transform({ currentLinks }, prepareToDeleteLinks)
dismissRemoteLinkStep(toDeleteLinks)
const salesChannelLinks = transform( const salesChannelLinks = transform(
{ input, updatedProducts }, { input, updatedProducts },
prepareSalesChannelLinks prepareSalesChannelLinks
) )
dismissRemoteLinkStep(toDeleteLinks)
createRemoteLinkStep(salesChannelLinks) createRemoteLinkStep(salesChannelLinks)
return updatedProducts return updatedProducts
@@ -1,5 +1,9 @@
import { LinkWorkflowInput } from "@medusajs/types" import { LinkWorkflowInput } from "@medusajs/types"
import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk" import {
WorkflowData,
createWorkflow,
parallelize,
} from "@medusajs/workflows-sdk"
import { import {
addCampaignPromotionsStep, addCampaignPromotionsStep,
removeCampaignPromotionsStep, removeCampaignPromotionsStep,
@@ -10,7 +14,9 @@ export const addOrRemoveCampaignPromotionsWorkflowId =
export const addOrRemoveCampaignPromotionsWorkflow = createWorkflow( export const addOrRemoveCampaignPromotionsWorkflow = createWorkflow(
addOrRemoveCampaignPromotionsWorkflowId, addOrRemoveCampaignPromotionsWorkflowId,
(input: WorkflowData<LinkWorkflowInput>): WorkflowData<void> => { (input: WorkflowData<LinkWorkflowInput>): WorkflowData<void> => {
addCampaignPromotionsStep(input) parallelize(
addCampaignPromotionsStep(input),
removeCampaignPromotionsStep(input) removeCampaignPromotionsStep(input)
)
} }
) )