/
data_json.go
119 lines (107 loc) · 2.11 KB
/
data_json.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
package gow
import (
"encoding/json"
"time"
)
// DataResponse data json response struct
type DataResponse struct {
Code int `json:"code"`
Msg string `json:"msg"`
Time int `json:"time"`
Body *Body `json:"body"`
}
// Body response body
type Body struct {
Pager *Pager `json:"pager"`
Data interface{} `json:"data"`
}
// Pager pager struct
type Pager struct {
Page int64 `json:"page"`
Limit int64 `json:"-"`
Offset int64 `json:"-"`
Count int64 `json:"count"`
PageCount int64 `json:"pagecount"`
}
// DataPager middlewares
// 实现分页参数的处理
func DataPager() HandlerFunc {
return func(c *Context) {
pager := new(Pager)
pager.Page, _ = c.GetInt64("page", 1)
if pager.Page < 1 {
pager.Page = 1
}
pager.Limit, _ = c.GetInt64("limit", 10)
if pager.Limit < 1 {
pager.Limit = 1
}
pager.Offset = (pager.Page - 1) * pager.Limit
c.Pager = pager
c.Next()
}
}
// DataJSON DataJSON json data
// response format json
// c.DataJSON(1,"lost param")
func (c *Context) DataJSON(args ...interface{}) {
var (
err error
pager *Pager
data interface{}
msg string
code int
)
for _, v := range args {
switch vv := v.(type) {
case int:
code = vv
case string:
msg = vv
case error:
err = vv
case *Pager:
pager = vv
default:
data = vv
}
}
if err != nil {
debugPrint(c.Request.URL.String(), err)
}
if code == 0 && msg == "" {
msg = "success"
}
body := new(Body)
if pager != nil {
pager.PageCount = getPageCount(pager.Count, pager.Limit)
} else {
pager = &Pager{}
}
body.Pager = pager
body.Data = data
resp := &DataResponse{
Code: code,
Msg: msg,
Time: int(time.Now().Unix()),
Body: body,
}
c.JSON(&resp)
return
}
// DecodeJSONBody request body to struct or map
func (c *Context) DecodeJSONBody(v interface{}) error {
body := c.Body()
return json.Unmarshal(body, &v)
}
// getPageCount return pagerCount
func getPageCount(count, limit int64) (pageCount int64) {
if count > 0 && limit > 0 {
if count%limit == 0 {
pageCount = count / limit
} else {
pageCount = (count / limit) + 1
}
}
return pageCount
}