package controller import ( gm "db_service/gorm_models" helper "db_service/pkg" "db_service/repositories" "encoding/json" "errors" "gorm.io/driver/mysql" "gorm.io/gorm" "log" "net/http" "os" "strconv" "time" ) func ParseLink(w http.ResponseWriter, route *http.Request) { start := time.Now() link := route.URL.Query().Get("url") helper.Info("link: ", link) linkParser := repositories.NewLinkParser(link) //todo product, err := linkParser.ParseLink() if err != nil { w.WriteHeader(http.StatusInternalServerError) json.NewEncoder(w).Encode(map[string]string{ "msg": err.Error(), }) return } jsonProduct, err := linkParser.GetProductDetailWithOptions(product.ID, product.ProductGroupID) if err != nil { helper.Error(err) return } baza, err := gorm.Open(mysql.Open(os.Getenv("database_url")), &gorm.Config{}) if err != nil { helper.Error(err) return } var productFlat gm.ProductFlat err = baza.Preload("Variants"). //Preload("Product"). //Preload("Proudct.AttributeValues","attribute_id in(11,13)"). First(&productFlat, "sku = ?", jsonProduct.ProductGroupID).Error 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) w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(map[string]string{ "msg": "Link parsed successfully", "productGroupId": strconv.Itoa(product.ProductGroupID), }) elapsed := time.Since(start) log.Printf("end parse took %s", elapsed) return } if err != nil { helper.Error(err) return } elapsed := time.Since(start) log.Printf("end parse took %s", elapsed) w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(map[string]string{ "msg": "Link parsed successfully", "productGroupId": strconv.Itoa(product.ProductGroupID), }) }