/
api.go
140 lines (123 loc) · 3.12 KB
/
api.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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
package antd_apis
import (
"errors"
"fmt"
"net/http"
"strconv"
vd "github.com/bytedance/go-tagexpr/v2/validator"
"github.com/fits-devops/fits-monitor-sdk/sdk/service"
"github.com/gin-gonic/gin/binding"
"github.com/fits-devops/fits-monitor-sdk/logger"
"github.com/fits-devops/fits-monitor-sdk/sdk/api"
"github.com/fits-devops/fits-monitor-sdk/sdk/pkg"
"github.com/fits-devops/fits-monitor-sdk/sdk/pkg/response/antd"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
type Api struct {
Context *gin.Context
Logger *logger.Helper
Orm *gorm.DB
Errors error
}
// GetLogger 获取上下文提供的日志
func (e Api) GetLogger() *logger.Helper {
return api.GetRequestLogger(e.Context)
}
// GetOrm 获取Orm DB
func (e *Api) GetOrm(c *gin.Context) (*gorm.DB, error) {
db, err := pkg.GetOrm(c)
if err != nil {
e.Error(http.StatusInternalServerError, "数据库连接获取失败", "9")
return nil, err
}
return db, nil
}
// Error 通常错误数据处理
// showType error display type: 0 silent; 1 message.warn; 2 message.error; 4 notification; 9 page
func (e *Api) Error(errCode int, errMsg string, showType string) {
if showType == "" {
showType = "2"
}
antd.Error(e.Context, strconv.Itoa(errCode), errMsg, showType)
}
// OK 通常成功数据处理
func (e *Api) OK(data interface{}) {
antd.OK(e.Context, data)
}
// PageOK 分页数据处理
func (e *Api) PageOK(result interface{}, total int, current int, pageSize int) {
antd.PageOK(e.Context, result, total, current, pageSize)
}
func (e *Api) ListOK(result interface{}, total int, current int, pageSize int) {
antd.ListOK(e.Context, result, total, current, pageSize)
}
// Custom 兼容函数
func (e *Api) Custom(data gin.H) {
antd.Custum(e.Context, data)
}
// MakeContext 设置http上下文
func (e *Api) MakeContext(c *gin.Context) *Api {
e.Context = c
e.Logger = api.GetRequestLogger(c)
return e
}
// Bind 参数校验
func (e *Api) Bind(d interface{}, bindings ...binding.Binding) *Api {
var err error
if len(bindings) == 0 {
bindings = constructor.GetBindingForGin(d)
}
for i := range bindings {
if bindings[i] == nil {
err = e.Context.ShouldBindUri(d)
} else {
err = e.Context.ShouldBindWith(d, bindings[i])
}
if err != nil && err.Error() == "EOF" {
e.Logger.Warn("request body is not present anymore. ")
err = nil
continue
}
if err != nil {
e.AddError(err)
break
}
}
if err1 := vd.Validate(d); err1 != nil {
e.AddError(err1)
}
return e
}
// MakeOrm 设置Orm DB
func (e *Api) MakeOrm() *Api {
var err error
if e.Logger == nil {
err = errors.New("at MakeOrm logger is nil")
e.AddError(err)
return e
}
db, err := pkg.GetOrm(e.Context)
if err != nil {
e.Logger.Error(http.StatusInternalServerError, err, "数据库连接获取失败")
e.AddError(err)
}
e.Orm = db
return e
}
func (e *Api) MakeService(c *service.Service) *Api {
c.Log = e.Logger
c.Orm = e.Orm
return e
}
func (e *Api) AddError(err error) {
if e.Errors == nil {
e.Errors = err
} else if err != nil {
e.Logger.Error(err)
e.Errors = fmt.Errorf("%v; %w", e.Error, err)
}
}
func (e Api) Translate(form, to interface{}) {
pkg.Translate(form, to)
}