Files
url-short/repository/CrearUrl.go
fede e9566dcc62
All checks were successful
Build Urlshort / publish (push) Successful in 1m29s
dev (#1)
Reviewed-on: #1
Co-authored-by: fede <federico.nicolas.polidoro@gmail.com>
Co-committed-by: fede <federico.nicolas.polidoro@gmail.com>
2026-03-18 16:33:48 -03:00

61 lines
1.4 KiB
Go

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 = rand.Int64()
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
}