chore(inventory, core-flows): big number support (#8204)

This commit is contained in:
Carlos R. L. Rodrigues
2024-07-22 06:32:25 -03:00
committed by GitHub
parent c307972a99
commit fb29b958fa
27 changed files with 363 additions and 218 deletions

View File

@@ -1,7 +1,7 @@
import { IInventoryService, InventoryTypes } from "@medusajs/types"
import { StepResponse, createStep } from "@medusajs/workflows-sdk"
import { ModuleRegistrationName } from "@medusajs/utils"
import { MathBN, ModuleRegistrationName } from "@medusajs/utils"
export const adjustInventoryLevelsStepId = "adjust-inventory-levels-step"
export const adjustInventoryLevelsStep = createStep(
@@ -30,7 +30,7 @@ export const adjustInventoryLevelsStep = createStep(
input.map((item) => {
return {
...item,
adjustment: item.adjustment * -1,
adjustment: MathBN.mult(item.adjustment, -1),
}
})
)

View File

@@ -1,11 +1,16 @@
import { FulfillmentDTO, OrderDTO, OrderWorkflow } from "@medusajs/types"
import {
BigNumberInput,
FulfillmentDTO,
OrderDTO,
OrderWorkflow,
} from "@medusajs/types"
import { MedusaError, Modules } from "@medusajs/utils"
import {
WorkflowData,
createStep,
createWorkflow,
parallelize,
transform,
WorkflowData,
} from "@medusajs/workflows-sdk"
import { useRemoteQueryStep } from "../../common"
import { cancelFulfillmentWorkflow } from "../../fulfillment"
@@ -82,7 +87,7 @@ function prepareInventoryUpdate({
const inventoryAdjustment: {
inventory_item_id: string
location_id: string
adjustment: number // TODO: BigNumberInput
adjustment: BigNumberInput
}[] = []
for (const item of fulfillment.items) {

View File

@@ -1,11 +1,12 @@
import {
BigNumberInput,
FulfillmentDTO,
FulfillmentWorkflow,
OrderDTO,
OrderWorkflow,
ReservationItemDTO,
} from "@medusajs/types"
import { MedusaError, Modules } from "@medusajs/utils"
import { MathBN, MedusaError, Modules } from "@medusajs/utils"
import {
WorkflowData,
createStep,
@@ -68,6 +69,7 @@ function prepareFulfillmentData({
order,
input,
shippingOption,
shippingMethod,
reservations,
}: {
order: OrderDTO
@@ -77,6 +79,7 @@ function prepareFulfillmentData({
provider_id: string
service_zone: { fulfillment_set: { location?: { id: string } } }
}
shippingMethod: { data?: Record<string, unknown> | null }
reservations: ReservationItemDTO[]
}) {
const inputItems = input.items
@@ -120,8 +123,9 @@ function prepareFulfillmentData({
location_id: locationId,
provider_id: shippingOption.provider_id,
shipping_option_id: shippingOption.id,
data: shippingMethod.data,
items: fulfillmentItems,
labels: [] as FulfillmentWorkflow.CreateFulfillmentLabelWorkflowDTO[], // TODO: shipping labels
labels: input.labels ?? [],
delivery_address: shippingAddress as any,
},
}
@@ -136,13 +140,13 @@ function prepareInventoryUpdate({ reservations, order, input, inputItemsMap }) {
const toDelete: string[] = []
const toUpdate: {
id: string
quantity: number // TODO: BigNumberInput
quantity: BigNumberInput
location_id: string
}[] = []
const inventoryAdjustment: {
inventory_item_id: string
location_id: string
adjustment: number // TODO: BigNumberInput
adjustment: BigNumberInput
}[] = []
for (const item of order.items) {
@@ -163,7 +167,7 @@ function prepareInventoryUpdate({ reservations, order, input, inputItemsMap }) {
inventoryAdjustment.push({
inventory_item_id: reservation.inventory_item_id,
location_id: input.location_id ?? reservation.location_id,
adjustment: -item.quantity, // TODO: MathBN.mul(-1, item.quantity)
adjustment: MathBN.mult(item.quantity, -1),
})
if (quantity === 0) {
@@ -201,6 +205,7 @@ export const createOrderFulfillmentWorkflow = createWorkflow(
"items.variant.manage_inventory",
"shipping_address.*",
"shipping_methods.shipping_option_id", // TODO: which shipping method to use when multiple?
"shipping_methods.data",
],
variables: { id: input.order_id },
list: false,
@@ -216,6 +221,10 @@ export const createOrderFulfillmentWorkflow = createWorkflow(
}, {})
})
const shippingMethod = transform(order, (data) => {
return { data: data.shipping_methods?.[0].data }
})
const shippingOptionId = transform(order, (data) => {
return data.shipping_methods?.[0]?.shipping_option_id
})
@@ -250,7 +259,7 @@ export const createOrderFulfillmentWorkflow = createWorkflow(
}).config({ name: "get-reservations" })
const fulfillmentData = transform(
{ order, input, shippingOption, reservations },
{ order, input, shippingOption, shippingMethod, reservations },
prepareFulfillmentData
)
@@ -278,12 +287,12 @@ export const createOrderFulfillmentWorkflow = createWorkflow(
prepareInventoryUpdate
)
adjustInventoryLevelsStep(inventoryAdjustment)
parallelize(
registerOrderFulfillmentStep(registerOrderFulfillmentData),
createRemoteLinkStep(link),
updateReservationsStep(toUpdate),
deleteReservationsStep(toDelete),
adjustInventoryLevelsStep(inventoryAdjustment)
deleteReservationsStep(toDelete)
)
// trigger event OrderModuleService.Events.FULFILLMENT_CREATED

View File

@@ -92,7 +92,7 @@ export const createOrderShipmentWorkflow = createWorkflow(
const fulfillmentData = transform({ input }, ({ input }) => {
return {
id: input.fulfillment_id,
labels: input.labels,
labels: input.labels ?? [],
}
})

View File

@@ -161,7 +161,7 @@ function prepareFulfillmentData({
provider_id: returnShippingOption.provider_id,
shipping_option_id: input.return_shipping?.option_id,
items: fulfillmentItems,
labels: [] as FulfillmentWorkflow.CreateFulfillmentLabelWorkflowDTO[],
labels: input.return_shipping?.labels ?? [],
delivery_address: order.shipping_address ?? ({} as any), // TODO: should it be the stock location address?
order: order,
},