Introduce ErrorResponder

This commit is contained in:
fedor 2023-02-08 11:17:21 -05:00
parent 0090aac7b1
commit c2acab5ca9
5 changed files with 32 additions and 37 deletions

View File

@ -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")

View File

@ -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)
}
}

View File

@ -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)
}

View File

@ -8,7 +8,7 @@ type JSONResponder struct {
code int
obj interface{}
DefaultResponder
Responder
}
func JSON(code int, obj interface{}) *JSONResponder {

View File

@ -7,7 +7,3 @@ import (
type Responder interface {
Respond(c *gin.Context)
}
type DefaultResponder struct{}
func (dr DefaultResponder) Respond(c *gin.Context) {}