From e2d862f2f67028ca3439d7ac303c18572fb34942 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Guillot?= Date: Fri, 15 Mar 2024 18:17:13 -0700 Subject: [PATCH] Display an error message on edit feed page when the feed URL is not unique --- internal/api/feed.go | 2 +- internal/ui/feed_update.go | 2 +- internal/validator/feed.go | 6 +++++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/internal/api/feed.go b/internal/api/feed.go index 33973402..3bcc2edc 100644 --- a/internal/api/feed.go +++ b/internal/api/feed.go @@ -115,7 +115,7 @@ func (h *handler) updateFeed(w http.ResponseWriter, r *http.Request) { return } - if validationErr := validator.ValidateFeedModification(h.store, userID, &feedModificationRequest); validationErr != nil { + if validationErr := validator.ValidateFeedModification(h.store, userID, originalFeed.ID, &feedModificationRequest); validationErr != nil { json.BadRequest(w, r, validationErr.Error()) return } diff --git a/internal/ui/feed_update.go b/internal/ui/feed_update.go index db5600ae..52cdad3d 100644 --- a/internal/ui/feed_update.go +++ b/internal/ui/feed_update.go @@ -65,7 +65,7 @@ func (h *handler) updateFeed(w http.ResponseWriter, r *http.Request) { UrlRewriteRules: model.OptionalString(feedForm.UrlRewriteRules), } - if validationErr := validator.ValidateFeedModification(h.store, loggedUser.ID, feedModificationRequest); validationErr != nil { + if validationErr := validator.ValidateFeedModification(h.store, loggedUser.ID, feed.ID, feedModificationRequest); validationErr != nil { view.Set("errorMessage", validationErr.Translate(loggedUser.Language)) html.OK(w, r, view.Render("edit_feed")) return diff --git a/internal/validator/feed.go b/internal/validator/feed.go index 25f7f1fc..6a353892 100644 --- a/internal/validator/feed.go +++ b/internal/validator/feed.go @@ -39,7 +39,7 @@ func ValidateFeedCreation(store *storage.Storage, userID int64, request *model.F } // ValidateFeedModification validates feed modification. -func ValidateFeedModification(store *storage.Storage, userID int64, request *model.FeedModificationRequest) *locale.LocalizedError { +func ValidateFeedModification(store *storage.Storage, userID, feedID int64, request *model.FeedModificationRequest) *locale.LocalizedError { if request.FeedURL != nil { if *request.FeedURL == "" { return locale.NewLocalizedError("error.feed_url_not_empty") @@ -48,6 +48,10 @@ func ValidateFeedModification(store *storage.Storage, userID int64, request *mod if !IsValidURL(*request.FeedURL) { return locale.NewLocalizedError("error.invalid_feed_url") } + + if store.AnotherFeedURLExists(userID, feedID, *request.FeedURL) { + return locale.NewLocalizedError("error.feed_already_exists") + } } if request.SiteURL != nil {