feat(medusa): ordem items endpoint (#9646)
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
import {
|
||||
AuthenticatedMedusaRequest,
|
||||
MedusaResponse,
|
||||
} from "@medusajs/framework/http"
|
||||
import { HttpTypes } from "@medusajs/framework/types"
|
||||
import {
|
||||
ContainerRegistrationKeys,
|
||||
deduplicate,
|
||||
} from "@medusajs/framework/utils"
|
||||
|
||||
export const GET = async (
|
||||
req: AuthenticatedMedusaRequest<HttpTypes.AdminOrderItemsFilters>,
|
||||
res: MedusaResponse<HttpTypes.AdminOrderLineItemsListResponse>
|
||||
) => {
|
||||
const { id } = req.params
|
||||
|
||||
const query = req.scope.resolve(ContainerRegistrationKeys.QUERY)
|
||||
|
||||
const result = await query.graph({
|
||||
entity: "order_items",
|
||||
filters: {
|
||||
...req.filterableFields,
|
||||
order_id: id,
|
||||
},
|
||||
fields: deduplicate(
|
||||
req.remoteQueryConfig.fields.concat(["item_id", "version"])
|
||||
),
|
||||
})
|
||||
|
||||
const data = result.data
|
||||
const deduplicatedItems = {}
|
||||
|
||||
for (const item of data) {
|
||||
const itemId = item.item_id
|
||||
const version = item.version
|
||||
|
||||
if (!deduplicatedItems[itemId]) {
|
||||
deduplicatedItems[itemId] = {
|
||||
...item,
|
||||
history: {
|
||||
version: {
|
||||
from: version,
|
||||
to: version,
|
||||
},
|
||||
},
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
deduplicatedItems[itemId].history.version.to = Math.max(
|
||||
version,
|
||||
deduplicatedItems[itemId].history.version.to
|
||||
)
|
||||
|
||||
deduplicatedItems[itemId].history.version.from = Math.min(
|
||||
version,
|
||||
deduplicatedItems[itemId].history.version.from
|
||||
)
|
||||
|
||||
if (version > deduplicatedItems[itemId].version) {
|
||||
deduplicatedItems[itemId] = {
|
||||
...item,
|
||||
history: deduplicatedItems[itemId].history,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
res.json({
|
||||
order_items: Object.values(deduplicatedItems),
|
||||
})
|
||||
}
|
||||
@@ -1,16 +1,17 @@
|
||||
import { getOrderDetailWorkflow } from "@medusajs/core-flows"
|
||||
import {
|
||||
ContainerRegistrationKeys,
|
||||
remoteQueryObjectFromString,
|
||||
} from "@medusajs/framework/utils"
|
||||
import {
|
||||
AuthenticatedMedusaRequest,
|
||||
MedusaResponse,
|
||||
} from "@medusajs/framework/http"
|
||||
import { HttpTypes } from "@medusajs/framework/types"
|
||||
import {
|
||||
ContainerRegistrationKeys,
|
||||
remoteQueryObjectFromString,
|
||||
} from "@medusajs/framework/utils"
|
||||
import { AdminGetOrdersOrderParamsType } from "../validators"
|
||||
|
||||
export const GET = async (
|
||||
req: AuthenticatedMedusaRequest,
|
||||
req: AuthenticatedMedusaRequest<AdminGetOrdersOrderParamsType>,
|
||||
res: MedusaResponse<HttpTypes.AdminOrderResponse>
|
||||
) => {
|
||||
const workflow = getOrderDetailWorkflow(req.scope)
|
||||
@@ -18,6 +19,7 @@ export const GET = async (
|
||||
input: {
|
||||
fields: req.remoteQueryConfig.fields,
|
||||
order_id: req.params.id,
|
||||
version: req.validatedQuery.version as number,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
import { MiddlewareRoute } from "@medusajs/framework/http"
|
||||
import {
|
||||
validateAndTransformBody,
|
||||
validateAndTransformQuery,
|
||||
} from "@medusajs/framework"
|
||||
import { MiddlewareRoute } from "@medusajs/framework/http"
|
||||
import * as QueryConfig from "./query-config"
|
||||
import {
|
||||
AdminCompleteOrder,
|
||||
AdminGetOrdersOrderItemsParams,
|
||||
AdminGetOrdersOrderParams,
|
||||
AdminGetOrdersParams,
|
||||
AdminMarkOrderFulfillmentDelivered,
|
||||
@@ -36,6 +37,16 @@ export const adminOrderRoutesMiddlewares: MiddlewareRoute[] = [
|
||||
),
|
||||
],
|
||||
},
|
||||
{
|
||||
method: ["GET"],
|
||||
matcher: "/admin/orders/:id/line-items",
|
||||
middlewares: [
|
||||
validateAndTransformQuery(
|
||||
AdminGetOrdersOrderItemsParams,
|
||||
QueryConfig.listOrderItemsQueryConfig
|
||||
),
|
||||
],
|
||||
},
|
||||
{
|
||||
method: ["GET"],
|
||||
matcher: "/admin/orders/:id/changes",
|
||||
|
||||
@@ -81,6 +81,14 @@ export const defaultAdminRetrieveOrderChangesFields = [
|
||||
"updated_at",
|
||||
]
|
||||
|
||||
export const defaultAdminOrderItemsFields = [
|
||||
"id",
|
||||
"order_id",
|
||||
"item_id",
|
||||
"version",
|
||||
"*item",
|
||||
]
|
||||
|
||||
export const retrieveTransformQueryConfig = {
|
||||
defaults: defaultAdminRetrieveOrderFields,
|
||||
isList: false,
|
||||
@@ -96,3 +104,9 @@ export const retrieveOrderChangesTransformQueryConfig = {
|
||||
defaults: defaultAdminRetrieveOrderChangesFields,
|
||||
isList: false,
|
||||
}
|
||||
|
||||
export const listOrderItemsQueryConfig = {
|
||||
defaults: defaultAdminOrderItemsFields,
|
||||
defaultLimit: 100,
|
||||
isList: true,
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ export const AdminGetOrdersOrderParams = createSelectParams().merge(
|
||||
z.object({
|
||||
id: z.union([z.string(), z.array(z.string())]).optional(),
|
||||
status: z.union([z.string(), z.array(z.string())]).optional(),
|
||||
version: z.number().optional(),
|
||||
created_at: createOperatorMap().optional(),
|
||||
updated_at: createOperatorMap().optional(),
|
||||
deleted_at: createOperatorMap().optional(),
|
||||
@@ -20,6 +21,18 @@ export type AdminGetOrdersOrderParamsType = z.infer<
|
||||
typeof AdminGetOrdersOrderParams
|
||||
>
|
||||
|
||||
export const AdminGetOrdersOrderItemsParams = createSelectParams().merge(
|
||||
z.object({
|
||||
id: z.union([z.string(), z.array(z.string())]).optional(),
|
||||
item_id: z.union([z.string(), z.array(z.string())]).optional(),
|
||||
version: z.number().optional(),
|
||||
})
|
||||
)
|
||||
|
||||
export type AdminGetOrdersOrderItemsParamsType = z.infer<
|
||||
typeof AdminGetOrdersOrderParams
|
||||
>
|
||||
|
||||
/**
|
||||
* Parameters used to filter and configure the pagination of the retrieved order.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user