diff --git a/repository/RecuperarUrl.go b/repository/RecuperarUrl.go new file mode 100644 index 0000000..200b0ed --- /dev/null +++ b/repository/RecuperarUrl.go @@ -0,0 +1,23 @@ +package repository + +import ( + "strconv" + "url-short/models" + + "gorm.io/gorm" +) + +func RecuperarUrl(shortUrl string, db *gorm.DB) (string, error) { + + var url models.Url + i, err := strconv.ParseInt(shortUrl, 10, 64); + if err != nil { + return "", err + } + result := db.Where(&models.Url{Shorturl: i}).First(&url) + + if result.Error != nil { + return "", result.Error + } + return url.Longurl, nil +} diff --git a/routes/url.go b/routes/url.go index fe8814c..8030623 100644 --- a/routes/url.go +++ b/routes/url.go @@ -3,31 +3,42 @@ package routes import ( "encoding/json" "net/http" + "strings" "url-short/dto" "url-short/repository" "gorm.io/gorm" ) func Url(w http.ResponseWriter, r *http.Request, db *gorm.DB) { - if r.Method == http.MethodPost { - var reqBody dto.ReqBody + switch r.Method { + case http.MethodPost: + var reqBody dto.ReqBody - err := json.NewDecoder(r.Body).Decode(&reqBody) - if err != nil { - http.Error(w, "Error: ", http.StatusBadRequest) - return - } + err := json.NewDecoder(r.Body).Decode(&reqBody) + if err != nil { + http.Error(w, "Error: ", http.StatusBadRequest) + return + } - shortUrl, err := repository.CrearUrl(reqBody.LongUrl, db) - if err != nil { - http.Error(w, "Error: "+err.Error(), http.StatusBadRequest) - } - w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(map[string]string{ - "shortUrl": shortUrl, - }) - }else{ - http.Error(w, "404", http.StatusBadGateway); - } + shortUrl, err := repository.CrearUrl(reqBody.LongUrl, db) + if err != nil { + http.Error(w, "Error: "+err.Error(), http.StatusBadRequest) + } + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(map[string]string{ + "shortUrl": shortUrl, + }) + case http.MethodGet: + var paths = strings.Split(r.URL.Path, "/") + + longUrl, err := repository.RecuperarUrl(paths[len(paths)-1], db) + if err != nil { + http.Error(w, "Error: "+err.Error(), http.StatusBadRequest) + } + http.Redirect(w, r, longUrl, http.StatusPermanentRedirect) + + default: + http.Error(w, "404", http.StatusBadGateway) + } }