From dd0c124b0e0cad7f032606e4605bdefa6a70279d Mon Sep 17 00:00:00 2001 From: Kailash Nadh Date: Sun, 31 Jan 2021 13:38:02 +0530 Subject: [PATCH] Stop throwing "exists" error on public forms --- cmd/public.go | 2 +- cmd/subscribers.go | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/cmd/public.go b/cmd/public.go index c553326..a21e1b2 100644 --- a/cmd/public.go +++ b/cmd/public.go @@ -285,7 +285,7 @@ func handleSubscriptionForm(c echo.Context) error { // Insert the subscriber into the DB. req.Status = models.SubscriberStatusEnabled req.ListUUIDs = pq.StringArray(req.SubListUUIDs) - if _, err := insertSubscriber(req.SubReq, app); err != nil { + if _, err := insertSubscriber(req.SubReq, app); err != nil && err != errSubscriberExists { return c.Render(http.StatusInternalServerError, tplMessage, makeMsgTpl(app.i18n.T("public.errorTitle"), "", fmt.Sprintf("%s", err.(*echo.HTTPError).Message))) } diff --git a/cmd/subscribers.go b/cmd/subscribers.go index 54fa53e..b36703c 100644 --- a/cmd/subscribers.go +++ b/cmd/subscribers.go @@ -5,6 +5,7 @@ import ( "database/sql" "encoding/csv" "encoding/json" + "errors" "fmt" "net/http" "net/url" @@ -67,6 +68,8 @@ var ( } subQuerySortFields = []string{"email", "name", "created_at", "updated_at"} + + errSubscriberExists = errors.New("subscriber already exists") ) // handleGetSubscriber handles the retrieval of a single subscriber by ID. @@ -272,6 +275,10 @@ func handleCreateSubscriber(c echo.Context) error { // Insert the subscriber into the DB. sub, err := insertSubscriber(req, app) if err != nil { + if err == errSubscriberExists { + return echo.NewHTTPError(http.StatusBadRequest, app.i18n.T("subscribers.emailExists")) + } + return err } @@ -630,8 +637,7 @@ func insertSubscriber(req subimporter.SubReq, app *App) (models.Subscriber, erro req.ListUUIDs) if err != nil { if pqErr, ok := err.(*pq.Error); ok && pqErr.Constraint == "subscribers_email_key" { - return req.Subscriber, - echo.NewHTTPError(http.StatusBadRequest, app.i18n.T("subscribers.emailExists")) + return req.Subscriber, errSubscriberExists } app.log.Printf("error inserting subscriber: %v", err)