This commit is contained in:
2026-03-25 02:23:12 +01:00
parent c13365916c
commit 0f21ed1f81
6 changed files with 151 additions and 119 deletions

View File

@@ -1,10 +1,8 @@
package listProductsRepo
import (
"git.ma-al.com/goc_daniel/b2b/app/config"
"git.ma-al.com/goc_daniel/b2b/app/db"
"git.ma-al.com/goc_daniel/b2b/app/model"
constdata "git.ma-al.com/goc_daniel/b2b/app/utils/const_data"
"git.ma-al.com/goc_daniel/b2b/app/utils/query/filters"
"git.ma-al.com/goc_daniel/b2b/app/utils/query/find"
)
@@ -23,43 +21,44 @@ func (repo *ListProductsRepo) GetListing(id_lang uint, p find.Paging, filt *filt
var listing []model.ProductInList
var total int64
subQuery := db.DB.
Table("ps_image").
Select("id_product, MIN(id_image) AS id_image").
Group("id_product")
err := db.DB.
Table("ps_product").
query := db.Get().
Table("ps_product_shop AS ps").
Select(`
ps_product.id_product AS product_id,
ps_product_lang.name AS name,
ps_product.active AS active,
ps_product_lang.link_rewrite AS link_rewrite,
COALESCE(CONCAT( ?, '/', ps_image_shop.id_image, '-small_default/', ps_product_lang.link_rewrite, '.webp'), CONCAT( ?, '/', any_image.id_image, '-small_default/', ps_product_lang.link_rewrite, '.webp')) AS id_image
`, config.Get().Image.ImagePrefix, config.Get().Image.ImagePrefix).
Joins(`
LEFT JOIN ps_product_lang
ON ps_product_lang.id_product = ps_product.id_product
AND ps_product_lang.id_shop = ?
AND ps_product_lang.id_lang = ?
`, constdata.SHOP_ID, id_lang).
Joins(`
LEFT JOIN ps_image_shop
ON ps_image_shop.id_product = ps_product.id_product
AND ps_image_shop.id_shop = ?
AND ps_image_shop.cover = 1
`, constdata.SHOP_ID).
Joins("LEFT JOIN (?) AS any_image ON ps_product.id_product = any_image.id_product", subQuery).
Limit(p.Limit()).
Offset(p.Offset()).
Scan(&listing).Error
ps.id_product AS product_id,
pl.name AS name,
pl.link_rewrite AS link_rewrite,
CONCAT('https://www.naluconcept.com', '/', ims.id_image, '-small_default/', pl.link_rewrite, '.webp') AS image_link,
cl.name AS category_name,
p.reference AS reference,
COUNT(DISTINCT pas.id_product_attribute) AS variants_number,
sa.quantity AS quantity
`).
Joins("JOIN ps_product p ON p.id_product = ps.id_product").
Joins("JOIN ps_category_product cp ON ps.id_product = cp.id_product").
Joins("JOIN ps_product_lang pl ON pl.id_product = ps.id_product AND pl.id_lang = ?", id_lang).
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 = ?", id_lang).
Joins("LEFT JOIN ps_product_attribute_shop pas ON pas.id_product = cp.id_product").
Joins("LEFT JOIN ps_stock_available sa ON sa.id_product = ps.id_product").
Where("ps.active = ?", 1).
Group("cp.id_product")
// Apply all filters
if filt != nil {
filt.ApplyAll(query)
}
// run counter first as query is without limit and offset
err := query.Count(&total).Error
if err != nil {
return find.Found[model.ProductInList]{}, err
}
err = db.DB.
Table("ps_product").
Count(&total).Error
err = query.
Order("ps.id_product DESC").
Limit(p.Limit()).
Offset(p.Offset()).
Scan(&listing).Error
if err != nil {
return find.Found[model.ProductInList]{}, err
}