75 lines
2.2 KiB
Go
75 lines
2.2 KiB
Go
package ProductDescriptionRepo
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"git.ma-al.com/goc_daniel/b2b/app/db"
|
|
"git.ma-al.com/goc_daniel/b2b/app/model"
|
|
)
|
|
|
|
type UIProductDescriptionRepo interface {
|
|
GetProductDescription(productID uint, productShopID uint, productLangID uint) (*model.ProductDescription, error)
|
|
CreateIfDoesNotExist(productID uint, productShopID uint, productLangID uint) error
|
|
UpdateFields(productID uint, productShopID uint, productLangID uint, updates map[string]string) error
|
|
}
|
|
|
|
type ProductDescriptionRepo struct{}
|
|
|
|
func New() UIProductDescriptionRepo {
|
|
return &ProductDescriptionRepo{}
|
|
}
|
|
|
|
// We assume that any user has access to all product descriptions
|
|
func (r *ProductDescriptionRepo) GetProductDescription(productID uint, productShopID uint, productLangID uint) (*model.ProductDescription, error) {
|
|
var ProductDescription model.ProductDescription
|
|
|
|
err := db.DB.
|
|
Table("ps_product_lang").
|
|
Where("id_product = ? AND id_shop = ? AND id_lang = ?", productID, productShopID, productLangID).
|
|
First(&ProductDescription).Error
|
|
if err != nil {
|
|
return nil, fmt.Errorf("database error: %w", err)
|
|
}
|
|
|
|
return &ProductDescription, nil
|
|
}
|
|
|
|
// If it doesn't exist, returns an error.
|
|
func (r *ProductDescriptionRepo) CreateIfDoesNotExist(productID uint, productShopID uint, productLangID uint) error {
|
|
record := model.ProductDescription{
|
|
ProductID: productID,
|
|
ShopID: productShopID,
|
|
LangID: productLangID,
|
|
}
|
|
|
|
err := db.DB.
|
|
Table("ps_product_lang").
|
|
Where("id_product = ? AND id_shop = ? AND id_lang = ?", productID, productShopID, productLangID).
|
|
FirstOrCreate(&record).Error
|
|
if err != nil {
|
|
return fmt.Errorf("database error: %w", err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (r *ProductDescriptionRepo) UpdateFields(productID uint, productShopID uint, productLangID uint, updates map[string]string) error {
|
|
if len(updates) == 0 {
|
|
return nil
|
|
}
|
|
updatesIface := make(map[string]interface{}, len(updates))
|
|
for k, v := range updates {
|
|
updatesIface[k] = v
|
|
}
|
|
|
|
err := db.DB.
|
|
Table("ps_product_lang").
|
|
Where("id_product = ? AND id_shop = ? AND id_lang = ?", productID, productShopID, productLangID).
|
|
Updates(updatesIface).Error
|
|
if err != nil {
|
|
return fmt.Errorf("database error: %w", err)
|
|
}
|
|
|
|
return nil
|
|
}
|