diff pkg/imports/errors.go @ 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
children 1cb6676d1510
line wrap: on
line diff
--- /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
+}