package repository import ( "fmt" "math/rand/v2" "url-short/models" "gorm.io/gorm" ) func CrearUrl(longURL string, db *gorm.DB) (string, error) { // checkeamos por longurl repetida counturl := int64(0) result := db.Model(&models.Url{}).Where("longurl = ?", longURL).Count(&counturl) if result.Error != nil { return "", result.Error } if counturl != 0 { // println(1) var short models.Url result = db.Model(&short).Where("longurl = ?", longURL).Select("shorturl").First(&short) if result.Error != nil { return "", result.Error } return fmt.Sprintf("%d", short.Shorturl), nil } // shortURL := base64.StdEncoding.EncodeToString([]byte(longURL))[:10] // sha := sha3.New224() // sha.Write([]byte(longURL)) // shortURL := fmt.Sprintf("%x", sha.Sum(nil))[:10] // result = db.Model(&models.Url{}).Where("shorturl = ?", shortURL).Count(&counturl) // if result.Error != nil { // return "", result.Error // } // if counturl != 0 { // return shortURL, nil // } var url models.Url for { url.Shorturl = int64(rand.Uint64()) result = db.Model(&models.Url{}).Where("shorturl = ?", url.Shorturl).Count(&counturl) if result.Error != nil { return "", result.Error } if counturl == 0 { break } } result = db.Create(&models.Url{Longurl: longURL, Shorturl: url.Shorturl}).Scan(&url) shortURL := fmt.Sprintf("%d", url.Shorturl) if result.Error != nil { return "", result.Error } return shortURL, nil }