@@ -4,35 +4,63 @@ import (
44 "errors"
55 "github.com/gin-gonic/gin"
66 "github.com/uozi-tech/cosy/logger"
7+ "github.com/uozi-tech/cosy/settings"
78 "go.uber.org/zap"
89 "gorm.io/gorm"
910 "net/http"
1011)
1112
12- func errHandler (c * gin.Context , err error ) {
13- logger .GetLogger ().WithOptions (zap .AddCallerSkip (1 )).Errorln (err )
14- if errors .Is (err , gorm .ErrRecordNotFound ) {
15- c .JSON (http .StatusNotFound , gin.H {
16- "message" : err .Error (),
17- })
18- return
13+ type Error struct {
14+ Code int32 `json:"code"`
15+ Message string `json:"message"`
16+ }
17+
18+ func (e * Error ) Error () string {
19+ return e .Message
20+ }
21+
22+ func NewError (code int32 , message string ) error {
23+ return & Error {
24+ Code : code ,
25+ Message : message ,
1926 }
20- c .JSON (http .StatusInternalServerError , gin.H {
21- "message" : err .Error (),
22- })
2327}
2428
25- func ErrHandler (c * gin.Context , err error ) {
26- logger .GetLogger ().Errorln (err )
29+ // errorResp error response
30+ func errorResp (c * gin.Context , err error ) {
31+ var cErr * Error
32+ switch {
33+ case errors .Is (err , gorm .ErrRecordNotFound ):
34+ c .JSON (http .StatusNotFound , & Error {
35+ Code : http .StatusNotFound ,
36+ Message : gorm .ErrRecordNotFound .Error (),
37+ })
38+ case errors .As (err , & cErr ):
39+ c .JSON (http .StatusInternalServerError , cErr )
40+ default :
41+ if settings .ServerSettings .RunMode != gin .ReleaseMode {
42+ c .JSON (http .StatusInternalServerError , & Error {
43+ Code : http .StatusInternalServerError ,
44+ Message : err .Error (),
45+ })
46+ return
47+ }
2748
28- if errors . Is ( err , gorm . ErrRecordNotFound ) {
29- c . JSON ( http .StatusNotFound , gin. H {
30- "message" : err . Error () ,
49+ c . JSON ( http . StatusInternalServerError , & Error {
50+ Code : http .StatusInternalServerError ,
51+ Message : "Server Error" ,
3152 })
32- return
3353 }
54+ }
55+
56+ // errHandler error handler for internal use
57+ func errHandler (c * gin.Context , err error ) {
58+ logger .GetLogger ().WithOptions (zap .AddCallerSkip (1 )).Errorln (err )
59+ errorResp (c , err )
60+ }
3461
35- c .JSON (http .StatusInternalServerError , gin.H {
36- "message" : err .Error (),
37- })
62+ // ErrHandler error handler for external use
63+ func ErrHandler (c * gin.Context , err error ) {
64+ logger .GetLogger ().Errorln (err )
65+ errorResp (c , err )
3866}
0 commit comments