/
error.go
110 lines (86 loc) · 2.66 KB
/
error.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package errs
import (
"fmt"
"gorm.io/gorm"
)
var (
SERVER_ERROR = "SERVER_ERROR"
CLIENT_ERROR = "CLIENT_ERROR"
)
var (
ErrBadRequest = makeClientError(400000, "BAD_REQUEST", nil)
ErrCreateNewAccountRequestInvalid = makeClientError(400001, "CREATE_ACCOUNT_REQUEST_INVALID", nil)
ErrCreateNewAccountRequestRoleInvalid = makeClientError(400001, "CREATE_ACCOUNT_REQUEST_ROLE_INVALID", nil)
ErrUnAuthorized = makeClientError(401000, "UNAUTHORIZED", nil)
ErrAccessTokenExpired = makeClientError(401001, "ACCESS_TOKEN_EXPIRED", nil)
ErrAccessTokenNotExist = makeClientError(401002, "ACCESS_TOKEN_NOT_EXIST", nil)
ErrForbidden = makeClientError(403000, "FORBIDDEN", nil)
ErrUserNotAllow = makeClientError(403001, "USER_NOT_ALLOW", nil)
ErrUserCanNotAccess = makeClientError(403002, "USER_CAN_NOT_ACCESSS", nil)
ErrNotFound = makeClientError(404000, "NOT_FOUND", nil)
ErrUserNotExist = makeClientError(404001, "USER_NOT_EXIST", nil)
ErrInternalServer = makeServerError(500000, "INTERNAL_SERVER_ERROR", nil)
ErrDBFailed = makeServerError(500003, "DB_ERROR", nil)
)
type ClientError struct {
err
}
type err struct {
Code int
MsgCode string
OriginErr error
}
func (e ClientError) Error() string {
if e.OriginErr == nil {
return fmt.Sprintf("error_code: %d, msg_code: %s", e.Code, e.MsgCode)
}
return fmt.Sprintf("error_code: %d, msg_code: %s, origin_err:%s", e.Code, e.MsgCode, e.OriginErr.Error())
}
func IsClientError(err error) bool {
_, ok := err.(ClientError)
return ok
}
func makeClientError(code int, msgCode string, er error) ClientError {
return ClientError{err: err{
Code: code,
MsgCode: msgCode,
OriginErr: er,
}}
}
func (e ClientError) WithErr(err error) ClientError {
e.OriginErr = err
return e
}
type ServerError struct {
err
}
func (e ServerError) Error() string {
if e.OriginErr == nil {
return fmt.Sprintf("error_code: %d, msg_code: %s", e.Code, e.MsgCode)
}
return fmt.Sprintf("error_code: %d, msg_code: %s, origin_err:%s", e.Code, e.MsgCode, e.OriginErr.Error())
}
func IsServerError(err error) bool {
_, ok := err.(ServerError)
return ok
}
func makeServerError(code int, msgCode string, er error) ServerError {
return ServerError{err: err{
Code: code,
MsgCode: msgCode,
OriginErr: er,
}}
}
func (e ServerError) WithErr(err error) ServerError {
e.OriginErr = err
return e
}
func FilterErrNotFoundOrInternal(err error, newErr error) error {
if err == ErrNotFound || err == gorm.ErrRecordNotFound {
return newErr
}
return ErrInternalServer.WithErr(err)
}
func IsRecordNotFound(err error) bool {
return err == ErrNotFound || err == gorm.ErrRecordNotFound
}