package api
-import "net/http"
+import (
+ "net/http"
-//go:generate stringer -type=Status,ErrorCode -output const_string.go
+ "github.com/jloup/utils"
+)
+
+//go:generate stringer -type=Status -output const_string.go
type Status uint32
-type ErrorCode uint32
-const EXTERNAL_SERVICE_TIMEOUT_SECONDS = 10
+const EXTERNAL_SERVICE_TIMEOUT_SECONDS = 20
const (
OK Status = iota
NOK
+)
- BadRequest ErrorCode = iota + 1
- EmailExists
- ExternalServiceTimeout
- InternalError
- InvalidCredentials
- InvalidEmail
- InvalidMarketCredentials
- InvalidOtp
- InvalidPassword
- NeedOtpValidation
- NotAuthorized
- NotFound
- OtpAlreadySetup
- OtpNotSetup
- UserNotConfirmed
+var (
+ errorFlagCounter utils.Counter = 0
+ BadRequest utils.Flag = utils.InitFlag(&errorFlagCounter, "BadRequest")
+ EmailExists utils.Flag = utils.InitFlag(&errorFlagCounter, "EmailExists")
+ ExternalServiceTimeout utils.Flag = utils.InitFlag(&errorFlagCounter, "ExternalServiceTimeout")
+ InternalError utils.Flag = utils.InitFlag(&errorFlagCounter, "InternalError")
+ InvalidCredentials utils.Flag = utils.InitFlag(&errorFlagCounter, "InvalidCredentials")
+ InvalidEmail utils.Flag = utils.InitFlag(&errorFlagCounter, "InvalidEmail")
+ InvalidMarketCredentials utils.Flag = utils.InitFlag(&errorFlagCounter, "InvalidMarketCredentials")
+ MarketCredentialsNotConfigured utils.Flag = utils.InitFlag(&errorFlagCounter, "MarketCredentialsNotConfigured")
+ IPRestrictedApiKey utils.Flag = utils.InitFlag(&errorFlagCounter, "IPRestrictedApiKey")
+ InvalidOtp utils.Flag = utils.InitFlag(&errorFlagCounter, "InvalidOtp")
+ InvalidPassword utils.Flag = utils.InitFlag(&errorFlagCounter, "InvalidPassword")
+ NeedOtpValidation utils.Flag = utils.InitFlag(&errorFlagCounter, "NeedOtpValidation")
+ NotAuthorized utils.Flag = utils.InitFlag(&errorFlagCounter, "NotAuthorized")
+ NotFound utils.Flag = utils.InitFlag(&errorFlagCounter, "NotFound")
+ OtpAlreadySetup utils.Flag = utils.InitFlag(&errorFlagCounter, "OtpAlreadySetup")
+ OtpNotSetup utils.Flag = utils.InitFlag(&errorFlagCounter, "OtpNotSetup")
+ UserNotConfirmed utils.Flag = utils.InitFlag(&errorFlagCounter, "UserNotConfirmed")
+
+ StatusBadRequest utils.Flag = utils.Join("BadRequest", BadRequest, InvalidPassword, InvalidEmail, InvalidMarketCredentials, IPRestrictedApiKey, MarketCredentialsNotConfigured)
+ StatusUnauthorized utils.Flag = utils.Join("Unauthorized", InvalidCredentials, InvalidOtp)
+ StatusForbidden utils.Flag = utils.Join("Forbidden", UserNotConfirmed, NotAuthorized, OtpAlreadySetup, OtpNotSetup, NeedOtpValidation)
+ StatusConflicts utils.Flag = utils.Join("Conflicts", EmailExists)
+ StatusNotFound utils.Flag = utils.Join("NotFound", NotFound)
+ StatusGatewayTimeout utils.Flag = utils.Join("GatewayTimeout", ExternalServiceTimeout)
)
-func StatusToHttpCode(status Status, code ErrorCode) int {
+func StatusToHttpCode(status Status, code utils.Flag) int {
if status == OK {
return http.StatusOK
}
- switch code {
- case BadRequest, InvalidPassword, InvalidEmail, InvalidMarketCredentials:
+ switch {
+ case utils.Intersect(code, StatusBadRequest):
return http.StatusBadRequest
-
- case InvalidCredentials, InvalidOtp:
+ case utils.Intersect(code, StatusUnauthorized):
return http.StatusUnauthorized
-
- case UserNotConfirmed, NotAuthorized, OtpAlreadySetup, OtpNotSetup, NeedOtpValidation:
+ case utils.Intersect(code, StatusForbidden):
return http.StatusForbidden
-
- case EmailExists:
+ case utils.Intersect(code, StatusConflicts):
return http.StatusConflict
-
- case NotFound:
+ case utils.Intersect(code, StatusNotFound):
return http.StatusNotFound
-
- case ExternalServiceTimeout:
+ case utils.Intersect(code, StatusGatewayTimeout):
return http.StatusGatewayTimeout
}