added filtering on is_new and is_favorite
This commit is contained in:
@@ -103,15 +103,15 @@ func (h *ProductsHandler) ListProducts(c fiber.Ctx) error {
|
|||||||
return c.JSON(response.Make(&list.Items, int(list.Count), i18n.T_(c, response.Message_OK)))
|
return c.JSON(response.Make(&list.Items, int(list.Count), i18n.T_(c, response.Message_OK)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// These are all the filterable fields
|
||||||
var columnMappingListProducts map[string]string = map[string]string{
|
var columnMappingListProducts map[string]string = map[string]string{
|
||||||
"product_id": "ps.id_product",
|
"product_id": "bp.product_id",
|
||||||
"name": "pl.name",
|
"name": "bp.name",
|
||||||
"reference": "p.reference",
|
"reference": "bp.reference",
|
||||||
"category_name": "cl.name",
|
"category_id": "bp.category_id",
|
||||||
"category_id": "cp.id_category",
|
"quantity": "bp.quantity",
|
||||||
"quantity": "sa.quantity",
|
"is_favorite": "bp.is_favorite",
|
||||||
"is_favorite": "ps.is_favorite",
|
"is_new": "bp.is_new",
|
||||||
"is_new": "is_new",
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ProductsHandler) AddToFavorites(c fiber.Ctx) error {
|
func (h *ProductsHandler) AddToFavorites(c fiber.Ctx) error {
|
||||||
|
|||||||
@@ -105,69 +105,90 @@ func (repo *ProductsRepo) GetVariants(p_id_product, p_id_shop, p_id_lang, p_id_c
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (repo *ProductsRepo) Find(langID uint, userID uint, p find.Paging, filt *filters.FiltersList) (*find.Found[model.ProductInList], error) {
|
func (repo *ProductsRepo) Find(langID uint, userID uint, p find.Paging, filt *filters.FiltersList) (*find.Found[model.ProductInList], error) {
|
||||||
query := db.Get().
|
query := db.DB.
|
||||||
Table(gormcol.Field.Tab(dbmodel.PsProductShopCols.Active)+" AS ps").
|
Table("base_products AS bp").
|
||||||
Select(`
|
|
||||||
ps.id_product AS product_id,
|
|
||||||
pl.name AS name,
|
|
||||||
pl.link_rewrite AS link_rewrite,
|
|
||||||
CONCAT(?, '/', ims.id_image, '-small_default/', pl.link_rewrite, '.webp') AS image_link,
|
|
||||||
cl.name AS category_name,
|
|
||||||
p.reference AS reference,
|
|
||||||
COALESCE(v.variants_number, 0) AS variants_number,
|
|
||||||
sa.quantity AS quantity,
|
|
||||||
COALESCE(f.is_favorite, 0) AS is_favorite,
|
|
||||||
CASE
|
|
||||||
WHEN ps.date_add >= DATE_SUB(
|
|
||||||
NOW(),
|
|
||||||
INTERVAL (
|
|
||||||
SELECT value
|
|
||||||
FROM ps_configuration
|
|
||||||
WHERE name = 'PS_NB_DAYS_NEW_PRODUCT'
|
|
||||||
) DAY
|
|
||||||
) AND ps.active = 1
|
|
||||||
THEN 1
|
|
||||||
ELSE 0
|
|
||||||
END AS is_new
|
|
||||||
`, config.Get().Image.ImagePrefix).
|
|
||||||
Joins("JOIN "+dbmodel.PsProductCols.IDProduct.Tab()+" p ON p.id_product = ps.id_product").
|
|
||||||
Joins("JOIN ps_product_lang pl ON pl.id_product = ps.id_product AND pl.id_lang = ?", langID).
|
|
||||||
Joins("JOIN ps_image_shop ims ON ims.id_product = ps.id_product AND ims.cover = 1").
|
|
||||||
Joins("JOIN ps_category_lang cl ON cl.id_category = ps.id_category_default AND cl.id_lang = ?", langID).
|
|
||||||
Joins("JOIN ps_category_product cp ON cp.id_product = ps.id_product").
|
|
||||||
Joins("LEFT JOIN variants v ON v.id_product = ps.id_product").
|
|
||||||
Joins("LEFT JOIN favorites f ON f.id_product = ps.id_product").
|
|
||||||
Joins("LEFT JOIN ps_stock_available sa ON sa.id_product = ps.id_product AND sa.id_product_attribute = 0").
|
|
||||||
Where("ps.active = ?", 1).
|
|
||||||
Group("ps.id_product").
|
|
||||||
Clauses(exclause.With{
|
Clauses(exclause.With{
|
||||||
CTEs: []exclause.CTE{
|
CTEs: []exclause.CTE{
|
||||||
{
|
|
||||||
Name: "variants",
|
|
||||||
Subquery: exclause.Subquery{
|
|
||||||
DB: db.Get().
|
|
||||||
Model(&dbmodel.PsProductAttributeShop{}).
|
|
||||||
Select("id_product", "COUNT(*) AS variants_number").
|
|
||||||
Group("id_product"),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
{
|
||||||
Name: "favorites",
|
Name: "favorites",
|
||||||
Subquery: exclause.Subquery{
|
Subquery: exclause.Subquery{
|
||||||
DB: db.Get().
|
DB: db.DB.
|
||||||
Table("b2b_favorites").
|
Table("b2b_favorites").
|
||||||
Select(`
|
Select(`
|
||||||
product_id AS id_product,
|
product_id AS product_id,
|
||||||
COUNT(*) > 0 AS is_favorite
|
COUNT(*) > 0 AS is_favorite
|
||||||
`).
|
`).
|
||||||
Where("user_id = ?", userID).
|
Where("user_id = ?", userID).
|
||||||
Group("product_id"),
|
Group("product_id"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Name: "new_product_days",
|
||||||
|
Subquery: exclause.Subquery{
|
||||||
|
DB: db.DB.
|
||||||
|
Table("ps_configuration").
|
||||||
|
Select("CAST(value AS SIGNED) AS days").
|
||||||
|
Where("name = ?", "PS_NB_DAYS_NEW_PRODUCT"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "variants",
|
||||||
|
Subquery: exclause.Subquery{
|
||||||
|
DB: db.DB.
|
||||||
|
Table("ps_product_attribute_shop").
|
||||||
|
Select("id_product, COUNT(*) AS variants_number").
|
||||||
|
Group("id_product"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "base_products",
|
||||||
|
Subquery: exclause.Subquery{
|
||||||
|
DB: db.DB.
|
||||||
|
Table(gormcol.Field.Tab(dbmodel.PsProductShopCols.Active)+" AS ps").
|
||||||
|
Select(`
|
||||||
|
ps.id_product AS product_id,
|
||||||
|
pl.name AS name,
|
||||||
|
ps.id_category_default AS category_id,
|
||||||
|
p.reference AS reference,
|
||||||
|
sa.quantity AS quantity,
|
||||||
|
COALESCE(f.is_favorite, 0) AS is_favorite,
|
||||||
|
CASE
|
||||||
|
WHEN ps.date_add >= DATE_SUB(
|
||||||
|
NOW(),
|
||||||
|
INTERVAL COALESCE(npd.days, 20) DAY
|
||||||
|
) AND ps.active = 1
|
||||||
|
THEN 1
|
||||||
|
ELSE 0
|
||||||
|
END AS is_new
|
||||||
|
`).
|
||||||
|
Joins("JOIN "+dbmodel.PsProductCols.IDProduct.Tab()+" p ON p.id_product = ps.id_product").
|
||||||
|
Joins("JOIN ps_product_lang pl ON pl.id_product = ps.id_product AND pl.id_lang = ?", langID).
|
||||||
|
Joins("LEFT JOIN favorites f ON f.product_id = ps.id_product").
|
||||||
|
Joins("LEFT JOIN ps_stock_available sa ON sa.id_product = ps.id_product AND sa.id_product_attribute = 0").
|
||||||
|
Joins("LEFT JOIN new_product_days npd ON 1 = 1").
|
||||||
|
Where("ps.active = ?", 1).
|
||||||
|
Group("ps.id_product"),
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}).
|
}).
|
||||||
Order("ps.id_product DESC")
|
Select(`
|
||||||
|
bp.product_id AS product_id,
|
||||||
|
bp.name AS name,
|
||||||
|
pl.link_rewrite AS link_rewrite,
|
||||||
|
CONCAT(?, '/', ims.id_image, '-small_default/', pl.link_rewrite, '.webp') AS image_link,
|
||||||
|
cl.name AS category_name,
|
||||||
|
bp.reference AS reference,
|
||||||
|
COALESCE(v.variants_number, 0) AS variants_number,
|
||||||
|
bp.quantity AS quantity,
|
||||||
|
bp.is_favorite AS is_favorite,
|
||||||
|
bp.is_new AS is_new
|
||||||
|
`, config.Get().Image.ImagePrefix).
|
||||||
|
Joins("JOIN ps_product_lang pl ON pl.id_product = bp.product_id AND pl.id_lang = ?", langID).
|
||||||
|
Joins("JOIN ps_image_shop ims ON ims.id_product = bp.product_id AND ims.cover = 1").
|
||||||
|
Joins("JOIN ps_category_lang cl ON cl.id_category = bp.category_id AND cl.id_lang = ?", langID).
|
||||||
|
Joins("LEFT JOIN variants v ON v.id_product = bp.product_id").
|
||||||
|
Order("bp.product_id DESC")
|
||||||
|
|
||||||
query = query.Scopes(filt.All()...)
|
query = query.Scopes(filt.All()...)
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ info:
|
|||||||
|
|
||||||
http:
|
http:
|
||||||
method: GET
|
method: GET
|
||||||
url: "{{bas_url}}/restricted/product/list?p=1&elems=30&sort=product_id,asc&reference=~NC100"
|
url: "{{bas_url}}/restricted/product/list?p=1&elems=30&reference=~NC100"
|
||||||
params:
|
params:
|
||||||
- name: p
|
- name: p
|
||||||
value: "1"
|
value: "1"
|
||||||
@@ -16,13 +16,22 @@ http:
|
|||||||
- name: sort
|
- name: sort
|
||||||
value: product_id,asc
|
value: product_id,asc
|
||||||
type: query
|
type: query
|
||||||
|
disabled: true
|
||||||
- name: category_id_in
|
- name: category_id_in
|
||||||
value: "243"
|
value: "23"
|
||||||
type: query
|
type: query
|
||||||
disabled: true
|
disabled: true
|
||||||
- name: reference
|
- name: reference
|
||||||
value: ~NC100
|
value: ~NC100
|
||||||
type: query
|
type: query
|
||||||
|
- name: is_new_eq
|
||||||
|
value: "0"
|
||||||
|
type: query
|
||||||
|
disabled: true
|
||||||
|
- name: is_favorite_eq
|
||||||
|
value: "false"
|
||||||
|
type: query
|
||||||
|
disabled: true
|
||||||
body:
|
body:
|
||||||
type: json
|
type: json
|
||||||
data: ""
|
data: ""
|
||||||
|
|||||||
Reference in New Issue
Block a user