From c55b1fa7e4548bc579decd84752bade76c6a30f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorben=20G=C3=BCnther?= Date: Mon, 8 Nov 2021 11:29:37 +0100 Subject: [PATCH] Add custom error handling Will enable clients to better handle different errors. --- database/error.go | 20 ++++++++++++++++++++ graph/schema.resolvers.go | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 database/error.go diff --git a/database/error.go b/database/error.go new file mode 100644 index 0000000..a8a6360 --- /dev/null +++ b/database/error.go @@ -0,0 +1,20 @@ +package database + +import ( + "errors" + + "github.com/lib/pq" +) + +// CheckErrorCode returns - depending on the postgres error code - a custom error +// that can be easier parsed and handled +func CheckErrorCode(err error) error { + // https://www.postgresql.org/docs/current/errcodes-appendix.html + if err, ok := err.(*pq.Error); ok { + // duplicate key value violates unique constraint: 23505 unique_violation + if err.Code == "23505" { + return errors.New("NotUnique") + } + } + return err +} diff --git a/graph/schema.resolvers.go b/graph/schema.resolvers.go index 067f761..cbf4fb9 100644 --- a/graph/schema.resolvers.go +++ b/graph/schema.resolvers.go @@ -61,7 +61,7 @@ func (r *mutationResolver) CreateUser(ctx context.Context, input model.NewUser) _, err = database.DB.Exec(query, input.SteamID, input.TeamspeakID, elo.Elo, isAdmin, input.Avatar, input.Name) if err != nil { - return "", err + return "", database.CheckErrorCode(err) } return "Created", nil -- 2.44.0