From 0d5c399f03a9dc4b73743f1cdfe7a7498babf155 Mon Sep 17 00:00:00 2001 From: noah Date: Sun, 30 Oct 2022 20:49:55 +0900 Subject: [PATCH 1/2] Add the methods for HTTP code --- internal/server/global/http.go | 4 ++-- pkg/e/code.go | 29 ++++++++++++++++++++++++++--- pkg/e/code_test.go | 10 ++++++++++ pkg/e/trans.go | 9 --------- 4 files changed, 38 insertions(+), 14 deletions(-) diff --git a/internal/server/global/http.go b/internal/server/global/http.go index fed8676b..3c9c07b4 100644 --- a/internal/server/global/http.go +++ b/internal/server/global/http.go @@ -13,7 +13,7 @@ func Response(c *gin.Context, httpCode int, data interface{}) { func ResponseWithError(c *gin.Context, err error) { if ge, ok := err.(*e.Error); ok { - c.JSON(e.GetHttpCode(ge.Code), map[string]string{ + c.JSON(ge.GetHTTPCode(), map[string]string{ "code": string(ge.Code), "message": ge.Message, }) @@ -44,7 +44,7 @@ func ResponseWithStatusAndError(c *gin.Context, status int, err error) { func AbortWithError(c *gin.Context, err error) { if ge, ok := err.(*e.Error); ok { - c.AbortWithStatusJSON(e.GetHttpCode(ge.Code), map[string]string{ + c.AbortWithStatusJSON(ge.GetHTTPCode(), map[string]string{ "code": string(ge.Code), "message": ge.Message, }) diff --git a/pkg/e/code.go b/pkg/e/code.go index 999497e2..f8203dcf 100644 --- a/pkg/e/code.go +++ b/pkg/e/code.go @@ -3,6 +3,7 @@ package e import ( "errors" "fmt" + "net/http" "strings" ) @@ -62,14 +63,17 @@ type ( Code ErrorCode Message string Wrap error + + httpCode int } ) func NewError(code ErrorCode, wrap error) *Error { return &Error{ - Code: code, - Message: GetMessage(code), - Wrap: wrap, + Code: code, + Message: GetMessage(code), + Wrap: wrap, + httpCode: mapHTTPCode(code), } } @@ -94,10 +98,29 @@ func (e *Error) Error() string { return strings.Join(msgs, ", ") } +// GetHTTPCode returns the HTTP code. +func (e *Error) GetHTTPCode() int { + return e.httpCode +} + +// SetHTTPCode sets the HTTP code manually. +func (e *Error) SetHTTPCode(code int) { + e.httpCode = code +} + func (e *Error) Unwrap() error { return e.Wrap } +func mapHTTPCode(code ErrorCode) int { + httpCode, ok := httpCodes[code] + if !ok { + return http.StatusInternalServerError + } + + return httpCode +} + func IsError(err error) bool { var ge *Error return errors.As(err, &ge) diff --git a/pkg/e/code_test.go b/pkg/e/code_test.go index 689aeaf8..f8b97194 100644 --- a/pkg/e/code_test.go +++ b/pkg/e/code_test.go @@ -2,9 +2,19 @@ package e import ( "fmt" + "net/http" "testing" ) +func TestError_GetHTTPError(t *testing.T) { + t.Run("Return the matche HTTP code.", func(t *testing.T) { + err := NewError(ErrorCodeInternalError, nil) + if err.GetHTTPCode() != http.StatusInternalServerError { + t.Fatalf("GetHTTPCode = %v, wanted %v", err.GetHTTPCode(), http.StatusInternalServerError) + } + }) +} + func Test_IsError(t *testing.T) { t.Run("Return true when the type of error is Error.", func(t *testing.T) { err := NewError(ErrorCodeInternalError, nil) diff --git a/pkg/e/trans.go b/pkg/e/trans.go index 3eb07d27..ec0e9c2a 100644 --- a/pkg/e/trans.go +++ b/pkg/e/trans.go @@ -52,12 +52,3 @@ var httpCodes = map[ErrorCode]int{ ErrorPermissionRequired: http.StatusForbidden, ErrorRepoUniqueName: http.StatusUnprocessableEntity, } - -func GetHttpCode(code ErrorCode) int { - httpCode, ok := httpCodes[code] - if !ok { - return http.StatusInternalServerError - } - - return httpCode -} From 5b47e3fb6997d7308d4ee8ef49ee6c42af1658eb Mon Sep 17 00:00:00 2001 From: noah Date: Sun, 30 Oct 2022 21:00:54 +0900 Subject: [PATCH 2/2] Fix the bugs --- pkg/e/code.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pkg/e/code.go b/pkg/e/code.go index f8203dcf..4ef65a54 100644 --- a/pkg/e/code.go +++ b/pkg/e/code.go @@ -79,9 +79,10 @@ func NewError(code ErrorCode, wrap error) *Error { func NewErrorWithMessage(code ErrorCode, message string, wrap error) *Error { return &Error{ - Code: code, - Message: message, - Wrap: wrap, + Code: code, + Message: message, + Wrap: wrap, + httpCode: mapHTTPCode(code), } }