From 76b480298abf2cbae7eae4062cf3713d90515dbf Mon Sep 17 00:00:00 2001 From: James Houlahan Date: Tue, 21 Apr 2020 13:13:02 +0200 Subject: [PATCH] fix: better error messages for 422 --- internal/store/event_loop.go | 2 +- pkg/pmapi/client.go | 10 ++++++++-- pkg/pmapi/res.go | 8 ++++++-- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/internal/store/event_loop.go b/internal/store/event_loop.go index 0238c983..b010f059 100644 --- a/internal/store/event_loop.go +++ b/internal/store/event_loop.go @@ -431,7 +431,7 @@ func (loop *eventLoop) processMessages(eventLog *logrus.Entry, messages []*pmapi msgLog.WithError(err).Warning("Message was not present in DB. Trying fetch...") if msg, err = loop.apiClient.GetMessage(message.ID); err != nil { - if err == pmapi.ErrNoSuchAPIID { + if _, ok := err.(*pmapi.ErrUnprocessableEntity); ok { msgLog.WithError(err).Warn("Skipping message update because message exists neither in local DB nor on API") err = nil continue diff --git a/pkg/pmapi/client.go b/pkg/pmapi/client.go index 22032b8f..fba354e4 100644 --- a/pkg/pmapi/client.go +++ b/pkg/pmapi/client.go @@ -56,10 +56,16 @@ var ( ErrInvalidToken = errors.New("refresh token invalid") ErrAPINotReachable = errors.New("cannot reach the server") ErrUpgradeApplication = errors.New("application upgrade required") - - ErrNoSuchAPIID = errors.New("no such API ID") ) +type ErrUnprocessableEntity struct { + error +} + +func (err *ErrUnprocessableEntity) Error() string { + return err.error.Error() +} + type ErrUnauthorized struct { error } diff --git a/pkg/pmapi/res.go b/pkg/pmapi/res.go index 07a5cada..dc388e4a 100644 --- a/pkg/pmapi/res.go +++ b/pkg/pmapi/res.go @@ -17,7 +17,11 @@ package pmapi -import "net/http" +import ( + "net/http" + + "github.com/pkg/errors" +) // Common response codes. const ( @@ -38,7 +42,7 @@ type Res struct { // Err returns error if the response is an error. Otherwise, returns nil. func (res Res) Err() error { if res.StatusCode == http.StatusUnprocessableEntity { - return ErrNoSuchAPIID + return &ErrUnprocessableEntity{errors.New(res.Error)} } if res.ResError == nil {