fix products listing

This commit is contained in:
2026-03-27 23:17:21 +01:00
parent ec05101037
commit 9ec329b1d6
429 changed files with 9816 additions and 3774 deletions

View File

@@ -0,0 +1,109 @@
package attributerepo
import (
"git.ma-al.com/goc_daniel/b2b/app/db"
"git.ma-al.com/goc_daniel/b2b/app/model/dbmodel"
)
type AttributeWithColor struct {
ID uint
Name string
Color string
}
type AttributeGroupWithAttrs struct {
GroupName string
Attrs map[uint]AttributeWithColor
}
type UIAttributeRepo interface {
GetAttributeGroupsWithAttributes(groupIDs []uint, attrIDs []uint, idLang uint) (map[uint]AttributeGroupWithAttrs, error)
}
type AttributeRepo struct{}
func New() UIAttributeRepo {
return &AttributeRepo{}
}
func (r *AttributeRepo) GetAttributeGroupsWithAttributes(groupIDs []uint, attrIDs []uint, idLang uint) (map[uint]AttributeGroupWithAttrs, error) {
result := make(map[uint]AttributeGroupWithAttrs)
if len(groupIDs) == 0 && len(attrIDs) == 0 {
return result, nil
}
if len(attrIDs) > 0 {
type attrResult struct {
IDAttribute int32
IDAttributeGroup int32
GroupName string
AttrName string
Color string
}
var attrs []attrResult
if err := db.Get().
Model(dbmodel.PsAttribute{}).
Select(`
ps_attribute.id_attribute,
ps_attribute.id_attribute_group,
COALESCE(ps_attribute_group_lang.name, '') as group_name,
COALESCE(ps_attribute_lang.name, '') as attr_name,
ps_attribute.color
`).
Joins("LEFT JOIN ps_attribute_lang ON ps_attribute_lang.id_attribute = ps_attribute.id_attribute AND ps_attribute_lang.id_lang = ?", idLang).
Joins("LEFT JOIN ps_attribute_group_lang ON ps_attribute_group_lang.id_attribute_group = ps_attribute.id_attribute_group AND ps_attribute_group_lang.id_lang = ?", idLang).
Where("ps_attribute.id_attribute IN ?", attrIDs).
Scan(&attrs).Error; err != nil {
return nil, err
}
for _, a := range attrs {
if _, exists := result[uint(a.IDAttributeGroup)]; !exists {
result[uint(a.IDAttributeGroup)] = AttributeGroupWithAttrs{
GroupName: a.GroupName,
Attrs: make(map[uint]AttributeWithColor),
}
}
result[uint(a.IDAttributeGroup)].Attrs[uint(a.IDAttribute)] = AttributeWithColor{
ID: uint(a.IDAttribute),
Name: a.AttrName,
Color: a.Color,
}
}
}
if len(groupIDs) > 0 {
type groupResult struct {
IDAttributeGroup int32
GroupName string
}
var groups []groupResult
if err := db.Get().
Model(dbmodel.PsAttributeGroupLang{}).
Select("ps_attribute_group_lang.id_attribute_group, COALESCE(ps_attribute_group_lang.name, '') as group_name").
Where("ps_attribute_group_lang.id_attribute_group IN ?", groupIDs).
Where("ps_attribute_group_lang.id_lang = ?", idLang).
Scan(&groups).Error; err != nil {
return nil, err
}
for _, g := range groups {
if existing, ok := result[uint(g.IDAttributeGroup)]; ok {
if g.GroupName != "" {
existing.GroupName = g.GroupName
result[uint(g.IDAttributeGroup)] = existing
}
} else {
result[uint(g.IDAttributeGroup)] = AttributeGroupWithAttrs{
GroupName: g.GroupName,
Attrs: make(map[uint]AttributeWithColor),
}
}
}
}
return result, nil
}