mirror of
https://github.com/Dvorinka/Trackeep.git
synced 2026-06-03 20:12:58 +00:00
uppdate
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
type ErrorCode string
|
||||
|
||||
const (
|
||||
ErrInternal ErrorCode = "INTERNAL_ERROR"
|
||||
ErrBadRequest ErrorCode = "BAD_REQUEST"
|
||||
ErrUnauthorized ErrorCode = "UNAUTHORIZED"
|
||||
ErrForbidden ErrorCode = "FORBIDDEN"
|
||||
ErrNotFound ErrorCode = "NOT_FOUND"
|
||||
ErrConflict ErrorCode = "CONFLICT"
|
||||
ErrValidation ErrorCode = "VALIDATION_ERROR"
|
||||
ErrRateLimit ErrorCode = "RATE_LIMIT_EXCEEDED"
|
||||
ErrServiceUnavailable ErrorCode = "SERVICE_UNAVAILABLE"
|
||||
)
|
||||
|
||||
type AppError struct {
|
||||
Code ErrorCode `json:"code"`
|
||||
Message string `json:"message"`
|
||||
Details string `json:"details,omitempty"`
|
||||
HTTPStatus int `json:"-"`
|
||||
}
|
||||
|
||||
func (e *AppError) Error() string {
|
||||
if e.Details != "" {
|
||||
return fmt.Sprintf("%s: %s (%s)", e.Code, e.Message, e.Details)
|
||||
}
|
||||
return fmt.Sprintf("%s: %s", e.Code, e.Message)
|
||||
}
|
||||
|
||||
func NewAppError(code ErrorCode, message string, httpStatus int) *AppError {
|
||||
return &AppError{
|
||||
Code: code,
|
||||
Message: message,
|
||||
HTTPStatus: httpStatus,
|
||||
}
|
||||
}
|
||||
|
||||
func NewAppErrorWithDetails(code ErrorCode, message string, httpStatus int, details string) *AppError {
|
||||
return &AppError{
|
||||
Code: code,
|
||||
Message: message,
|
||||
Details: details,
|
||||
HTTPStatus: httpStatus,
|
||||
}
|
||||
}
|
||||
|
||||
func WrapError(err error, code ErrorCode, message string, httpStatus int) *AppError {
|
||||
return &AppError{
|
||||
Code: code,
|
||||
Message: message,
|
||||
Details: err.Error(),
|
||||
HTTPStatus: httpStatus,
|
||||
}
|
||||
}
|
||||
|
||||
func IsAppError(err error) (*AppError, bool) {
|
||||
if appErr, ok := err.(*AppError); ok {
|
||||
return appErr, true
|
||||
}
|
||||
return nil, false
|
||||
}
|
||||
|
||||
func BadRequest(message string) *AppError {
|
||||
return NewAppError(ErrBadRequest, message, http.StatusBadRequest)
|
||||
}
|
||||
|
||||
func BadRequestWithDetails(message, details string) *AppError {
|
||||
return NewAppErrorWithDetails(ErrBadRequest, message, http.StatusBadRequest, details)
|
||||
}
|
||||
|
||||
func Unauthorized(message string) *AppError {
|
||||
return NewAppError(ErrUnauthorized, message, http.StatusUnauthorized)
|
||||
}
|
||||
|
||||
func Forbidden(message string) *AppError {
|
||||
return NewAppError(ErrForbidden, message, http.StatusForbidden)
|
||||
}
|
||||
|
||||
func NotFound(message string) *AppError {
|
||||
return NewAppError(ErrNotFound, message, http.StatusNotFound)
|
||||
}
|
||||
|
||||
func Conflict(message string) *AppError {
|
||||
return NewAppError(ErrConflict, message, http.StatusConflict)
|
||||
}
|
||||
|
||||
func ValidationErr(message string) *AppError {
|
||||
return NewAppError(ErrValidation, message, http.StatusBadRequest)
|
||||
}
|
||||
|
||||
func InternalError(message string) *AppError {
|
||||
return NewAppError(ErrInternal, message, http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
func InternalErrorWithDetails(message, details string) *AppError {
|
||||
return NewAppErrorWithDetails(ErrInternal, message, http.StatusInternalServerError, details)
|
||||
}
|
||||
|
||||
func RateLimitExceeded(message string) *AppError {
|
||||
return NewAppError(ErrRateLimit, message, http.StatusTooManyRequests)
|
||||
}
|
||||
|
||||
func ServiceUnavailable(message string) *AppError {
|
||||
return NewAppError(ErrServiceUnavailable, message, http.StatusServiceUnavailable)
|
||||
}
|
||||
Reference in New Issue
Block a user