chore: parallelize steps (#7605)

This commit is contained in:
Carlos R. L. Rodrigues
2024-06-04 11:23:53 -03:00
committed by GitHub
parent e7005a0aac
commit 1ba887f4c9
16 changed files with 142 additions and 110 deletions

View File

@@ -1,6 +1,7 @@
import {
WorkflowData,
createWorkflow,
parallelize,
transform,
} from "@medusajs/workflows-sdk"
import { useRemoteQueryStep } from "../../../common/steps/use-remote-query"
@@ -78,10 +79,13 @@ export const addShippingMethodToWorkflow = createWorkflow(
const shippingMethods = addShippingMethodToCartStep({
shipping_methods: shippingMethodInput,
})
refreshCartPromotionsStep({ id: input.cart_id })
updateTaxLinesStep({
cart_or_cart_id: input.cart_id,
shipping_methods: shippingMethods,
})
parallelize(
refreshCartPromotionsStep({ id: input.cart_id }),
updateTaxLinesStep({
cart_or_cart_id: input.cart_id,
shipping_methods: shippingMethods,
})
)
}
)

View File

@@ -111,10 +111,12 @@ export const addToCartWorkflow = createWorkflow(
list: false,
}).config({ name: "refetchcart" })
refreshCartShippingMethodsStep({ cart })
updateTaxLinesStep({ cart_or_cart_id: input.cart.id, items })
refreshCartPromotionsStep({ id: input.cart.id })
refreshPaymentCollectionForCartStep({ cart_id: input.cart.id })
parallelize(
refreshCartShippingMethodsStep({ cart }),
updateTaxLinesStep({ cart_or_cart_id: input.cart.id, items }),
refreshCartPromotionsStep({ id: input.cart.id }),
refreshPaymentCollectionForCartStep({ cart_id: input.cart.id })
)
return items
}

View File

@@ -2,6 +2,7 @@ import { OrderDTO } from "@medusajs/types"
import {
WorkflowData,
createWorkflow,
parallelize,
transform,
} from "@medusajs/workflows-sdk"
import { useRemoteQueryStep } from "../../../common"
@@ -62,14 +63,15 @@ export const completeCartWorkflow = createWorkflow(
},
})
reserveInventoryStep(formatedInventoryItems)
const finalCart = useRemoteQueryStep({
entry_point: "cart",
fields: completeCartFields,
variables: { id: input.id },
list: false,
}).config({ name: "final-cart" })
const [, finalCart] = parallelize(
reserveInventoryStep(formatedInventoryItems),
useRemoteQueryStep({
entry_point: "cart",
fields: completeCartFields,
variables: { id: input.id },
list: false,
}).config({ name: "final-cart" })
)
const order = createOrderFromCartStep({ cart: finalCart })

View File

@@ -1,4 +1,5 @@
import { CartDTO, CreateCartWorkflowInputDTO } from "@medusajs/types"
import { MedusaError } from "@medusajs/utils"
import {
WorkflowData,
createWorkflow,
@@ -20,7 +21,6 @@ import { productVariantsFields } from "../utils/fields"
import { prepareLineItemData } from "../utils/prepare-line-item-data"
import { confirmVariantInventoryWorkflow } from "./confirm-variant-inventory"
import { refreshPaymentCollectionForCartStep } from "./refresh-payment-collection"
import { MedusaError } from "@medusajs/utils"
// TODO: The createCartWorkflow are missing the following steps:
// - Refresh/delete shipping methods (fulfillment module)
@@ -140,14 +140,16 @@ export const createCartWorkflow = createWorkflow(
const carts = createCartsStep([cartToCreate])
const cart = transform({ carts }, (data) => data.carts?.[0])
refreshCartPromotionsStep({
id: cart.id,
promo_codes: input.promo_codes,
})
updateTaxLinesStep({ cart_or_cart_id: cart.id })
refreshPaymentCollectionForCartStep({
cart_id: cart.id,
})
parallelize(
refreshCartPromotionsStep({
id: cart.id,
promo_codes: input.promo_codes,
}),
updateTaxLinesStep({ cart_or_cart_id: cart.id }),
refreshPaymentCollectionForCartStep({
cart_id: cart.id,
})
)
return cart
}

View File

@@ -3,6 +3,7 @@ import {
WorkflowData,
createStep,
createWorkflow,
parallelize,
transform,
} from "@medusajs/workflows-sdk"
import { useRemoteQueryStep } from "../../../common/steps/use-remote-query"
@@ -55,16 +56,17 @@ export const refreshPaymentCollectionForCartWorkflow = createWorkflow(
const cart = transform({ carts }, (data) => data.carts[0])
deletePaymentSessionStep({
payment_session_id: cart.payment_collection.payment_sessions?.[0].id,
})
updatePaymentCollectionStep({
selector: { id: cart.payment_collection.id },
update: {
amount: cart.total,
currency_code: cart.currency_code,
},
})
parallelize(
deletePaymentSessionStep({
payment_session_id: cart.payment_collection.payment_sessions?.[0].id,
}),
updatePaymentCollectionStep({
selector: { id: cart.payment_collection.id },
update: {
amount: cart.total,
currency_code: cart.currency_code,
},
})
)
}
)

View File

@@ -60,18 +60,16 @@ export const updateCartPromotionsWorkflow = createWorkflow(
removeLineItemAdjustmentsStep({ lineItemAdjustmentIdsToRemove }),
removeShippingMethodAdjustmentsStep({
shippingMethodAdjustmentIdsToRemove,
}),
createLineItemAdjustmentsStep({ lineItemAdjustmentsToCreate }),
createShippingMethodAdjustmentsStep({
shippingMethodAdjustmentsToCreate,
}),
updateCartPromotionsStep({
id: input.cartId,
promo_codes: computedPromotionCodes,
action: PromotionActions.REPLACE,
})
)
parallelize(
createLineItemAdjustmentsStep({ lineItemAdjustmentsToCreate }),
createShippingMethodAdjustmentsStep({ shippingMethodAdjustmentsToCreate })
)
updateCartPromotionsStep({
id: input.cartId,
promo_codes: computedPromotionCodes,
action: PromotionActions.REPLACE,
})
}
)

View File

@@ -80,16 +80,17 @@ export const updateCartWorkflow = createWorkflow(
list: false,
}).config({ name: "refetchcart" })
refreshCartShippingMethodsStep({ cart })
updateTaxLinesStep({ cart_or_cart_id: carts[0].id })
refreshCartPromotionsStep({
id: input.id,
promo_codes: input.promo_codes,
action: PromotionActions.REPLACE,
})
refreshPaymentCollectionForCartStep({
cart_id: input.id,
})
parallelize(
refreshCartShippingMethodsStep({ cart }),
updateTaxLinesStep({ cart_or_cart_id: carts[0].id }),
refreshCartPromotionsStep({
id: input.id,
promo_codes: input.promo_codes,
action: PromotionActions.REPLACE,
}),
refreshPaymentCollectionForCartStep({
cart_id: input.id,
})
)
}
)

View File

@@ -2,6 +2,7 @@ import { UpdateLineItemInCartWorkflowInputDTO } from "@medusajs/types"
import {
WorkflowData,
createWorkflow,
parallelize,
transform,
} from "@medusajs/workflows-sdk"
import { useRemoteQueryStep } from "../../../common/steps/use-remote-query"
@@ -86,9 +87,11 @@ export const updateLineItemInCartWorkflow = createWorkflow(
list: false,
}).config({ name: "refetchcart" })
refreshCartShippingMethodsStep({ cart })
refreshCartPromotionsStep({ id: input.cart.id })
refreshPaymentCollectionForCartStep({ cart_id: input.cart.id })
parallelize(
refreshCartShippingMethodsStep({ cart }),
refreshCartPromotionsStep({ id: input.cart.id }),
refreshPaymentCollectionForCartStep({ cart_id: input.cart.id })
)
const updatedItem = transform({ result }, (data) => data.result?.[0])

View File

@@ -5,6 +5,7 @@ import {
WorkflowData,
createStep,
createWorkflow,
parallelize,
transform,
} from "@medusajs/workflows-sdk"
import { useRemoteQueryStep } from "../../common"
@@ -125,24 +126,26 @@ export const cancelOrderFulfillmentWorkflow = createWorkflow(
return order.fulfillments.find((f) => f.id === input.fulfillment_id)!
})
cancelFulfillmentWorkflow.runAsStep({
input: {
id: input.fulfillment_id,
},
})
const cancelOrderFulfillmentData = transform(
{ order, fulfillment },
prepareCancelOrderFulfillmentData
)
cancelOrderFulfillmentStep(cancelOrderFulfillmentData)
const { inventoryAdjustment } = transform(
{ order, fulfillment },
prepareInventoryUpdate
)
adjustInventoryLevelsStep(inventoryAdjustment)
parallelize(
cancelOrderFulfillmentStep(cancelOrderFulfillmentData),
adjustInventoryLevelsStep(inventoryAdjustment)
)
// last step because there is no compensation for this step
cancelFulfillmentWorkflow.runAsStep({
input: {
id: input.fulfillment_id,
},
})
}
)

View File

@@ -9,6 +9,7 @@ import {
WorkflowData,
createStep,
createWorkflow,
parallelize,
transform,
} from "@medusajs/workflows-sdk"
import { useRemoteQueryStep } from "../../common"
@@ -112,7 +113,6 @@ export const cancelOrderWorkflow = createWorkflow(
const lineItemIds = transform({ order }, ({ order }) => {
return order.items?.map((i) => i.id)
})
deleteReservationsByLineItemsStep(lineItemIds)
const paymentIds = transform({ order }, ({ order }) => {
return deepFlatMap(
@@ -123,8 +123,11 @@ export const cancelOrderWorkflow = createWorkflow(
}
)
})
cancelPaymentStep({ paymentIds })
cancelOrdersStep({ orderIds: [order.id] })
parallelize(
deleteReservationsByLineItemsStep(lineItemIds),
cancelPaymentStep({ paymentIds }),
cancelOrdersStep({ orderIds: [order.id] })
)
}
)

View File

@@ -261,8 +261,6 @@ export const createOrderFulfillmentWorkflow = createWorkflow(
prepareRegisterOrderFulfillmentData
)
registerOrderFulfillmentStep(registerOrderFulfillmentData)
const link = transform(
{ order_id: input.order_id, fulfillment },
(data) => {
@@ -274,7 +272,6 @@ export const createOrderFulfillmentWorkflow = createWorkflow(
]
}
)
createRemoteLinkStep(link)
const { toDelete, toUpdate, inventoryAdjustment } = transform(
{ order, reservations, input },
@@ -282,6 +279,8 @@ export const createOrderFulfillmentWorkflow = createWorkflow(
)
parallelize(
registerOrderFulfillmentStep(registerOrderFulfillmentData),
createRemoteLinkStep(link),
updateReservationsStep(toUpdate),
deleteReservationsStep(toDelete),
adjustInventoryLevelsStep(inventoryAdjustment)

View File

@@ -19,6 +19,7 @@ import {
WorkflowData,
createStep,
createWorkflow,
parallelize,
transform,
} from "@medusajs/workflows-sdk"
import { createRemoteLinkStep, useRemoteQueryStep } from "../../common"
@@ -295,18 +296,6 @@ export const createReturnOrderWorkflow = createWorkflow(
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(
{ order, input, returnShippingOption },
prepareFulfillmentData
@@ -326,6 +315,19 @@ export const createReturnOrderWorkflow = createWorkflow(
]
}
)
createRemoteLinkStep(link)
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)
)
}
)

View File

@@ -4,6 +4,7 @@ import {
WorkflowData,
createStep,
createWorkflow,
parallelize,
transform,
} from "@medusajs/workflows-sdk"
import { useRemoteQueryStep } from "../../common"
@@ -95,15 +96,16 @@ export const createOrderShipmentWorkflow = createWorkflow(
}
})
createShipmentWorkflow.runAsStep({
input: fulfillmentData,
})
const shipmentData = transform(
{ order, input },
prepareRegisterShipmentData
)
registerOrderShipmentStep(shipmentData)
parallelize(
createShipmentWorkflow.runAsStep({
input: fulfillmentData,
}),
registerOrderShipmentStep(shipmentData)
)
}
)

View File

@@ -1,12 +1,13 @@
import { Modules } from "@medusajs/modules-sdk"
import {
WorkflowData,
createWorkflow,
parallelize,
transform,
} from "@medusajs/workflows-sdk"
import { Modules } from "@medusajs/modules-sdk"
import { removeRemoteLinkStep } from "../../common"
import { deleteProductsStep } from "../steps/delete-products"
import { getProductsStep } from "../steps/get-products"
import { removeRemoteLinkStep } from "../../common"
type WorkflowInput = { ids: string[] }
@@ -21,14 +22,16 @@ export const deleteProductsWorkflow = createWorkflow(
.map((variant) => variant.id)
})
removeRemoteLinkStep({
[Modules.PRODUCT]: { variant_id: variantsToBeDeleted },
}).config({ name: "remove-variant-link-step" })
const [, deletedProduct] = parallelize(
removeRemoteLinkStep({
[Modules.PRODUCT]: {
variant_id: variantsToBeDeleted,
product_id: input.ids,
},
}).config({ name: "remove-product-variant-link-step" }),
deleteProductsStep(input.ids)
)
removeRemoteLinkStep({
[Modules.PRODUCT]: { product_id: input.ids },
}).config({ name: "remove-product-link-step" })
return deleteProductsStep(input.ids)
return deletedProduct
}
)

View File

@@ -166,13 +166,13 @@ export const updateProductsWorkflow = createWorkflow(
const toDeleteLinks = transform({ currentLinks }, prepareToDeleteLinks)
dismissRemoteLinkStep(toDeleteLinks)
const salesChannelLinks = transform(
{ input, updatedProducts },
prepareSalesChannelLinks
)
dismissRemoteLinkStep(toDeleteLinks)
createRemoteLinkStep(salesChannelLinks)
return updatedProducts

View File

@@ -1,5 +1,9 @@
import { LinkWorkflowInput } from "@medusajs/types"
import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk"
import {
WorkflowData,
createWorkflow,
parallelize,
} from "@medusajs/workflows-sdk"
import {
addCampaignPromotionsStep,
removeCampaignPromotionsStep,
@@ -10,7 +14,9 @@ export const addOrRemoveCampaignPromotionsWorkflowId =
export const addOrRemoveCampaignPromotionsWorkflow = createWorkflow(
addOrRemoveCampaignPromotionsWorkflowId,
(input: WorkflowData<LinkWorkflowInput>): WorkflowData<void> => {
addCampaignPromotionsStep(input)
removeCampaignPromotionsStep(input)
parallelize(
addCampaignPromotionsStep(input),
removeCampaignPromotionsStep(input)
)
}
)