before parse update

This commit is contained in:
merdan 2022-09-15 17:24:06 +05:00
parent 2185f7f03c
commit 41a3552a97
2 changed files with 95 additions and 81 deletions

View File

@ -24,7 +24,7 @@ var (
mainImportWG, famAndSellerWG sync.WaitGroup
families []gm.AttributeFamily
sellers = make(map[string]gm.MarketplaceSeller)
attributesMap = make(map[string]gm.Attribute)
AttributesMap = make(map[string]gm.Attribute)
)
func StartImport(w http.ResponseWriter, route *http.Request) {
@ -81,7 +81,7 @@ func StartImport(w http.ResponseWriter, route *http.Request) {
}
for _, atrattribute := range attributes {
attributesMap[atrattribute.Code] = atrattribute
AttributesMap[atrattribute.Code] = atrattribute
}
}()
@ -226,13 +226,13 @@ func ImportProduct(product models.Product, db *gorm.DB) error {
}
attributes, mainProductFlat := prepearAttributesWithFlat(&product)
colorOption := gm.GetAttributeOption(db, attributesMap["color"].ID, product.Color)
colorOption := gm.GetAttributeOption(db, AttributesMap["color"].ID, product.Color)
mainProductFlat.Color = int(colorOption.ID)
mainProductFlat.ColorLabel = product.Color
var productImages []gm.ProductImage
attributes = append(attributes, []gm.ProductAttributeValue{
{AttributeID: attributesMap["color"].ID, IntegerValue: int(colorOption.ID)},
{AttributeID: attributesMap["meta_keywords"].ID, TextValue: keywords, Channel: "default", Locale: "tm"}}...)
{AttributeID: AttributesMap["color"].ID, IntegerValue: int(colorOption.ID)},
{AttributeID: AttributesMap["meta_keywords"].ID, TextValue: keywords, Channel: "default", Locale: "tm"}}...)
for _, element := range product.Images {
productImages = append(productImages, gm.ProductImage{Type: "cdn", Path: element})
@ -255,11 +255,11 @@ func ImportProduct(product models.Product, db *gorm.DB) error {
}
if len(product.ColorVariants) > 0 {
iproduct.SuperAttributes = append(iproduct.SuperAttributes, attributesMap["color"])
iproduct.SuperAttributes = append(iproduct.SuperAttributes, AttributesMap["color"])
}
if len(product.SizeVariants) > 0 {
iproduct.SuperAttributes = append(iproduct.SuperAttributes, attributesMap["size"])
iproduct.SuperAttributes = append(iproduct.SuperAttributes, AttributesMap["size"])
}
if len(iproduct.SuperAttributes) > 0 {
@ -299,7 +299,7 @@ func ImportProduct(product models.Product, db *gorm.DB) error {
description += "<p>" + desc.Description + "</p>"
}
colorOption := gm.GetAttributeOption(db, attributesMap["color"].ID, colorVariant.Color)
colorOption := gm.GetAttributeOption(db, AttributesMap["color"].ID, colorVariant.Color)
if len(colorVariant.SizeVariants) > 0 {
@ -307,24 +307,24 @@ func ImportProduct(product models.Product, db *gorm.DB) error {
sku := fmt.Sprintf("%s-%s-%d-col-size", colorVariant.ProductGroupID, colorVariant.ProductNumber, sizeVariant.ItemNumber)
sizeOption := gm.GetAttributeOption(db, attributesMap["size"].ID, sizeVariant.AttributeValue)
sizeOption := gm.GetAttributeOption(db, AttributesMap["size"].ID, sizeVariant.AttributeValue)
productNumber := fmt.Sprintf("%s-%d", colorVariant.ProductNumber, sizeVariant.ItemNumber)
attributes := []gm.ProductAttributeValue{
{AttributeID: attributesMap["source"].ID, TextValue: colorVariant.URLKey},
{AttributeID: attributesMap["favoritesCount"].ID, IntegerValue: colorVariant.FavoriteCount},
{AttributeID: attributesMap["sku"].ID, TextValue: sku},
{AttributeID: attributesMap["product_number"].ID, TextValue: productNumber},
{AttributeID: attributesMap["name"].ID, TextValue: colorVariant.Name, Channel: "default", Locale: "tm"},
{AttributeID: attributesMap["weight"].ID, TextValue: colorVariant.Weight},
{AttributeID: attributesMap["status"].ID, BooleanValue: true},
//{AttributeID: attributesMap["visible_individually"].ID, BooleanValue: true, Channel: "default", Locale: "tm"},
{AttributeID: attributesMap["url_key"].ID, TextValue: sku},
{AttributeID: attributesMap["meta_keywords"].ID, TextValue: keywords, Channel: "default", Locale: "tm"},
{AttributeID: attributesMap["description"].ID, TextValue: description, Channel: "default", Locale: "tm"},
{AttributeID: attributesMap["color"].ID, IntegerValue: int(colorOption.ID)},
{AttributeID: attributesMap["size"].ID, IntegerValue: int(sizeOption.ID)},
{AttributeID: AttributesMap["source"].ID, TextValue: colorVariant.URLKey},
{AttributeID: AttributesMap["favoritesCount"].ID, IntegerValue: colorVariant.FavoriteCount},
{AttributeID: AttributesMap["sku"].ID, TextValue: sku},
{AttributeID: AttributesMap["product_number"].ID, TextValue: productNumber},
{AttributeID: AttributesMap["name"].ID, TextValue: colorVariant.Name, Channel: "default", Locale: "tm"},
{AttributeID: AttributesMap["weight"].ID, TextValue: colorVariant.Weight},
{AttributeID: AttributesMap["status"].ID, BooleanValue: true},
//{AttributeID: AttributesMap["visible_individually"].ID, BooleanValue: true, Channel: "default", Locale: "tm"},
{AttributeID: AttributesMap["url_key"].ID, TextValue: sku},
{AttributeID: AttributesMap["meta_keywords"].ID, TextValue: keywords, Channel: "default", Locale: "tm"},
{AttributeID: AttributesMap["description"].ID, TextValue: description, Channel: "default", Locale: "tm"},
{AttributeID: AttributesMap["color"].ID, IntegerValue: int(colorOption.ID)},
{AttributeID: AttributesMap["size"].ID, IntegerValue: int(sizeOption.ID)},
}
//todo assign images
@ -351,8 +351,8 @@ func ImportProduct(product models.Product, db *gorm.DB) error {
if sizeVariant.Price.OriginalPrice.Value > sizeVariant.Price.DiscountedPrice.Value {
attributes = append(attributes, []gm.ProductAttributeValue{
{AttributeID: attributesMap["price"].ID, FloatValue: sizeVariant.Price.OriginalPrice.Value},
{AttributeID: attributesMap["special_price"].ID, FloatValue: sizeVariant.Price.DiscountedPrice.Value},
{AttributeID: AttributesMap["price"].ID, FloatValue: sizeVariant.Price.OriginalPrice.Value},
{AttributeID: AttributesMap["special_price"].ID, FloatValue: sizeVariant.Price.DiscountedPrice.Value},
}...)
flatVariant.Price = sizeVariant.Price.OriginalPrice.Value
@ -361,7 +361,7 @@ func ImportProduct(product models.Product, db *gorm.DB) error {
flatVariant.MaxPrice = sizeVariant.Price.OriginalPrice.Value
} else {
attributes = append(attributes, gm.ProductAttributeValue{AttributeID: attributesMap["price"].ID, FloatValue: sizeVariant.Price.OriginalPrice.Value})
attributes = append(attributes, gm.ProductAttributeValue{AttributeID: AttributesMap["price"].ID, FloatValue: sizeVariant.Price.OriginalPrice.Value})
flatVariant.Price = sizeVariant.Price.OriginalPrice.Value
flatVariant.MinPrice = sizeVariant.Price.DiscountedPrice.Value
@ -412,9 +412,9 @@ func ImportProduct(product models.Product, db *gorm.DB) error {
} else {
colorOption := gm.GetAttributeOption(db, attributesMap["color"].ID, colorVariant.Color)
colorOption := gm.GetAttributeOption(db, AttributesMap["color"].ID, colorVariant.Color)
attributes, variantFlat := collectAttributes(&colorVariant, &colorOption)
attributes = append(attributes, gm.ProductAttributeValue{AttributeID: attributesMap["meta_keywords"].ID, TextValue: keywords, Channel: "default", Locale: "tm"})
attributes = append(attributes, gm.ProductAttributeValue{AttributeID: AttributesMap["meta_keywords"].ID, TextValue: keywords, Channel: "default", Locale: "tm"})
if mainProductFlat.MinPrice > variantFlat.MinPrice || mainProductFlat.MinPrice == 0 {
mainProductFlat.MinPrice = variantFlat.MinPrice
@ -467,26 +467,26 @@ func ImportProduct(product models.Product, db *gorm.DB) error {
} else if len(product.SizeVariants) > 0 {
weight, _ := strconv.ParseFloat(product.Weight, 64)
colorOption := gm.GetAttributeOption(db, attributesMap["color"].ID, product.Color)
colorOption := gm.GetAttributeOption(db, AttributesMap["color"].ID, product.Color)
for _, sizeVariant := range product.SizeVariants {
sku := fmt.Sprintf("%s-%s-%d-size", iproduct.Sku, product.ProductNumber, sizeVariant.ItemNumber)
sizeOption := gm.GetAttributeOption(db, attributesMap["size"].ID, sizeVariant.AttributeValue)
sizeOption := gm.GetAttributeOption(db, AttributesMap["size"].ID, sizeVariant.AttributeValue)
attributes := []gm.ProductAttributeValue{
{AttributeID: attributesMap["source"].ID, TextValue: product.URLKey},
{AttributeID: attributesMap["favoritesCount"].ID, IntegerValue: product.FavoriteCount},
{AttributeID: attributesMap["sku"].ID, TextValue: sku},
{AttributeID: attributesMap["product_number"].ID, TextValue: fmt.Sprint(sizeVariant.ItemNumber)},
{AttributeID: attributesMap["name"].ID, TextValue: product.Name, Channel: "default", Locale: "tm"},
{AttributeID: attributesMap["weight"].ID, TextValue: product.Weight},
{AttributeID: attributesMap["status"].ID, BooleanValue: true},
//{AttributeID: attributesMap["visible_individually"].ID, BooleanValue: true},
{AttributeID: attributesMap["url_key"].ID, TextValue: sku},
{AttributeID: attributesMap["meta_keywords"].ID, TextValue: keywords, Channel: "default", Locale: "tm"},
{AttributeID: attributesMap["size"].ID, IntegerValue: int(sizeOption.ID)},
{AttributeID: attributesMap["description"].ID, TextValue: mainProductFlat.Description, Channel: "default", Locale: "tm"},
{AttributeID: attributesMap["color"].ID, IntegerValue: int(colorOption.ID)},
{AttributeID: AttributesMap["source"].ID, TextValue: product.URLKey},
{AttributeID: AttributesMap["favoritesCount"].ID, IntegerValue: product.FavoriteCount},
{AttributeID: AttributesMap["sku"].ID, TextValue: sku},
{AttributeID: AttributesMap["product_number"].ID, TextValue: fmt.Sprint(sizeVariant.ItemNumber)},
{AttributeID: AttributesMap["name"].ID, TextValue: product.Name, Channel: "default", Locale: "tm"},
{AttributeID: AttributesMap["weight"].ID, TextValue: product.Weight},
{AttributeID: AttributesMap["status"].ID, BooleanValue: true},
//{AttributeID: AttributesMap["visible_individually"].ID, BooleanValue: true},
{AttributeID: AttributesMap["url_key"].ID, TextValue: sku},
{AttributeID: AttributesMap["meta_keywords"].ID, TextValue: keywords, Channel: "default", Locale: "tm"},
{AttributeID: AttributesMap["size"].ID, IntegerValue: int(sizeOption.ID)},
{AttributeID: AttributesMap["description"].ID, TextValue: mainProductFlat.Description, Channel: "default", Locale: "tm"},
{AttributeID: AttributesMap["color"].ID, IntegerValue: int(colorOption.ID)},
}
flatVariant := gm.ProductFlat{
@ -510,8 +510,8 @@ func ImportProduct(product models.Product, db *gorm.DB) error {
if sizeVariant.Price.OriginalPrice.Value > sizeVariant.Price.DiscountedPrice.Value {
attributes = append(attributes, []gm.ProductAttributeValue{
{AttributeID: attributesMap["price"].ID, FloatValue: sizeVariant.Price.OriginalPrice.Value},
{AttributeID: attributesMap["special_price"].ID, FloatValue: sizeVariant.Price.DiscountedPrice.Value},
{AttributeID: AttributesMap["price"].ID, FloatValue: sizeVariant.Price.OriginalPrice.Value},
{AttributeID: AttributesMap["special_price"].ID, FloatValue: sizeVariant.Price.DiscountedPrice.Value},
}...)
flatVariant.Price = sizeVariant.Price.OriginalPrice.Value
@ -520,7 +520,7 @@ func ImportProduct(product models.Product, db *gorm.DB) error {
flatVariant.MaxPrice = sizeVariant.Price.OriginalPrice.Value
} else {
attributes = append(attributes, gm.ProductAttributeValue{AttributeID: attributesMap["price"].ID, FloatValue: sizeVariant.Price.OriginalPrice.Value})
attributes = append(attributes, gm.ProductAttributeValue{AttributeID: AttributesMap["price"].ID, FloatValue: sizeVariant.Price.OriginalPrice.Value})
flatVariant.Price = sizeVariant.Price.OriginalPrice.Value
flatVariant.MinPrice = sizeVariant.Price.DiscountedPrice.Value
@ -635,23 +635,23 @@ func collectAttributes(variant *models.Product, option *gm.AttributeOption) ([]g
}
attributes := []gm.ProductAttributeValue{
{AttributeID: attributesMap["favoritesCount"].ID, IntegerValue: variant.FavoriteCount},
{AttributeID: attributesMap["source"].ID, TextValue: variant.URLKey},
{AttributeID: attributesMap["sku"].ID, TextValue: sku},
{AttributeID: attributesMap["product_number"].ID, TextValue: variant.ProductNumber},
{AttributeID: attributesMap["name"].ID, TextValue: variant.Name, Channel: "default", Locale: "tm"},
{AttributeID: attributesMap["weight"].ID, TextValue: variant.Weight},
{AttributeID: attributesMap["status"].ID, BooleanValue: true},
{AttributeID: attributesMap["visible_individually"].ID, BooleanValue: true},
{AttributeID: attributesMap["url_key"].ID, TextValue: sku},
{AttributeID: AttributesMap["favoritesCount"].ID, IntegerValue: variant.FavoriteCount},
{AttributeID: AttributesMap["source"].ID, TextValue: variant.URLKey},
{AttributeID: AttributesMap["sku"].ID, TextValue: sku},
{AttributeID: AttributesMap["product_number"].ID, TextValue: variant.ProductNumber},
{AttributeID: AttributesMap["name"].ID, TextValue: variant.Name, Channel: "default", Locale: "tm"},
{AttributeID: AttributesMap["weight"].ID, TextValue: variant.Weight},
{AttributeID: AttributesMap["status"].ID, BooleanValue: true},
{AttributeID: AttributesMap["visible_individually"].ID, BooleanValue: true},
{AttributeID: AttributesMap["url_key"].ID, TextValue: sku},
{AttributeID: option.AttributeID, IntegerValue: int(option.ID)},
{AttributeID: attributesMap["description"].ID, TextValue: description, Channel: "default", Locale: "tm"},
{AttributeID: AttributesMap["description"].ID, TextValue: description, Channel: "default", Locale: "tm"},
}
if variant.Price.OriginalPrice.Value > variant.Price.DiscountedPrice.Value {
attributes = append(attributes, []gm.ProductAttributeValue{
{AttributeID: attributesMap["price"].ID, FloatValue: variant.Price.OriginalPrice.Value},
{AttributeID: attributesMap["special_price"].ID, FloatValue: variant.Price.DiscountedPrice.Value},
{AttributeID: AttributesMap["price"].ID, FloatValue: variant.Price.OriginalPrice.Value},
{AttributeID: AttributesMap["special_price"].ID, FloatValue: variant.Price.DiscountedPrice.Value},
}...)
flat.Price = variant.Price.OriginalPrice.Value
@ -660,7 +660,7 @@ func collectAttributes(variant *models.Product, option *gm.AttributeOption) ([]g
flat.MaxPrice = variant.Price.OriginalPrice.Value
} else {
attributes = append(attributes, gm.ProductAttributeValue{AttributeID: attributesMap["price"].ID, FloatValue: variant.Price.OriginalPrice.Value})
attributes = append(attributes, gm.ProductAttributeValue{AttributeID: AttributesMap["price"].ID, FloatValue: variant.Price.OriginalPrice.Value})
flat.Price = variant.Price.OriginalPrice.Value
flat.MinPrice = variant.Price.DiscountedPrice.Value
flat.MaxPrice = variant.Price.OriginalPrice.Value
@ -685,16 +685,16 @@ func prepearAttributesWithFlat(data *models.Product) ([]gm.ProductAttributeValue
//$desc = implode(array_map(fn($value): string => '<p>' . $value['description'] . '</p>', $data['descriptions']));
var productAttributeValues = []gm.ProductAttributeValue{
{AttributeID: attributesMap["source"].ID, TextValue: data.URLKey},
{AttributeID: attributesMap["favoritesCount"].ID, IntegerValue: data.FavoriteCount},
{AttributeID: attributesMap["sku"].ID, TextValue: data.ProductGroupID},
{AttributeID: attributesMap["product_number"].ID, TextValue: data.ProductNumber},
{AttributeID: attributesMap["name"].ID, TextValue: data.Name, Channel: "default", Locale: "tm"},
{AttributeID: attributesMap["weight"].ID, TextValue: data.Weight},
{AttributeID: attributesMap["status"].ID, BooleanValue: true},
{AttributeID: attributesMap["visible_individually"].ID, BooleanValue: true},
{AttributeID: attributesMap["url_key"].ID, TextValue: data.ProductGroupID},
{AttributeID: attributesMap["description"].ID, TextValue: description, Channel: "default", Locale: "tm"},
{AttributeID: AttributesMap["source"].ID, TextValue: data.URLKey},
{AttributeID: AttributesMap["favoritesCount"].ID, IntegerValue: data.FavoriteCount},
{AttributeID: AttributesMap["sku"].ID, TextValue: data.ProductGroupID},
{AttributeID: AttributesMap["product_number"].ID, TextValue: data.ProductNumber},
{AttributeID: AttributesMap["name"].ID, TextValue: data.Name, Channel: "default", Locale: "tm"},
{AttributeID: AttributesMap["weight"].ID, TextValue: data.Weight},
{AttributeID: AttributesMap["status"].ID, BooleanValue: true},
{AttributeID: AttributesMap["visible_individually"].ID, BooleanValue: true},
{AttributeID: AttributesMap["url_key"].ID, TextValue: data.ProductGroupID},
{AttributeID: AttributesMap["description"].ID, TextValue: description, Channel: "default", Locale: "tm"},
}
flat := gm.ProductFlat{
@ -719,8 +719,8 @@ func prepearAttributesWithFlat(data *models.Product) ([]gm.ProductAttributeValue
} else {
if data.Price.OriginalPrice.Value > data.Price.DiscountedPrice.Value {
productAttributeValues = append(productAttributeValues, []gm.ProductAttributeValue{
{AttributeID: attributesMap["price"].ID, FloatValue: data.Price.OriginalPrice.Value},
{AttributeID: attributesMap["special_price"].ID, FloatValue: data.Price.DiscountedPrice.Value},
{AttributeID: AttributesMap["price"].ID, FloatValue: data.Price.OriginalPrice.Value},
{AttributeID: AttributesMap["special_price"].ID, FloatValue: data.Price.DiscountedPrice.Value},
}...)
flat.Price = data.Price.OriginalPrice.Value
@ -729,7 +729,7 @@ func prepearAttributesWithFlat(data *models.Product) ([]gm.ProductAttributeValue
flat.MaxPrice = data.Price.OriginalPrice.Value
} else {
productAttributeValues = append(productAttributeValues, gm.ProductAttributeValue{AttributeID: attributesMap["price"].ID, FloatValue: data.Price.OriginalPrice.Value})
productAttributeValues = append(productAttributeValues, gm.ProductAttributeValue{AttributeID: AttributesMap["price"].ID, FloatValue: data.Price.OriginalPrice.Value})
flat.Price = data.Price.OriginalPrice.Value
flat.MinPrice = data.Price.OriginalPrice.Value
flat.MaxPrice = data.Price.OriginalPrice.Value
@ -747,8 +747,8 @@ func UpdateProduct(product models.Product, db *gorm.DB, productFlat gm.ProductFl
if product.Price.OriginalPrice.Value > product.Price.DiscountedPrice.Value {
//productAttributeValues = append(productAttributeValues, []gm.ProductAttributeValue{
// {AttributeID: attributesMap["price"].ID, FloatValue: data.Price.OriginalPrice.Value},
// {AttributeID: attributesMap["special_price"].ID, FloatValue: data.Price.DiscountedPrice.Value},
// {AttributeID: AttributesMap["price"].ID, FloatValue: data.Price.OriginalPrice.Value},
// {AttributeID: AttributesMap["special_price"].ID, FloatValue: data.Price.DiscountedPrice.Value},
//}...)
if productFlat.Price != product.Price.OriginalPrice.Value {
productFlat.Price = product.Price.OriginalPrice.Value
@ -821,13 +821,13 @@ func UpdateProduct(product models.Product, db *gorm.DB, productFlat gm.ProductFl
// FavoritesCount: uint(data.FavoriteCount),
// }
// return []gm.ProductAttributeValue{
// {AttributeID: attributesMap["favoritesCount"].ID, IntegerValue: data.FavoriteCount},
// {AttributeID: attributesMap["source"].ID, TextValue: data.URLKey},
// {AttributeID: attributesMap["product_number"].ID, TextValue: data.ProductNumber},
// {AttributeID: attributesMap["name"].ID, TextValue: data.Name, Channel: "default", Locale: "tm"},
// {AttributeID: attributesMap["weight"].ID, TextValue: data.Weight},
// {AttributeID: attributesMap["status"].ID, BooleanValue: true},
// {AttributeID: attributesMap["visible_individually"].ID, BooleanValue: true},
// {AttributeID: attributesMap["description"].ID, TextValue: description, Channel: "default", Locale: "tm"},
// {AttributeID: AttributesMap["favoritesCount"].ID, IntegerValue: data.FavoriteCount},
// {AttributeID: AttributesMap["source"].ID, TextValue: data.URLKey},
// {AttributeID: AttributesMap["product_number"].ID, TextValue: data.ProductNumber},
// {AttributeID: AttributesMap["name"].ID, TextValue: data.Name, Channel: "default", Locale: "tm"},
// {AttributeID: AttributesMap["weight"].ID, TextValue: data.Weight},
// {AttributeID: AttributesMap["status"].ID, BooleanValue: true},
// {AttributeID: AttributesMap["visible_individually"].ID, BooleanValue: true},
// {AttributeID: AttributesMap["description"].ID, TextValue: description, Channel: "default", Locale: "tm"},
// },flat
//}

View File

@ -58,6 +58,20 @@ func ParseLink(w http.ResponseWriter, route *http.Request) {
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
helper.Error(err)
if len(AttributesMap) == 0 {
var attributes, err = gm.GetAttributes(baza)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
for _, atrattribute := range attributes {
AttributesMap[atrattribute.Code] = atrattribute
}
}
err = ImportProduct(jsonProduct, baza)
} else if err == nil {
err = UpdateProduct(jsonProduct, baza, productFlat)