com.snow.auto_monitor/app/http/controllers/base.go

109 lines
2.1 KiB
Go

package controllers
import (
"bytes"
"encoding/json"
"io/ioutil"
"net/http"
"com.snow.auto_monitor/app/constants/errorcode"
"github.com/gin-gonic/gin"
"github.com/qit-team/snow-core/log/logger"
"gopkg.in/go-playground/validator.v9"
)
/**
* 成功时返回
*/
func Success(c *gin.Context, data interface{}) {
c.JSON(http.StatusOK, gin.H{
"code": errorcode.Success,
"message": "ok",
"request_uri": c.Request.URL.Path,
"data": data,
})
c.Abort()
}
/**
* 成功时返回
*/
func SuccessWithList(c *gin.Context, data interface{}, total int64) {
c.JSON(http.StatusOK, gin.H{
"code": errorcode.Success,
"message": "ok",
"request_uri": c.Request.URL.Path,
"data": gin.H{
"list": data,
"total": total,
},
})
c.Abort()
}
/**
* 失败时返回
*/
func Error(c *gin.Context, code int, msg ...string) {
message := ""
if len(msg) > 0 {
message = msg[0]
} else {
message = errorcode.GetMsg(code)
}
c.JSON(http.StatusOK, gin.H{
"code": code,
"message": message,
"request_uri": c.Request.URL.Path,
"data": make(map[string]string),
})
c.Abort()
}
func Error404(c *gin.Context) {
Error(c, errorcode.NotFound, "路由不存在")
}
func Error500(c *gin.Context) {
Error(c, errorcode.SystemError)
}
type HTTPError struct {
Code int `json:"code" example:"400"`
Message string `json:"message" example:"status bad request"`
}
/**
* 将请求的body转换为request数据结构
* @param c
* @param request 传入request数据结构的指针 如 new(TestRequest)
*/
func GenRequest(c *gin.Context, request interface{}) (err error) {
body, err := ReadBody(c)
if err != nil {
return
}
err = json.Unmarshal(body, request)
if err == nil {
validate := validator.New()
errValidate := validate.Struct(request)
if errValidate != nil {
logger.Error(c, "param_validator_exception:"+c.Request.URL.Path, errValidate)
return errValidate
}
}
return err
}
// 重复读取body
func ReadBody(c *gin.Context) (body []byte, err error) {
body, err = ioutil.ReadAll(c.Request.Body)
if err != nil {
return
}
c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(body))
return
}