]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Front.git/blobdiff - api/api.go
Error flags.
[perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Front.git] / api / api.go
index e01181123633e4a7112dd1124375ae8d7f5e680b..f9213018a5970052c1885afdf43ac4b4df9623ac 100644 (file)
@@ -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)