fix products listing
This commit is contained in:
95
app/repos/featureRepo/featureRepo.go
Normal file
95
app/repos/featureRepo/featureRepo.go
Normal file
@@ -0,0 +1,95 @@
|
||||
package featurerepo
|
||||
|
||||
import (
|
||||
"git.ma-al.com/goc_daniel/b2b/app/db"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/model/dbmodel"
|
||||
)
|
||||
|
||||
type FeatureGroupWithValues struct {
|
||||
FeatureName string
|
||||
Values map[uint]string
|
||||
}
|
||||
|
||||
type UIFeatureRepo interface {
|
||||
GetFeaturesWithValues(featureIDs []uint, featureValueIDs []uint, idLang uint) (map[uint]FeatureGroupWithValues, error)
|
||||
}
|
||||
|
||||
type FeatureRepo struct{}
|
||||
|
||||
func New() UIFeatureRepo {
|
||||
return &FeatureRepo{}
|
||||
}
|
||||
|
||||
func (r *FeatureRepo) GetFeaturesWithValues(featureIDs []uint, featureValueIDs []uint, idLang uint) (map[uint]FeatureGroupWithValues, error) {
|
||||
result := make(map[uint]FeatureGroupWithValues)
|
||||
|
||||
if len(featureIDs) == 0 && len(featureValueIDs) == 0 {
|
||||
return result, nil
|
||||
}
|
||||
|
||||
if len(featureValueIDs) > 0 {
|
||||
type valueResult struct {
|
||||
IDFeatureValue int32
|
||||
IDFeature int32
|
||||
Value string
|
||||
}
|
||||
|
||||
var values []valueResult
|
||||
if err := db.Get().
|
||||
Model(dbmodel.PsFeatureValueLang{}).
|
||||
Select(`
|
||||
ps_feature_value_lang.id_feature_value,
|
||||
ps_feature_value.id_feature,
|
||||
COALESCE(ps_feature_value_lang.value, '') as value
|
||||
`).
|
||||
Joins("LEFT JOIN ps_feature_value ON ps_feature_value.id_feature_value = ps_feature_value_lang.id_feature_value").
|
||||
Where("ps_feature_value_lang.id_lang = ?", idLang).
|
||||
Where("ps_feature_value_lang.id_feature_value IN ?", featureValueIDs).
|
||||
Scan(&values).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, v := range values {
|
||||
if _, exists := result[uint(v.IDFeature)]; !exists {
|
||||
result[uint(v.IDFeature)] = FeatureGroupWithValues{
|
||||
FeatureName: v.Value,
|
||||
Values: make(map[uint]string),
|
||||
}
|
||||
}
|
||||
result[uint(v.IDFeature)].Values[uint(v.IDFeatureValue)] = v.Value
|
||||
}
|
||||
}
|
||||
|
||||
if len(featureIDs) > 0 {
|
||||
type featureResult struct {
|
||||
IDFeature int32
|
||||
FeatureName string
|
||||
}
|
||||
|
||||
var features []featureResult
|
||||
if err := db.Get().
|
||||
Model(dbmodel.PsFeatureLang{}).
|
||||
Select("ps_feature_lang.id_feature, COALESCE(ps_feature_lang.name, '') as feature_name").
|
||||
Where("ps_feature_lang.id_feature IN ?", featureIDs).
|
||||
Where("ps_feature_lang.id_lang = ?", idLang).
|
||||
Scan(&features).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, f := range features {
|
||||
if existing, ok := result[uint(f.IDFeature)]; ok {
|
||||
if f.FeatureName != "" {
|
||||
existing.FeatureName = f.FeatureName
|
||||
result[uint(f.IDFeature)] = existing
|
||||
}
|
||||
} else {
|
||||
result[uint(f.IDFeature)] = FeatureGroupWithValues{
|
||||
FeatureName: f.FeatureName,
|
||||
Values: make(map[uint]string),
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
Reference in New Issue
Block a user