fix(medusa): Fix q param on /admin/price-lists/:id/products (#2813)
This commit is contained in:
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
"@medusajs/medusa": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Fixes a bug where using the q param with the endpoint /admin/price-lists/:id/products would also return products not associated with the price list.
|
||||||
@@ -1108,6 +1108,7 @@ describe("/admin/price-lists", () => {
|
|||||||
dbConnection,
|
dbConnection,
|
||||||
{
|
{
|
||||||
id: "test-prod-2",
|
id: "test-prod-2",
|
||||||
|
title: "MedusaShoes",
|
||||||
tags: ["test-tag"],
|
tags: ["test-tag"],
|
||||||
variants: [{ id: "test-variant-3" }, { id: "test-variant-4" }],
|
variants: [{ id: "test-variant-3" }, { id: "test-variant-4" }],
|
||||||
},
|
},
|
||||||
@@ -1120,11 +1121,23 @@ describe("/admin/price-lists", () => {
|
|||||||
dbConnection,
|
dbConnection,
|
||||||
{
|
{
|
||||||
id: "test-prod-3",
|
id: "test-prod-3",
|
||||||
|
title: "MedusaShirt",
|
||||||
variants: [{ id: "test-variant-5" }],
|
variants: [{ id: "test-variant-5" }],
|
||||||
},
|
},
|
||||||
3
|
3
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Used to validate that products that are not associated with the price list are not returned
|
||||||
|
await simpleProductFactory(
|
||||||
|
dbConnection,
|
||||||
|
{
|
||||||
|
id: "test-prod-4",
|
||||||
|
title: "OtherHeadphones",
|
||||||
|
variants: [{ id: "test-variant-6" }],
|
||||||
|
},
|
||||||
|
4
|
||||||
|
)
|
||||||
|
|
||||||
await simplePriceListFactory(dbConnection, {
|
await simplePriceListFactory(dbConnection, {
|
||||||
id: "test-list",
|
id: "test-list",
|
||||||
customer_groups: ["test-group"],
|
customer_groups: ["test-group"],
|
||||||
@@ -1236,7 +1249,7 @@ describe("/admin/price-lists", () => {
|
|||||||
const api = useApi()
|
const api = useApi()
|
||||||
|
|
||||||
const response = await api
|
const response = await api
|
||||||
.get(`/admin/price-lists/test-list/products?q=MedusaHeadphones`, {
|
.get(`/admin/price-lists/test-list/products?q=Headphones`, {
|
||||||
headers: {
|
headers: {
|
||||||
Authorization: "Bearer test_token",
|
Authorization: "Bearer test_token",
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -353,6 +353,18 @@ export class ProductRepository extends Repository<Product> {
|
|||||||
options: FindWithoutRelationsOptions = { where: {} },
|
options: FindWithoutRelationsOptions = { where: {} },
|
||||||
relations: string[] = []
|
relations: string[] = []
|
||||||
): Promise<[Product[], number]> {
|
): Promise<[Product[], number]> {
|
||||||
|
const tags = options.where.tags
|
||||||
|
delete options.where.tags
|
||||||
|
|
||||||
|
const price_lists = options.where.price_list_id
|
||||||
|
delete options.where.price_list_id
|
||||||
|
|
||||||
|
const sales_channels = options.where.sales_channel_id
|
||||||
|
delete options.where.sales_channel_id
|
||||||
|
|
||||||
|
const discount_condition_id = options.where.discount_condition_id
|
||||||
|
delete options.where.discount_condition_id
|
||||||
|
|
||||||
const cleanedOptions = this._cleanOptions(options)
|
const cleanedOptions = this._cleanOptions(options)
|
||||||
|
|
||||||
let qb = this.createQueryBuilder("product")
|
let qb = this.createQueryBuilder("product")
|
||||||
@@ -372,13 +384,35 @@ export class ProductRepository extends Repository<Product> {
|
|||||||
.skip(cleanedOptions.skip)
|
.skip(cleanedOptions.skip)
|
||||||
.take(cleanedOptions.take)
|
.take(cleanedOptions.take)
|
||||||
|
|
||||||
const discountConditionId = options.where.discount_condition_id
|
if (discount_condition_id) {
|
||||||
if (discountConditionId) {
|
|
||||||
qb.innerJoin(
|
qb.innerJoin(
|
||||||
"discount_condition_product",
|
"discount_condition_product",
|
||||||
"dc_product",
|
"dc_product",
|
||||||
`dc_product.product_id = product.id AND dc_product.condition_id = :dcId`,
|
`dc_product.product_id = product.id AND dc_product.condition_id = :dcId`,
|
||||||
{ dcId: discountConditionId }
|
{ dcId: discount_condition_id }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tags) {
|
||||||
|
qb.leftJoin("product.tags", "tags").andWhere(`tags.id IN (:...tag_ids)`, {
|
||||||
|
tag_ids: tags.value,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if (price_lists) {
|
||||||
|
qb.leftJoin("product.variants", "variants")
|
||||||
|
.leftJoin("variants.prices", "ma")
|
||||||
|
.andWhere("ma.price_list_id IN (:...price_list_ids)", {
|
||||||
|
price_list_ids: price_lists.value,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sales_channels) {
|
||||||
|
qb.innerJoin(
|
||||||
|
"product.sales_channels",
|
||||||
|
"sales_channels",
|
||||||
|
"sales_channels.id IN (:...sales_channels_ids)",
|
||||||
|
{ sales_channels_ids: sales_channels.value }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user