changeset 2548:6b34d0fb4498

Improve user facing error messages for stretch area generation
author Tom Gottfried <tom@intevation.de>
date Thu, 07 Mar 2019 20:03:43 +0100
parents 5afca5bc1d7a
children 9bf6b767a56a
files pkg/imports/bn.go pkg/imports/errors.go pkg/imports/st.go
diffstat 3 files changed, 52 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/imports/bn.go	Thu Mar 07 18:05:20 2019 +0100
+++ b/pkg/imports/bn.go	Thu Mar 07 20:03:43 2019 +0100
@@ -281,7 +281,7 @@
 	).Scan(&nid)
 	if err != nil {
 		feedback.Warn("Failed to insert '%s' into database", bn.OBJNAM)
-		feedback.Warn("%v", err)
+		feedback.Warn(handleError(err).Error())
 		return nil
 	}
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pkg/imports/errors.go	Thu Mar 07 20:03:43 2019 +0100
@@ -0,0 +1,50 @@
+// This is Free Software under GNU Affero General Public License v >= 3.0
+// without warranty, see README.md and license for details.
+//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// License-Filename: LICENSES/AGPL-3.0.txt
+//
+// Copyright (C) 2019 by via donau
+//   – Österreichische Wasserstraßen-Gesellschaft mbH
+// Software engineering by Intevation GmbH
+//
+// Author(s):
+//  * Tom Gottfried <tom.gottfried@intevation.de>
+
+package imports
+
+import (
+	"strings"
+
+	"github.com/jackc/pgx"
+)
+
+func handleError(err error) error {
+	switch e := err.(type) {
+	case pgx.PgError:
+		return dbError(e)
+	}
+	return err
+}
+
+// Handle PostgreSQL error codes
+const (
+	noDataFound = "P0002"
+)
+
+type dbError pgx.PgError
+
+func (err dbError) Error() string {
+	switch err.Code {
+	case noDataFound:
+		// Most recent line from stacktrace contains name of failed function
+		recent := strings.SplitN(err.Where, "\n", 1)[0]
+		switch {
+		case strings.Contains(recent, "isrsrange_points"):
+			return "No distance mark found for at least one given ISRS Location Code"
+		case strings.Contains(recent, "isrsrange_axis"):
+			return "No contiguous axis found between given ISRS Location Codes"
+		}
+	}
+	return "Unexpected database error: " + err.Message
+}
--- a/pkg/imports/st.go	Thu Mar 07 18:05:20 2019 +0100
+++ b/pkg/imports/st.go	Thu Mar 07 20:03:43 2019 +0100
@@ -192,7 +192,7 @@
 		st.Date.Time,
 		st.Source,
 	).Scan(&id); err != nil {
-		return nil, err
+		return nil, handleError(err)
 	}
 
 	// store the associated countries.