8 "github.com/gin-gonic/gin"
9 log "github.com/sirupsen/logrus"
12 // response describes the response standard. Code & Msg are always present.
13 // Data is present for a success response only.
14 type response struct {
15 Code int `json:"code"`
16 Msg string `json:"msg"`
17 Result map[string]interface{} `json:"result,omitempty"`
20 func respondErrorResp(c *gin.Context, err error) {
21 log.WithFields(log.Fields{
23 "request": c.Value(reqBodyLabel),
25 }).Error("request fail")
26 resp := formatErrResp(err)
27 c.AbortWithStatusJSON(http.StatusOK, resp)
30 func respondSuccessResp(c *gin.Context, data interface{}) {
31 result := make(map[string]interface{})
33 c.AbortWithStatusJSON(http.StatusOK, response{Code: 200, Result: result})
37 Next string `json:"next,omitempty"`
40 func respondSuccessPaginationResp(c *gin.Context, data interface{}, paginationInfo *PaginationInfo) {
41 url := fmt.Sprintf("%v", c.Request.URL)
42 base := strings.Split(url, "?")[0]
43 start := paginationInfo.Start
44 limit := paginationInfo.Limit
47 if paginationInfo.HasNext {
48 // To efficiently build a string using Write methods
49 // https://stackoverflow.com/questions/1760757/how-to-efficiently-concatenate-strings-in-go
50 // https://tip.golang.org/pkg/strings/#Builder
52 fmt.Fprintf(&b, "%s?limit=%d&start=%d", base, limit, start+limit)
55 result := make(map[string]interface{})
57 result["start"] = start
58 result["limit"] = limit
61 c.AbortWithStatusJSON(http.StatusOK, response{