From f0b9d5534eaf564aba1c1ab9772505f6153babfb Mon Sep 17 00:00:00 2001 From: Riqwan Thamir Date: Wed, 29 May 2024 16:14:10 +0200 Subject: [PATCH] chore: query inventory items by location id (#7524) what: - allows querying inventory items by the correct location_id --- .../modules/__tests__/inventory/index.spec.ts | 7 ++- .../api/admin/inventory-items/validators.ts | 46 +++++++++++-------- .../medusa/src/api/utils/validate-query.ts | 1 - 3 files changed, 31 insertions(+), 23 deletions(-) diff --git a/integration-tests/modules/__tests__/inventory/index.spec.ts b/integration-tests/modules/__tests__/inventory/index.spec.ts index a1928a99cb..8e1a4a9a30 100644 --- a/integration-tests/modules/__tests__/inventory/index.spec.ts +++ b/integration-tests/modules/__tests__/inventory/index.spec.ts @@ -1,8 +1,8 @@ +import { IInventoryServiceNext, IStockLocationService } from "@medusajs/types" import { ContainerRegistrationKeys, remoteQueryObjectFromString, } from "@medusajs/utils" -import { IInventoryServiceNext, IStockLocationService } from "@medusajs/types" import { ModuleRegistrationName } from "@medusajs/modules-sdk" import { createAdminUser } from "../../../helpers/create-admin-user" @@ -751,7 +751,10 @@ medusaIntegrationTestRunner({ }, ]) - const response = await api.get(`/admin/inventory-items`, adminHeaders) + const response = await api.get( + `/admin/inventory-items?location_levels[location_id]=${location1}`, + adminHeaders + ) expect(response.data.inventory_items).toHaveLength(1) expect(response.data.inventory_items[0]).toEqual( diff --git a/packages/medusa/src/api/admin/inventory-items/validators.ts b/packages/medusa/src/api/admin/inventory-items/validators.ts index 0419193b8a..7f11888834 100644 --- a/packages/medusa/src/api/admin/inventory-items/validators.ts +++ b/packages/medusa/src/api/admin/inventory-items/validators.ts @@ -1,10 +1,10 @@ import { z } from "zod" +import { OptionalBooleanValidator } from "../../utils/common-validators" import { createFindParams, createOperatorMap, createSelectParams, } from "../../utils/validators" -import { OptionalBooleanValidator } from "../../utils/common-validators" export type AdminGetInventoryItemParamsType = z.infer< typeof AdminGetInventoryItemParams @@ -17,25 +17,31 @@ export type AdminGetInventoryItemsParamsType = z.infer< export const AdminGetInventoryItemsParams = createFindParams({ limit: 20, offset: 0, -}).merge( - z.object({ - q: z.string().optional(), - id: z.union([z.string(), z.array(z.string())]).optional(), - location_id: z.union([z.string(), z.array(z.string())]).optional(), - sku: z.union([z.string(), z.array(z.string())]).optional(), - origin_country: z.union([z.string(), z.array(z.string())]).optional(), - mid_code: z.union([z.string(), z.array(z.string())]).optional(), - hs_code: z.union([z.string(), z.array(z.string())]).optional(), - material: z.union([z.string(), z.array(z.string())]).optional(), - requires_shipping: OptionalBooleanValidator, - weight: createOperatorMap(z.number(), parseFloat).optional(), - length: createOperatorMap(z.number(), parseFloat).optional(), - height: createOperatorMap(z.number(), parseFloat).optional(), - width: createOperatorMap(z.number(), parseFloat).optional(), - $and: z.lazy(() => AdminGetInventoryItemsParams.array()).optional(), - $or: z.lazy(() => AdminGetInventoryItemsParams.array()).optional(), - }) -) +}) + .merge( + z.object({ + q: z.string().optional(), + id: z.union([z.string(), z.array(z.string())]).optional(), + sku: z.union([z.string(), z.array(z.string())]).optional(), + origin_country: z.union([z.string(), z.array(z.string())]).optional(), + mid_code: z.union([z.string(), z.array(z.string())]).optional(), + hs_code: z.union([z.string(), z.array(z.string())]).optional(), + material: z.union([z.string(), z.array(z.string())]).optional(), + requires_shipping: OptionalBooleanValidator, + weight: createOperatorMap(z.number(), parseFloat).optional(), + length: createOperatorMap(z.number(), parseFloat).optional(), + height: createOperatorMap(z.number(), parseFloat).optional(), + width: createOperatorMap(z.number(), parseFloat).optional(), + location_levels: z + .object({ + location_id: z.union([z.string(), z.array(z.string())]).optional(), + }) + .optional(), + $and: z.lazy(() => AdminGetInventoryItemsParams.array()).optional(), + $or: z.lazy(() => AdminGetInventoryItemsParams.array()).optional(), + }) + ) + .strict() export type AdminGetInventoryLocationLevelParamsType = z.infer< typeof AdminGetInventoryLocationLevelParams diff --git a/packages/medusa/src/api/utils/validate-query.ts b/packages/medusa/src/api/utils/validate-query.ts index 04a2612af9..7e7b3314f9 100644 --- a/packages/medusa/src/api/utils/validate-query.ts +++ b/packages/medusa/src/api/utils/validate-query.ts @@ -46,7 +46,6 @@ export function validateAndTransformQuery( try { const allowed = (req.allowed ?? queryConfig.allowed ?? []) as string[] delete req.allowed - const query = normalizeQuery(req) const validated = await zodValidator(zodSchema, query) const cnf = queryConfig.isList