go_service/controllers/ParseController.go

85 lines
1.7 KiB
Go

package controller
import (
gm "db_service/gorm_models"
helper "db_service/pkg"
"db_service/repositories"
"encoding/json"
"fmt"
"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 {
helper.Error(err)
return
}
if productFlat.Sku == "" {
err = ImportProduct(jsonProduct, baza)
} else {
err = UpdateProduct(jsonProduct, baza, productFlat)
}
if err != nil {
helper.Error(err)
return
}
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)
http.Error(w, fmt.Sprintf("end import took %s", elapsed), http.StatusOK)
}