From 9cad05c8df1c3f2591da46b5efa415b4850e0602 Mon Sep 17 00:00:00 2001 From: Nicolas Gorga <62995075+NicolasGorga@users.noreply.github.com> Date: Tue, 6 Jan 2026 06:46:38 -0300 Subject: [PATCH] chore(medusa): add missing fields and filters to product variants endpoint (#14448) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary **What** — What changes are introduced in this PR? Add missing filters like `ean, upc, barcode` and fields like `thumbnail` to product variants endpoints. **Why** — Why are these changes relevant or necessary? We had a disconnection between the allowed filters and fields for variants in the products endpoint and in the product variants endpoint. **How** — How have these changes been implemented? Avoid this issue in the future by removing redundant definitions for fields and filters for variants in the products and variants endpoints, consolidating them in the variants endpoint and implementing imports in the products endpoint. Add missing fields/filters to product variants endpoint. **Testing** — How have these changes been tested, or how can the reviewer test the feature? *Please provide answer here* --- ## Examples Provide examples or code snippets that demonstrate how this feature works, or how it can be used in practice. This helps with documentation and ensures maintainers can quickly understand and verify the change. ```ts // Example usage ``` --- ## Checklist Please ensure the following before requesting a review: - [x] I have added a **changeset** for this PR - Every non-breaking change should be marked as a **patch** - To add a changeset, run `yarn changeset` and follow the prompts - [ ] The changes are covered by relevant **tests** - [x] I have verified the code works as intended locally - [x] I have linked the related issue(s) if applicable --- ## Additional Context Add any additional context, related issues, or references that might help the reviewer understand this PR. fixes SUP-2872 --- .changeset/eight-coats-attend.md | 5 +++ .../admin/product-variants/query-config.ts | 2 ++ .../api/admin/product-variants/validators.ts | 3 ++ .../src/api/admin/products/middlewares.ts | 2 +- .../src/api/admin/products/query-config.ts | 33 +++---------------- .../src/api/admin/products/validators.ts | 24 +------------- 6 files changed, 16 insertions(+), 53 deletions(-) create mode 100644 .changeset/eight-coats-attend.md diff --git a/.changeset/eight-coats-attend.md b/.changeset/eight-coats-attend.md new file mode 100644 index 0000000000..d94a8af820 --- /dev/null +++ b/.changeset/eight-coats-attend.md @@ -0,0 +1,5 @@ +--- +"@medusajs/medusa": patch +--- + +chore(medusa): add missing fields and filters to product variants endpoint diff --git a/packages/medusa/src/api/admin/product-variants/query-config.ts b/packages/medusa/src/api/admin/product-variants/query-config.ts index 408268b814..b990544375 100644 --- a/packages/medusa/src/api/admin/product-variants/query-config.ts +++ b/packages/medusa/src/api/admin/product-variants/query-config.ts @@ -2,6 +2,7 @@ export const defaultAdminProductVariantFields = [ "id", "title", "sku", + "thumbnail", "barcode", "ean", "upc", @@ -20,6 +21,7 @@ export const defaultAdminProductVariantFields = [ "product_id", "created_at", "updated_at", + "deleted_at", "*product", "*prices", "*options", diff --git a/packages/medusa/src/api/admin/product-variants/validators.ts b/packages/medusa/src/api/admin/product-variants/validators.ts index 8b811e489b..01a31db0bc 100644 --- a/packages/medusa/src/api/admin/product-variants/validators.ts +++ b/packages/medusa/src/api/admin/product-variants/validators.ts @@ -10,6 +10,9 @@ export const AdminGetProductVariantsParamsFields = z.object({ id: z.union([z.string(), z.array(z.string())]).optional(), manage_inventory: booleanString().optional(), allow_backorder: booleanString().optional(), + ean: z.union([z.string(), z.array(z.string())]).optional(), + upc: z.union([z.string(), z.array(z.string())]).optional(), + barcode: z.union([z.string(), z.array(z.string())]).optional(), created_at: createOperatorMap().optional(), updated_at: createOperatorMap().optional(), deleted_at: createOperatorMap().optional(), diff --git a/packages/medusa/src/api/admin/products/middlewares.ts b/packages/medusa/src/api/admin/products/middlewares.ts index cd85d09645..7bd4e75c9a 100644 --- a/packages/medusa/src/api/admin/products/middlewares.ts +++ b/packages/medusa/src/api/admin/products/middlewares.ts @@ -27,7 +27,6 @@ import { AdminGetProductParams, AdminGetProductsParams, AdminGetProductVariantParams, - AdminGetProductVariantsParams, AdminImportProducts, AdminUpdateProduct, AdminUpdateProductOption, @@ -36,6 +35,7 @@ import { CreateProduct, CreateProductVariant, } from "./validators" +import { AdminGetProductVariantsParams } from "../product-variants/validators" const upload = multer({ storage: multer.memoryStorage() }) diff --git a/packages/medusa/src/api/admin/products/query-config.ts b/packages/medusa/src/api/admin/products/query-config.ts index 7e73e70a14..eb16779167 100644 --- a/packages/medusa/src/api/admin/products/query-config.ts +++ b/packages/medusa/src/api/admin/products/query-config.ts @@ -1,32 +1,7 @@ -export const defaultAdminProductsVariantFields = [ - "id", - "product_id", - "thumbnail", - "title", - "sku", - "allow_backorder", - "manage_inventory", - "hs_code", - "origin_country", - "mid_code", - "material", - "weight", - "length", - "height", - "width", - "created_at", - "updated_at", - "deleted_at", - "metadata", - "variant_rank", - "ean", - "upc", - "barcode", - "*prices", - "prices.price_rules.value", - "prices.price_rules.attribute", - "*options", -] +import { defaultAdminProductVariantFields } from "../product-variants/query-config" + +export const defaultAdminProductsVariantFields = + defaultAdminProductVariantFields.filter((field) => field !== "*product") export const retrieveVariantConfig = { defaults: defaultAdminProductsVariantFields, diff --git a/packages/medusa/src/api/admin/products/validators.ts b/packages/medusa/src/api/admin/products/validators.ts index 4a26c2e184..863e3d3fd7 100644 --- a/packages/medusa/src/api/admin/products/validators.ts +++ b/packages/medusa/src/api/admin/products/validators.ts @@ -13,6 +13,7 @@ import { createSelectParams, WithAdditionalData, } from "../../utils/validators" +import { AdminGetProductVariantsParamsFields } from "../product-variants/validators" const statusEnum = z.nativeEnum(ProductStatus) @@ -20,29 +21,6 @@ export const AdminGetProductParams = createSelectParams() export const AdminGetProductVariantParams = createSelectParams() export const AdminGetProductOptionParams = createSelectParams() -export const AdminGetProductVariantsParamsFields = z.object({ - q: z.string().optional(), - id: z.union([z.string(), z.array(z.string())]).optional(), - manage_inventory: booleanString().optional(), - allow_backorder: booleanString().optional(), - ean: z.union([z.string(), z.array(z.string())]).optional(), - upc: z.union([z.string(), z.array(z.string())]).optional(), - barcode: z.union([z.string(), z.array(z.string())]).optional(), - created_at: createOperatorMap().optional(), - updated_at: createOperatorMap().optional(), - deleted_at: createOperatorMap().optional(), -}) - -export type AdminGetProductVariantsParamsType = z.infer< - typeof AdminGetProductVariantsParams -> -export const AdminGetProductVariantsParams = createFindParams({ - offset: 0, - limit: 50, -}) - .merge(AdminGetProductVariantsParamsFields) - .merge(applyAndAndOrOperators(AdminGetProductVariantsParamsFields)) - export const AdminGetProductsParamsDirectFields = z.object({ variants: AdminGetProductVariantsParamsFields.omit({ q: true }) .merge(