diff --git a/internal/controller/api.go b/internal/controller/api.go index 3aecbb6..88bd631 100644 --- a/internal/controller/api.go +++ b/internal/controller/api.go @@ -1,28 +1,15 @@ package controller import ( - "errors" storepkg "github.com/cirruslabs/orchard/internal/controller/store" "github.com/cirruslabs/orchard/internal/responder" "github.com/gin-gonic/gin" "net/http" ) -func ErrorHandler(ctx *gin.Context) { - // make sure everything is executed in the chain before trying to override the code - ctx.Next() - - for _, err := range ctx.Errors { - if errors.Is(err, storepkg.ErrNotFound) { - ctx.Status(http.StatusNotFound) - } - } -} - func (controller *Controller) initAPI() *gin.Engine { gin.SetMode(gin.DebugMode) ginEngine := gin.Default() - ginEngine.Use(ErrorHandler) // v1 API v1 := ginEngine.Group("/v1") diff --git a/internal/responder/code.go b/internal/responder/code.go index e67aa2f..4d3029d 100644 --- a/internal/responder/code.go +++ b/internal/responder/code.go @@ -2,35 +2,19 @@ package responder import ( "github.com/gin-gonic/gin" - "net/http" ) type CodeResponder struct { code int - err error - DefaultResponder + Responder } -func Code(code int) *CodeResponder { - return ErrorCode(nil, code) -} - -func Error(err error) *CodeResponder { - return ErrorCode(err, http.StatusInternalServerError) -} - -func ErrorCode(err error, code int) *CodeResponder { - responder := &CodeResponder{ +func Code(code int) Responder { + return &CodeResponder{ code: code, - err: err, } - - return responder } func (responder *CodeResponder) Respond(c *gin.Context) { c.Status(responder.code) - if responder.err != nil { - _ = c.Error(responder.err) - } } diff --git a/internal/responder/error.go b/internal/responder/error.go new file mode 100644 index 0000000..34fd3e3 --- /dev/null +++ b/internal/responder/error.go @@ -0,0 +1,28 @@ +package responder + +import ( + "errors" + storepkg "github.com/cirruslabs/orchard/internal/controller/store" + "github.com/gin-gonic/gin" + "net/http" +) + +type ErrorResponder struct { + err error + Responder +} + +func Error(err error) Responder { + return &ErrorResponder{ + err: err, + } +} + +func (responder *ErrorResponder) Respond(c *gin.Context) { + var code = http.StatusInternalServerError + if errors.Is(responder.err, storepkg.ErrNotFound) { + code = http.StatusNotFound + } + _ = c.Error(responder.err) + c.Status(code) +} diff --git a/internal/responder/json.go b/internal/responder/json.go index 58cf7fc..a68d51e 100644 --- a/internal/responder/json.go +++ b/internal/responder/json.go @@ -8,7 +8,7 @@ type JSONResponder struct { code int obj interface{} - DefaultResponder + Responder } func JSON(code int, obj interface{}) *JSONResponder { diff --git a/internal/responder/responder.go b/internal/responder/responder.go index 2457c82..78d2a2a 100644 --- a/internal/responder/responder.go +++ b/internal/responder/responder.go @@ -7,7 +7,3 @@ import ( type Responder interface { Respond(c *gin.Context) } - -type DefaultResponder struct{} - -func (dr DefaultResponder) Respond(c *gin.Context) {}