diff --git a/controllers/ImportController.go b/controllers/ImportController.go index 61f75a6..bef025b 100644 --- a/controllers/ImportController.go +++ b/controllers/ImportController.go @@ -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 += "
" + desc.Description + "
" } - 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 => '' . $value['description'] . '
', $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 //} diff --git a/controllers/ParseController.go b/controllers/ParseController.go index 02559de..fbcbe40 100644 --- a/controllers/ParseController.go +++ b/controllers/ParseController.go @@ -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)