48 lines
1.1 KiB
Go
48 lines
1.1 KiB
Go
package repository
|
|
|
|
import (
|
|
"crypto/sha3"
|
|
"fmt"
|
|
"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 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
|
|
}
|
|
|
|
result = db.Create(&models.Url{Longurl: longURL, Shorturl: shortURL})
|
|
|
|
if result.Error != nil {
|
|
return "", result.Error
|
|
}
|
|
return shortURL, nil
|
|
}
|