feat(medusa): ordem items endpoint (#9646)

This commit is contained in:
Carlos R. L. Rodrigues
2024-10-18 05:59:24 -03:00
committed by GitHub
parent 0a37675f0e
commit 2a98be6b65
16 changed files with 202 additions and 19 deletions
@@ -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.
*/