chore(medusa): return endpoints (#7823)
This commit is contained in:
committed by
GitHub
parent
5600e58b7f
commit
61758f374b
@@ -1,6 +1,6 @@
|
||||
import { LinkWorkflowInput } from "@medusajs/types/src"
|
||||
import { LinkWorkflowInput } from "@medusajs/types"
|
||||
import { ContainerRegistrationKeys, Modules, promiseAll } from "@medusajs/utils"
|
||||
import { createStep, StepResponse } from "@medusajs/workflows-sdk"
|
||||
import { StepResponse, createStep } from "@medusajs/workflows-sdk"
|
||||
|
||||
export const linkSalesChannelsToApiKeyStepId = "link-sales-channels-to-api-key"
|
||||
export const linkSalesChannelsToApiKeyStep = createStep(
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { LinkWorkflowInput } from "@medusajs/types"
|
||||
import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk"
|
||||
import {
|
||||
linkSalesChannelsToApiKeyStep,
|
||||
validateSalesChannelsExistStep,
|
||||
} from "../steps"
|
||||
import { LinkWorkflowInput } from "@medusajs/types/src"
|
||||
|
||||
export const linkSalesChannelsToApiKeyWorkflowId =
|
||||
"link-sales-channels-to-api-key"
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import { ICustomerModuleService } from "@medusajs/types"
|
||||
import { StepResponse, createStep } from "@medusajs/workflows-sdk"
|
||||
import { ModuleRegistrationName } from "@medusajs/modules-sdk"
|
||||
import { LinkWorkflowInput } from "@medusajs/types/src"
|
||||
import { ICustomerModuleService, LinkWorkflowInput } from "@medusajs/types"
|
||||
import { promiseAll } from "@medusajs/utils"
|
||||
import { StepResponse, createStep } from "@medusajs/workflows-sdk"
|
||||
|
||||
export const linkCustomersToCustomerGroupStepId =
|
||||
"link-customers-to-customer-group"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { LinkWorkflowInput } from "@medusajs/types"
|
||||
import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk"
|
||||
import { linkCustomersToCustomerGroupStep } from "../steps"
|
||||
import { LinkWorkflowInput } from "@medusajs/types/src"
|
||||
|
||||
export const linkCustomersToCustomerGroupWorkflowId =
|
||||
"link-customers-to-customer-group"
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
import { createStep, StepResponse } from "@medusajs/workflows-sdk"
|
||||
import { ModuleRegistrationName } from "@medusajs/modules-sdk"
|
||||
import {
|
||||
FulfillmentWorkflow,
|
||||
IFulfillmentModuleService,
|
||||
ShippingOptionDTO,
|
||||
UpsertShippingOptionDTO,
|
||||
} from "@medusajs/types"
|
||||
import { ModuleRegistrationName } from "@medusajs/modules-sdk"
|
||||
import {
|
||||
arrayDifference,
|
||||
getSelectsAndRelationsFromObjectArray,
|
||||
} from "@medusajs/utils"
|
||||
import { UpsertShippingOptionDTO } from "@medusajs/types/src"
|
||||
import { createStep, StepResponse } from "@medusajs/workflows-sdk"
|
||||
|
||||
type StepInput = Omit<
|
||||
| FulfillmentWorkflow.CreateShippingOptionsWorkflowInput
|
||||
|
||||
@@ -12,8 +12,8 @@ export const createReturnStep = createStep(
|
||||
ModuleRegistrationName.ORDER
|
||||
)
|
||||
|
||||
await service.createReturn(data)
|
||||
return new StepResponse(void 0, data.order_id)
|
||||
const orderReturn = await service.createReturn(data)
|
||||
return new StepResponse(orderReturn, data.order_id)
|
||||
},
|
||||
async (orderId, { container }) => {
|
||||
if (!orderId) {
|
||||
|
||||
33
packages/core/core-flows/src/order/steps/receive-return.ts
Normal file
33
packages/core/core-flows/src/order/steps/receive-return.ts
Normal file
@@ -0,0 +1,33 @@
|
||||
import { ModuleRegistrationName } from "@medusajs/modules-sdk"
|
||||
import { IOrderModuleService, ReceiveOrderReturnDTO } from "@medusajs/types"
|
||||
import { StepResponse, createStep } from "@medusajs/workflows-sdk"
|
||||
|
||||
type ReceiveReturnStepInput = ReceiveOrderReturnDTO
|
||||
|
||||
export const receiveReturnStepId = "receive-return"
|
||||
export const receiveReturnStep = createStep(
|
||||
receiveReturnStepId,
|
||||
async (data: ReceiveReturnStepInput, { container }) => {
|
||||
const service = container.resolve<IOrderModuleService>(
|
||||
ModuleRegistrationName.ORDER
|
||||
)
|
||||
|
||||
if (!data.items?.length) {
|
||||
return new StepResponse(void 0)
|
||||
}
|
||||
|
||||
const received = await service.receiveReturn(data)
|
||||
return new StepResponse(received, data.return_id)
|
||||
},
|
||||
async (orderId, { container }) => {
|
||||
if (!orderId) {
|
||||
return
|
||||
}
|
||||
|
||||
const service = container.resolve<IOrderModuleService>(
|
||||
ModuleRegistrationName.ORDER
|
||||
)
|
||||
|
||||
await service.revertLastVersion(orderId)
|
||||
}
|
||||
)
|
||||
@@ -1,4 +1,4 @@
|
||||
import { OrderDTO, OrderWorkflow } from "@medusajs/types"
|
||||
import { OrderDTO, OrderWorkflow, ReturnDTO } from "@medusajs/types"
|
||||
import { MedusaError, OrderStatus, arrayDifference } from "@medusajs/utils"
|
||||
|
||||
export function throwIfOrderIsCancelled({ order }: { order: OrderDTO }) {
|
||||
@@ -30,3 +30,37 @@ export function throwIfItemsDoesNotExistsInOrder({
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
export function throwIfReturnIsCancelled({
|
||||
orderReturn,
|
||||
}: {
|
||||
orderReturn: ReturnDTO
|
||||
}) {
|
||||
if (orderReturn.canceled_at) {
|
||||
throw new MedusaError(
|
||||
MedusaError.Types.INVALID_DATA,
|
||||
`return with id ${orderReturn.id} has been canceled.`
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
export function throwIfItemsDoesNotExistsInReturn({
|
||||
orderReturn,
|
||||
inputItems,
|
||||
}: {
|
||||
orderReturn: Pick<ReturnDTO, "id" | "items">
|
||||
inputItems: OrderWorkflow.CreateOrderFulfillmentWorkflowInput["items"]
|
||||
}) {
|
||||
const orderReturnItemIds = orderReturn.items?.map((i) => i.id) ?? []
|
||||
const inputItemIds = inputItems.map((i) => i.id)
|
||||
const diff = arrayDifference(inputItemIds, orderReturnItemIds)
|
||||
|
||||
if (diff.length) {
|
||||
throw new MedusaError(
|
||||
MedusaError.Types.INVALID_DATA,
|
||||
`Items with ids ${diff.join(", ")} does not exist in Return with id ${
|
||||
orderReturn.id
|
||||
}.`
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import {
|
||||
BigNumberInput,
|
||||
CreateOrderShippingMethodDTO,
|
||||
FulfillmentWorkflow,
|
||||
OrderDTO,
|
||||
@@ -7,25 +8,26 @@ import {
|
||||
WithCalculatedPrice,
|
||||
} from "@medusajs/types"
|
||||
import {
|
||||
arrayDifference,
|
||||
ContainerRegistrationKeys,
|
||||
isDefined,
|
||||
MathBN,
|
||||
MedusaError,
|
||||
Modules,
|
||||
arrayDifference,
|
||||
isDefined,
|
||||
remoteQueryObjectFromString,
|
||||
} from "@medusajs/utils"
|
||||
import {
|
||||
WorkflowData,
|
||||
createStep,
|
||||
createWorkflow,
|
||||
parallelize,
|
||||
transform,
|
||||
WorkflowData,
|
||||
} from "@medusajs/workflows-sdk"
|
||||
import { createRemoteLinkStep, useRemoteQueryStep } from "../../common"
|
||||
import { createReturnFulfillmentWorkflow } from "../../fulfillment"
|
||||
import { updateOrderTaxLinesStep } from "../steps"
|
||||
import { createReturnStep } from "../steps/create-return"
|
||||
import { receiveReturnStep } from "../steps/receive-return"
|
||||
import {
|
||||
throwIfItemsDoesNotExistsInOrder,
|
||||
throwIfOrderIsCancelled,
|
||||
@@ -139,6 +141,37 @@ function validateCustomRefundAmount({
|
||||
}
|
||||
}
|
||||
|
||||
function prepareReceiveItems({
|
||||
receiveNow,
|
||||
returnId,
|
||||
items,
|
||||
createdBy,
|
||||
}: {
|
||||
receiveNow: boolean
|
||||
returnId: string
|
||||
items: {
|
||||
id: string
|
||||
quantity: BigNumberInput
|
||||
}[]
|
||||
createdBy?: string
|
||||
}) {
|
||||
if (!receiveNow) {
|
||||
return {
|
||||
return_id: returnId,
|
||||
items: [],
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
return_id: returnId,
|
||||
items: (items ?? []).map((i) => ({
|
||||
id: i.id,
|
||||
quantity: i.quantity,
|
||||
})),
|
||||
created_by: createdBy,
|
||||
}
|
||||
}
|
||||
|
||||
function prepareFulfillmentData({
|
||||
order,
|
||||
input,
|
||||
@@ -316,7 +349,7 @@ export const createReturnOrderWorkflow = createWorkflow(
|
||||
}
|
||||
)
|
||||
|
||||
parallelize(
|
||||
const [returnCreated] = parallelize(
|
||||
createReturnStep({
|
||||
order_id: input.order_id,
|
||||
items: input.items,
|
||||
@@ -329,5 +362,16 @@ export const createReturnOrderWorkflow = createWorkflow(
|
||||
}),
|
||||
createRemoteLinkStep(link)
|
||||
)
|
||||
|
||||
const receiveItems = transform(
|
||||
{
|
||||
receiveNow: input.receive_now ?? false,
|
||||
returnId: returnCreated.id,
|
||||
items: order.items!,
|
||||
createdBy: input.created_by!,
|
||||
},
|
||||
prepareReceiveItems
|
||||
)
|
||||
receiveReturnStep(receiveItems)
|
||||
}
|
||||
)
|
||||
|
||||
@@ -7,4 +7,5 @@ export * from "./create-orders"
|
||||
export * from "./create-return"
|
||||
export * from "./create-shipment"
|
||||
export * from "./get-order-detail"
|
||||
export * from "./receive-return"
|
||||
export * from "./update-tax-lines"
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
import { OrderWorkflow } from "@medusajs/types"
|
||||
import {
|
||||
WorkflowData,
|
||||
createStep,
|
||||
createWorkflow,
|
||||
} from "@medusajs/workflows-sdk"
|
||||
import { useRemoteQueryStep } from "../../common"
|
||||
|
||||
import { ReturnDTO } from "@medusajs/types"
|
||||
import { receiveReturnStep } from "../steps/receive-return"
|
||||
import {
|
||||
throwIfItemsDoesNotExistsInReturn,
|
||||
throwIfReturnIsCancelled,
|
||||
} from "../utils/order-validation"
|
||||
|
||||
const validationStep = createStep(
|
||||
"receive-return-order-validation",
|
||||
async function (
|
||||
{
|
||||
orderReturn,
|
||||
input,
|
||||
}: {
|
||||
orderReturn
|
||||
input: OrderWorkflow.ReceiveOrderReturnWorkflowInput
|
||||
},
|
||||
context
|
||||
) {
|
||||
throwIfReturnIsCancelled({ orderReturn })
|
||||
throwIfItemsDoesNotExistsInReturn({ orderReturn, inputItems: input.items })
|
||||
}
|
||||
)
|
||||
|
||||
export const receiveReturnOrderWorkflowId = "receive-return-order"
|
||||
export const receiveReturnOrderWorkflow = createWorkflow(
|
||||
receiveReturnOrderWorkflowId,
|
||||
function (
|
||||
input: WorkflowData<OrderWorkflow.ReceiveOrderReturnWorkflowInput>
|
||||
): WorkflowData<ReturnDTO> {
|
||||
const orderReturn: ReturnDTO = useRemoteQueryStep({
|
||||
entry_point: "returns",
|
||||
fields: ["id", "canceled_at", "items.*"],
|
||||
variables: { id: input.return_id },
|
||||
list: false,
|
||||
throw_if_key_not_found: true,
|
||||
})
|
||||
|
||||
validationStep({ orderReturn, input })
|
||||
|
||||
const received = receiveReturnStep(input)
|
||||
|
||||
return received
|
||||
}
|
||||
)
|
||||
@@ -1,5 +1,4 @@
|
||||
import { CreatePriceListPricesWorkflowDTO } from "@medusajs/types"
|
||||
import { PricingTypes } from "@medusajs/types/src"
|
||||
import { CreatePriceListPricesWorkflowDTO, PricingTypes } from "@medusajs/types"
|
||||
import {
|
||||
WorkflowData,
|
||||
createWorkflow,
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import { UpdatePriceListPricesWorkflowDTO } from "@medusajs/types"
|
||||
import { PricingTypes } from "@medusajs/types/src"
|
||||
import { PricingTypes, UpdatePriceListPricesWorkflowDTO } from "@medusajs/types"
|
||||
import {
|
||||
WorkflowData,
|
||||
createWorkflow,
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import { ModuleRegistrationName } from "@medusajs/modules-sdk"
|
||||
import { IProductModuleService } from "@medusajs/types"
|
||||
import { LinkWorkflowInput } from "@medusajs/types/src"
|
||||
import { IProductModuleService, LinkWorkflowInput } from "@medusajs/types"
|
||||
import { StepResponse, createStep } from "@medusajs/workflows-sdk"
|
||||
|
||||
export const batchLinkProductsToCollectionStepId =
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { LinkWorkflowInput } from "@medusajs/types"
|
||||
import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk"
|
||||
import { LinkWorkflowInput } from "@medusajs/types/src"
|
||||
import { batchLinkProductsToCollectionStep } from "../steps/batch-link-products-collection"
|
||||
|
||||
export const batchLinkProductsToCollectionWorkflowId =
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
import {
|
||||
BatchWorkflowInput,
|
||||
BatchWorkflowOutput,
|
||||
CreateProductWorkflowInputDTO,
|
||||
ProductTypes,
|
||||
UpdateProductWorkflowInputDTO,
|
||||
} from "@medusajs/types"
|
||||
import {
|
||||
WorkflowData,
|
||||
createWorkflow,
|
||||
parallelize,
|
||||
transform,
|
||||
} from "@medusajs/workflows-sdk"
|
||||
import {
|
||||
ProductTypes,
|
||||
BatchWorkflowInput,
|
||||
CreateProductWorkflowInputDTO,
|
||||
UpdateProductWorkflowInputDTO,
|
||||
} from "@medusajs/types"
|
||||
import { BatchWorkflowOutput } from "@medusajs/types/src"
|
||||
import { createProductsWorkflow } from "./create-products"
|
||||
import { updateProductsWorkflow } from "./update-products"
|
||||
import { deleteProductsWorkflow } from "./delete-products"
|
||||
import { updateProductsWorkflow } from "./update-products"
|
||||
|
||||
export const batchProductsWorkflowId = "batch-products"
|
||||
export const batchProductsWorkflow = createWorkflow(
|
||||
|
||||
Reference in New Issue
Block a user