fix(medusa,js-sdk,types): Add basic draft order operations to js-sdk (#11514)
**What** - Exposes `sdk.admin.draftOrder.create/update/retrieve/list` functions from the js-sdk - Implements the necessary types in the types package. - Adds missing endpoints to admin API.
This commit is contained in:
@@ -1,25 +1,56 @@
|
||||
import { MedusaError } from "@medusajs/framework/utils"
|
||||
import { MedusaRequest, MedusaResponse } from "@medusajs/framework/http"
|
||||
import { refetchOrder } from "../helpers"
|
||||
import { defaultAdminOrderFields } from "../query-config"
|
||||
import {
|
||||
getOrderDetailWorkflow,
|
||||
updateOrderWorkflow,
|
||||
} from "@medusajs/core-flows"
|
||||
import {
|
||||
AuthenticatedMedusaRequest,
|
||||
MedusaRequest,
|
||||
MedusaResponse,
|
||||
} from "@medusajs/framework/http"
|
||||
import { HttpTypes } from "@medusajs/framework/types"
|
||||
import { ContainerRegistrationKeys } from "@medusajs/framework/utils"
|
||||
import { AdminUpdateDraftOrderType } from "../validators"
|
||||
|
||||
export const GET = async (
|
||||
req: MedusaRequest,
|
||||
res: MedusaResponse<HttpTypes.AdminDraftOrderResponse>
|
||||
) => {
|
||||
const draftOrder = await refetchOrder(
|
||||
req.params.id,
|
||||
req.scope,
|
||||
defaultAdminOrderFields
|
||||
)
|
||||
const workflow = getOrderDetailWorkflow(req.scope)
|
||||
const { result } = await workflow.run({
|
||||
input: {
|
||||
fields: req.queryConfig.fields,
|
||||
order_id: req.params.id,
|
||||
version: req.validatedQuery.version as number,
|
||||
filters: {
|
||||
is_draft_order: true,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
if (!draftOrder) {
|
||||
throw new MedusaError(
|
||||
MedusaError.Types.NOT_FOUND,
|
||||
`Draft order with id: ${req.params.id} was not found`
|
||||
)
|
||||
}
|
||||
|
||||
res.status(200).json({ draft_order: draftOrder })
|
||||
res.status(200).json({ draft_order: result as HttpTypes.AdminDraftOrder })
|
||||
}
|
||||
|
||||
export const POST = async (
|
||||
req: AuthenticatedMedusaRequest<AdminUpdateDraftOrderType>,
|
||||
res: MedusaResponse<HttpTypes.AdminDraftOrderResponse>
|
||||
) => {
|
||||
const query = req.scope.resolve(ContainerRegistrationKeys.QUERY)
|
||||
|
||||
await updateOrderWorkflow(req.scope).run({
|
||||
input: {
|
||||
...req.validatedBody,
|
||||
user_id: req.auth_context.actor_id,
|
||||
id: req.params.id,
|
||||
},
|
||||
})
|
||||
|
||||
const result = await query.graph({
|
||||
entity: "order",
|
||||
filters: { id: req.params.id },
|
||||
fields: req.queryConfig.fields,
|
||||
})
|
||||
|
||||
res
|
||||
.status(200)
|
||||
.json({ draft_order: result.data[0] as HttpTypes.AdminDraftOrder })
|
||||
}
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
import {
|
||||
validateAndTransformBody,
|
||||
validateAndTransformQuery,
|
||||
} from "@medusajs/framework"
|
||||
import { MiddlewareRoute } from "@medusajs/framework/http"
|
||||
import { validateAndTransformBody } from "@medusajs/framework"
|
||||
import { validateAndTransformQuery } from "@medusajs/framework"
|
||||
import * as QueryConfig from "./query-config"
|
||||
import {
|
||||
AdminCreateDraftOrder,
|
||||
AdminGetOrderParams,
|
||||
AdminGetOrdersParams,
|
||||
AdminGetDraftOrderParams,
|
||||
AdminGetDraftOrdersParams,
|
||||
AdminUpdateDraftOrder,
|
||||
} from "./validators"
|
||||
|
||||
export const adminDraftOrderRoutesMiddlewares: MiddlewareRoute[] = [
|
||||
@@ -14,7 +17,7 @@ export const adminDraftOrderRoutesMiddlewares: MiddlewareRoute[] = [
|
||||
matcher: "/admin/draft-orders",
|
||||
middlewares: [
|
||||
validateAndTransformQuery(
|
||||
AdminGetOrdersParams,
|
||||
AdminGetDraftOrdersParams,
|
||||
QueryConfig.listTransformQueryConfig
|
||||
),
|
||||
],
|
||||
@@ -24,7 +27,7 @@ export const adminDraftOrderRoutesMiddlewares: MiddlewareRoute[] = [
|
||||
matcher: "/admin/draft-orders/:id",
|
||||
middlewares: [
|
||||
validateAndTransformQuery(
|
||||
AdminGetOrderParams,
|
||||
AdminGetDraftOrderParams,
|
||||
QueryConfig.retrieveTransformQueryConfig
|
||||
),
|
||||
],
|
||||
@@ -35,7 +38,18 @@ export const adminDraftOrderRoutesMiddlewares: MiddlewareRoute[] = [
|
||||
middlewares: [
|
||||
validateAndTransformBody(AdminCreateDraftOrder),
|
||||
validateAndTransformQuery(
|
||||
AdminGetOrderParams,
|
||||
AdminGetDraftOrderParams,
|
||||
QueryConfig.retrieveTransformQueryConfig
|
||||
),
|
||||
],
|
||||
},
|
||||
{
|
||||
method: ["POST"],
|
||||
matcher: "/admin/draft-orders/:id",
|
||||
middlewares: [
|
||||
validateAndTransformBody(AdminUpdateDraftOrder),
|
||||
validateAndTransformQuery(
|
||||
AdminGetDraftOrderParams,
|
||||
QueryConfig.retrieveTransformQueryConfig
|
||||
),
|
||||
],
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
export const defaultAdminListOrderFields = [
|
||||
"id",
|
||||
"display_id",
|
||||
"status",
|
||||
"version",
|
||||
"email",
|
||||
"region_id",
|
||||
"*items",
|
||||
"summary",
|
||||
"metadata",
|
||||
@@ -11,8 +14,11 @@ export const defaultAdminListOrderFields = [
|
||||
|
||||
export const defaultAdminOrderFields = [
|
||||
"id",
|
||||
"display_id",
|
||||
"status",
|
||||
"version",
|
||||
"email",
|
||||
"region_id",
|
||||
"*items",
|
||||
"*items.tax_lines",
|
||||
"*items.adjustments",
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
import { createOrderWorkflow } from "@medusajs/core-flows"
|
||||
import {
|
||||
createOrderWorkflow,
|
||||
getOrdersListWorkflow,
|
||||
} from "@medusajs/core-flows"
|
||||
import {
|
||||
AuthenticatedMedusaRequest,
|
||||
MedusaRequest,
|
||||
@@ -8,6 +11,7 @@ import {
|
||||
AdditionalData,
|
||||
CreateOrderDTO,
|
||||
HttpTypes,
|
||||
OrderDTO,
|
||||
} from "@medusajs/framework/types"
|
||||
import {
|
||||
ContainerRegistrationKeys,
|
||||
@@ -21,24 +25,28 @@ export const GET = async (
|
||||
req: MedusaRequest<HttpTypes.AdminOrderFilters>,
|
||||
res: MedusaResponse<HttpTypes.AdminDraftOrderListResponse>
|
||||
) => {
|
||||
const remoteQuery = req.scope.resolve(ContainerRegistrationKeys.REMOTE_QUERY)
|
||||
const variables = {
|
||||
filters: {
|
||||
...req.filterableFields,
|
||||
is_draft_order: true,
|
||||
},
|
||||
...req.queryConfig.pagination,
|
||||
}
|
||||
|
||||
const queryObject = remoteQueryObjectFromString({
|
||||
entryPoint: "order",
|
||||
variables: {
|
||||
filters: {
|
||||
...req.filterableFields,
|
||||
is_draft_order: true,
|
||||
},
|
||||
...req.queryConfig.pagination,
|
||||
const workflow = getOrdersListWorkflow(req.scope)
|
||||
const { result } = await workflow.run({
|
||||
input: {
|
||||
fields: req.queryConfig.fields,
|
||||
variables,
|
||||
},
|
||||
fields: req.queryConfig.fields,
|
||||
})
|
||||
|
||||
const { rows: draft_orders, metadata } = await remoteQuery(queryObject)
|
||||
|
||||
const { rows, metadata } = result as {
|
||||
rows: OrderDTO[]
|
||||
metadata: any
|
||||
}
|
||||
res.json({
|
||||
draft_orders,
|
||||
draft_orders: rows as unknown as HttpTypes.AdminOrder[],
|
||||
count: metadata.count,
|
||||
offset: metadata.skip,
|
||||
limit: metadata.take,
|
||||
|
||||
@@ -6,24 +6,34 @@ import {
|
||||
} from "../../utils/common-validators"
|
||||
import {
|
||||
createFindParams,
|
||||
createOperatorMap,
|
||||
createSelectParams,
|
||||
WithAdditionalData,
|
||||
} from "../../utils/validators"
|
||||
|
||||
export type AdminGetOrderParamsType = z.infer<typeof AdminGetOrderParams>
|
||||
export const AdminGetOrderParams = createSelectParams()
|
||||
export type AdminGetDraftOrderParamsType = z.infer<
|
||||
typeof AdminGetDraftOrderParams
|
||||
>
|
||||
export const AdminGetDraftOrderParams = createSelectParams()
|
||||
|
||||
export const AdminGetOrdersParamsFields = z.object({
|
||||
const AdminGetDraftOrdersParamsFields = z.object({
|
||||
id: z.union([z.string(), z.array(z.string())]).optional(),
|
||||
created_at: createOperatorMap().optional(),
|
||||
updated_at: createOperatorMap().optional(),
|
||||
q: z.string().optional(),
|
||||
region_id: z.union([z.string(), z.array(z.string())]).optional(),
|
||||
sales_channel_id: z.array(z.string()).optional(),
|
||||
})
|
||||
|
||||
export type AdminGetOrdersParamsType = z.infer<typeof AdminGetOrdersParams>
|
||||
export const AdminGetOrdersParams = createFindParams({
|
||||
export type AdminGetDraftOrdersParamsType = z.infer<
|
||||
typeof AdminGetDraftOrdersParams
|
||||
>
|
||||
export const AdminGetDraftOrdersParams = createFindParams({
|
||||
limit: 50,
|
||||
offset: 0,
|
||||
})
|
||||
.merge(AdminGetOrdersParamsFields)
|
||||
.merge(applyAndAndOrOperators(AdminGetOrdersParamsFields))
|
||||
.merge(AdminGetDraftOrdersParamsFields)
|
||||
.merge(applyAndAndOrOperators(AdminGetDraftOrdersParamsFields))
|
||||
|
||||
enum Status {
|
||||
completed = "completed",
|
||||
@@ -91,3 +101,11 @@ export const AdminCreateDraftOrder = WithAdditionalData(
|
||||
)
|
||||
}
|
||||
)
|
||||
|
||||
export type AdminUpdateDraftOrderType = z.infer<typeof AdminUpdateDraftOrder>
|
||||
export const AdminUpdateDraftOrder = z.object({
|
||||
email: z.string().optional(),
|
||||
shipping_address: AddressPayload.optional(),
|
||||
billing_address: AddressPayload.optional(),
|
||||
metadata: z.record(z.unknown()).nullish(),
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user