feat(medusa, types, utils, core-flows, order) request & accept order transfer (#10106)
**What** - add request order transfer workflow - add admin endpoint for transferring an order to a customer - accept order transfer storefront endpoint - accept transfer workflow - changes in the order module to introduce new change and action types --- **Note** - we return 400 instead 409 currently if there is already an active order edit, I will revisit this in a followup - endpoint for requesting order transfer from the storefront will be added in a separate PR --- RESOLVES CMRC-701 RESOLVES CMRC-703 RESOLVES CMRC-704 RESOLVES CMRC-705
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
import { requestOrderTransferWorkflow } from "@medusajs/core-flows"
|
||||
import {
|
||||
AuthenticatedMedusaRequest,
|
||||
MedusaResponse,
|
||||
} from "@medusajs/framework/http"
|
||||
import { HttpTypes } from "@medusajs/framework/types"
|
||||
import {
|
||||
ContainerRegistrationKeys,
|
||||
remoteQueryObjectFromString,
|
||||
} from "@medusajs/framework/utils"
|
||||
import { AdminTransferOrderType } from "../../validators"
|
||||
|
||||
export const POST = async (
|
||||
req: AuthenticatedMedusaRequest<AdminTransferOrderType>,
|
||||
res: MedusaResponse<HttpTypes.AdminOrderResponse>
|
||||
) => {
|
||||
const remoteQuery = req.scope.resolve(ContainerRegistrationKeys.REMOTE_QUERY)
|
||||
|
||||
const variables = { id: req.params.id }
|
||||
|
||||
await requestOrderTransferWorkflow(req.scope).run({
|
||||
input: {
|
||||
order_id: req.params.id,
|
||||
customer_id: req.validatedBody.customer_id,
|
||||
logged_in_user: req.auth_context.actor_id,
|
||||
description: req.validatedBody.description,
|
||||
internal_note: req.validatedBody.internal_note,
|
||||
},
|
||||
})
|
||||
|
||||
const queryObject = remoteQueryObjectFromString({
|
||||
entryPoint: "order",
|
||||
variables,
|
||||
fields: req.remoteQueryConfig.fields,
|
||||
})
|
||||
|
||||
const [order] = await remoteQuery(queryObject)
|
||||
res.status(200).json({ order })
|
||||
}
|
||||
@@ -14,6 +14,7 @@ import {
|
||||
AdminOrderChanges,
|
||||
AdminOrderCreateFulfillment,
|
||||
AdminOrderCreateShipment,
|
||||
AdminTransferOrder,
|
||||
} from "./validators"
|
||||
|
||||
export const adminOrderRoutesMiddlewares: MiddlewareRoute[] = [
|
||||
@@ -144,4 +145,15 @@ export const adminOrderRoutesMiddlewares: MiddlewareRoute[] = [
|
||||
),
|
||||
],
|
||||
},
|
||||
{
|
||||
method: ["POST"],
|
||||
matcher: "/admin/orders/:id/transfer",
|
||||
middlewares: [
|
||||
validateAndTransformBody(AdminTransferOrder),
|
||||
validateAndTransformQuery(
|
||||
AdminGetOrdersOrderParams,
|
||||
QueryConfig.retrieveTransformQueryConfig
|
||||
),
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
@@ -120,3 +120,10 @@ export type AdminMarkOrderFulfillmentDeliveredType = z.infer<
|
||||
typeof AdminMarkOrderFulfillmentDelivered
|
||||
>
|
||||
export const AdminMarkOrderFulfillmentDelivered = z.object({})
|
||||
|
||||
export type AdminTransferOrderType = z.infer<typeof AdminTransferOrder>
|
||||
export const AdminTransferOrder = z.object({
|
||||
customer_id: z.string(),
|
||||
description: z.string().optional(),
|
||||
internal_note: z.string().optional(),
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user