X-Git-Url: https://git.immae.eu/?p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FCryptoportfolio%2FFront.git;a=blobdiff_plain;f=api%2Fapi.go;h=f9213018a5970052c1885afdf43ac4b4df9623ac;hp=e01181123633e4a7112dd1124375ae8d7f5e680b;hb=4495b984d3e60874281f37cdb2dbe2cf1c3874ab;hpb=372ed7400f57355eb7dd98058b10ddeb1e1ff635 diff --git a/api/api.go b/api/api.go index e011811..f921301 100644 --- a/api/api.go +++ b/api/api.go @@ -5,6 +5,7 @@ import ( "unicode" "github.com/gin-gonic/gin" + "github.com/jloup/utils" ) var CONFIG Config @@ -43,11 +44,30 @@ func SetMailConfig(config MailConfig) { } type Error struct { - Code ErrorCode + Code utils.Flag UserMessage string err error } +func (e Error) FlagString() string { + return e.Code.String() +} + +func (e Error) Flag() utils.Flag { + return e.Code +} + +func (e Error) Msg() string { + return e.UserMessage +} + +func (e Error) ErrorWithCode(f utils.Flag) utils.ErrorFlagged { + if utils.Intersect(e.Code, f) { + return e + } + + return nil +} func (e Error) Err() error { if e.err != nil { return e @@ -64,7 +84,7 @@ func (e Error) Error() string { return "" } -func ErrorIs(err error, code ErrorCode) bool { +func ErrorIs(err error, code utils.Flag) bool { if err == nil { return false } @@ -72,7 +92,7 @@ func ErrorIs(err error, code ErrorCode) bool { if apiError, ok := err.(*Error); !ok { return false } else { - return apiError.Code == code + return utils.Intersect(apiError.Code, code) && apiError.Code.String() == code.String() } } @@ -99,8 +119,8 @@ func ToSnake(in string) string { } type Response struct { - StatusCode Status `json:"-"` - ErrorCode ErrorCode `json:"-"` + StatusCode Status `json:"-"` + ErrorCode utils.Flag `json:"-"` Status string `json:"status"` Code string `json:"code,omitempty"` @@ -110,15 +130,12 @@ type Response struct { func (r Response) populateStatus() Response { r.Status = ToSnake(r.StatusCode.String()) - - if r.ErrorCode != 0 { - r.Code = ToSnake(r.ErrorCode.String()) - } + r.Code = ToSnake(r.ErrorCode.String()) return r } -func ErrorResponse(code ErrorCode, message string) Response { +func ErrorResponse(code utils.Flag, message string) Response { return Response{ StatusCode: NOK, ErrorCode: code, @@ -150,7 +167,7 @@ func M(handler Middleware) gin.HandlerFunc { err := handler(c) if err != nil { - WriteJsonResponse(ErrorResponse(err.Code, err.UserMessage), c) + WriteJsonResponse(ErrorResponse(err.Flag(), err.UserMessage), c) c.Error(err) c.Abort() } else { @@ -166,13 +183,13 @@ type Query interface { func RunQuery(query Query, c *gin.Context) { if err := query.ValidateParams(); err != nil { - WriteJsonResponse(ErrorResponse(err.Code, err.UserMessage), c) + WriteJsonResponse(ErrorResponse(err.Flag(), err.UserMessage), c) c.Error(err) return } if out, err := query.Run(); err != nil { - WriteJsonResponse(ErrorResponse(err.Code, err.UserMessage), c) + WriteJsonResponse(ErrorResponse(err.Flag(), err.UserMessage), c) c.Error(err) } else { WriteJsonResponse(SuccessResponse(out), c)