diff --git a/.changeset/pretty-items-shout.md b/.changeset/pretty-items-shout.md new file mode 100644 index 0000000000..42614a3fcf --- /dev/null +++ b/.changeset/pretty-items-shout.md @@ -0,0 +1,6 @@ +--- +"@medusajs/product": patch +"@medusajs/medusa": patch +--- + +fix(medusa,product): fix ordering product categories diff --git a/integration-tests/http/__tests__/product-category/admin/product-category.spec.ts b/integration-tests/http/__tests__/product-category/admin/product-category.spec.ts index 25b5ead48b..8dd486f063 100644 --- a/integration-tests/http/__tests__/product-category/admin/product-category.spec.ts +++ b/integration-tests/http/__tests__/product-category/admin/product-category.spec.ts @@ -717,6 +717,28 @@ medusaIntegrationTestRunner({ }) ) }) + + it("gets categories sorted by name", async () => { + const response = await api.get( + `/admin/product-categories?order=name`, + adminHeaders + ) + + const names = response.data.product_categories.map(pc => pc.name) + const sortedNames = [...names].sort((a: string, b: string) => a.localeCompare(b)) + expect(names).toEqual(sortedNames) + }) + + it("gets categories sorted by name descending", async () => { + const response = await api.get( + `/admin/product-categories?order=-name`, + adminHeaders + ) + + const names = response.data.product_categories.map(pc => pc.name) + const sortedNames = [...names].sort((a: string, b: string) => b.localeCompare(a)) + expect(names).toEqual(sortedNames) + }) }) describe("POST /admin/product-categories", () => { diff --git a/integration-tests/modules/__tests__/cart/store/cart.workflows.spec.ts b/integration-tests/modules/__tests__/cart/store/cart.workflows.spec.ts index 29fd59d264..5fcd35cc0a 100644 --- a/integration-tests/modules/__tests__/cart/store/cart.workflows.spec.ts +++ b/integration-tests/modules/__tests__/cart/store/cart.workflows.spec.ts @@ -29,15 +29,8 @@ import { IRegionModuleService, ISalesChannelModuleService, IStockLocationService, - PricingContext, } from "@medusajs/types" -import { - ContainerRegistrationKeys, - Modules, - PriceListStatus, - PriceListType, - RuleOperator, -} from "@medusajs/utils" +import { ContainerRegistrationKeys, Modules, PriceListStatus, PriceListType, RuleOperator, } from "@medusajs/utils" import { adminHeaders, createAdminUser, diff --git a/packages/medusa/src/api/store/product-categories/route.ts b/packages/medusa/src/api/store/product-categories/route.ts index 20c1f34b40..111509fbdf 100644 --- a/packages/medusa/src/api/store/product-categories/route.ts +++ b/packages/medusa/src/api/store/product-categories/route.ts @@ -2,10 +2,7 @@ import { StoreProductCategoryListParams, StoreProductCategoryListResponse, } from "@medusajs/framework/types" -import { - ContainerRegistrationKeys, - remoteQueryObjectFromString, -} from "@medusajs/framework/utils" +import { ContainerRegistrationKeys } from "@medusajs/framework/utils" import { AuthenticatedMedusaRequest, MedusaResponse, @@ -15,23 +12,19 @@ export const GET = async ( req: AuthenticatedMedusaRequest, res: MedusaResponse ) => { - const remoteQuery = req.scope.resolve(ContainerRegistrationKeys.REMOTE_QUERY) + const query = req.scope.resolve(ContainerRegistrationKeys.QUERY) - const queryObject = remoteQueryObjectFromString({ - entryPoint: "product_category", - variables: { - filters: req.filterableFields, - ...req.queryConfig.pagination, - }, + const { data: product_categories, metadata } = await query.graph({ + entity: "product_category", fields: req.queryConfig.fields, + filters: req.filterableFields, + pagination: req.queryConfig.pagination, }) - const { rows: product_categories, metadata } = await remoteQuery(queryObject) - res.json({ product_categories, - count: metadata.count, - offset: metadata.skip, - limit: metadata.take, + count: metadata!.count, + offset: metadata!.skip, + limit: metadata!.take, }) } diff --git a/packages/modules/product/src/repositories/product-category.ts b/packages/modules/product/src/repositories/product-category.ts index 48ce3b6163..c23c14ec31 100644 --- a/packages/modules/product/src/repositories/product-category.ts +++ b/packages/modules/product/src/repositories/product-category.ts @@ -6,7 +6,7 @@ import { ProductTypes, } from "@medusajs/framework/types" import { DALUtils, isDefined, MedusaError } from "@medusajs/framework/utils" -import { LoadStrategy, FindOptions as MikroOptions } from "@mikro-orm/core" +import { FindOptions as MikroOptions, LoadStrategy } from "@mikro-orm/core" import { SqlEntityManager } from "@mikro-orm/postgresql" import { ProductCategory } from "@models" import { UpdateCategoryInput } from "@types" @@ -21,10 +21,9 @@ export class ProductCategoryRepository extends DALUtils.MikroOrmBaseTreeReposito ) { const findOptions_ = { ...findOptions } findOptions_.options ??= {} - findOptions_.options.orderBy = { + findOptions_.options.orderBy ??= { id: "ASC", rank: "ASC", - ...findOptions_.options.orderBy, } const fields = (findOptions_.options.fields ??= [])