feat: Enable filtering admin products by variant EAN, UPC, and barcode (#12815)

* Add filters for variant ean, upc, and barcode in product queries and validators

* fix: Omit 'q' field from variants in product list and validation parameters

* Add tests for admin products filtering by variants ean, upc, and barcode

* Add changeset for filter admin products api by variant ean, upc, and barcode

---------

Co-authored-by: Oli Juhl <59018053+olivermrbl@users.noreply.github.com>
This commit is contained in:
Ante PrimoracandOli Juhl authored and GitHub committed 2025-06-25 09:17:01 +02:00
1 parent fbf33885f5
commit 6ca755ede7
4 files changed
+255 -4

No files matched your search

@@ -24,6 +24,18 @@ export interface AdminProductVariantParams
* out of stock.
*/
allow_backorder?: boolean
/**
* Filter by variant ean(s).
*/
ean?: string | string[]
/**
* Filter by variant upc(s).
*/
upc?: string | string[]
/**
* Filter by variant barcode(s).
*/
barcode?: string | string[]
/**
* Apply filters on the variant's creation date.
*/
@@ -46,5 +58,5 @@ export interface AdminProductListParams
/**
* Apply filters on the product variants.
*/
variants?: AdminProductVariantParams
variants?: Omit<AdminProductVariantParams, "q">
}
@@ -25,6 +25,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(),
@@ -41,9 +44,13 @@ export const AdminGetProductVariantsParams = createFindParams({
.merge(applyAndAndOrOperators(AdminGetProductVariantsParamsFields))
export const AdminGetProductsParamsDirectFields = z.object({
variants: AdminGetProductVariantsParamsFields.merge(
applyAndAndOrOperators(AdminGetProductVariantsParamsFields)
).optional(),
variants: AdminGetProductVariantsParamsFields.omit({ q: true })
.merge(
applyAndAndOrOperators(
AdminGetProductVariantsParamsFields.omit({ q: true })
)
)
.optional(),
status: statusEnum.array().optional(),
})