This commit is contained in:
Daniel Goc
2026-03-20 09:57:20 +01:00
parent 884e15bb8a
commit 0d29d8f6a2
2 changed files with 32 additions and 33 deletions

View File

@@ -62,7 +62,7 @@ type Product struct {
DeliveryDays uint `gorm:"column:delivery_days" json:"delivery_days" form:"delivery_days"`
}
type ProductInList struct {
ID uint `gorm:"column:id_product;primaryKey" json:"product_id" form:"product_id"`
ProductID uint `gorm:"column:ID;primaryKey" json:"product_id" form:"product_id"`
Name string `gorm:"column:name" json:"name" form:"name"`
ImageID uint `gorm:"column:id_image"`
LinkRewrite string `gorm:"column:link_rewrite"`

View File

@@ -21,33 +21,6 @@ func (repo *ListProductsRepo) GetListing(id_shop uint, id_lang uint, p find.Pagi
var listing []model.ProductInList
var total int64
// Apply filters here
q := db.DB.Raw(`
SELECT
ps_product.id_product AS ID,
ps_product_lang.name AS Name,
ps_product.active AS Active,
ps_product_lang.link_rewrite AS LinkRewrite,
COALESCE (
ps_image_shop.id_image, any_image.id_image
) AS ImageID
FROM ps_product
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 = ?
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
LEFT JOIN (
SELECT id_product, MIN(id_image) AS id_image
FROM ps_image
GROUP BY id_product
) any_image
ON ps_product.id_product = any_image.id_product`,
id_shop, id_lang, id_shop)
// var resultIDs []uint
// q := db.DB.
// // SQL_CALC_FOUND_ROWS is a neat trick which works on MariaDB and
@@ -62,15 +35,41 @@ func (repo *ListProductsRepo) GetListing(id_shop uint, id_lang uint, p find.Pagi
// Limit(p.Limit()).
// Offset(p.Offset())
err := q.Count(&total).Error
err := db.DB.Raw(`
SELECT
ps_product.id_product AS ID,
ps_product_lang.name AS name,
ps_product.active AS active,
ps_product_lang.link_rewrite AS link_rewrite,
COALESCE (
ps_image_shop.id_image, any_image.id_image
) AS id_image
FROM ps_product
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 = ?
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
LEFT JOIN (
SELECT id_product, MIN(id_image) AS id_image
FROM ps_image
GROUP BY id_product
) any_image
ON ps_product.id_product = any_image.id_product
LIMIT ? OFFSET ?`,
id_shop, id_lang, id_shop, p.Limit(), p.Offset()).
Scan(&listing).Error
if err != nil {
return find.Found[model.ProductInList]{}, err
}
err = q.
Limit(p.Limit()).
Offset(p.Offset()).
Scan(&listing).Error
err = db.DB.Raw(`
SELECT COUNT(*)
FROM ps_product`).
Scan(&total).Error
if err != nil {
return find.Found[model.ProductInList]{}, err
}