Procházet zdrojové kódy

Stop throwing "exists" error on public forms

Kailash Nadh před 4 roky
rodič
revize
dd0c124b0e
2 změnil soubory, kde provedl 9 přidání a 3 odebrání
  1. 1 1
      cmd/public.go
  2. 8 2
      cmd/subscribers.go

+ 1 - 1
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)))
 	}

+ 8 - 2
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)