You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

189 lines
4.2 KiB

package dapi
import (
"bytes"
"encoding/json"
"epur-pay/pkg/config"
"epur-pay/pkg/logger"
"errors"
"github.com/go-sql-driver/mysql"
"gorm.io/gorm"
"net/http"
)
var (
//成功
Success = 200
//服务错误
ServerError = 500
//资源不存在
NotFound = 404
//参数错误
InvalidParams = 965
//请求错误
PublicError = 999
//Token失效
TokenInvalid = 600
)
type RequestLimit struct {
Page int `json:"page"` //页数
Size int `json:"size"` //条数
}
// 返回公共结构体
type ResponseCommon struct {
Code int `json:"code"` //返回Code 200 成功 其他是失败
Msg interface{} `json:"message"` //返回信息
Count int64 `json:"count,omitempty"` // 条数
}
// 返回结构体 带Data
type Response struct {
*ResponseCommon
Data interface{} `json:"data"` //返回的数据
}
func (a *ApiBase) DbErrRecordNotFound(err error, msg string) {
if err == gorm.ErrRecordNotFound {
panic(msg)
} else if err != nil {
panic(err.Error())
}
}
func (a *ApiBase) DbErrSkipRecordNotFound(err error) {
if err != nil && err != gorm.ErrRecordNotFound {
panic(err.Error())
}
}
func (a *ApiBase) DbErrRecordNotFoundBool(err error) bool {
if err == gorm.ErrRecordNotFound {
return false
} else if err != nil {
return false
}
return true
}
func (a *ApiBase) DbErrUniqueIndexConflict(err error, msg string) error {
if err != nil {
if err.(*mysql.MySQLError).Number == 1062 {
return a.ReturnErrorResponse(PublicError, msg)
} else {
return a.ReturnErrorResponse(ServerError, a.Translate("sys_error"))
}
} else {
return nil
}
}
func (a *ApiBase) DbErrSkipRecordNotFoundBool(err error) bool {
if err != nil && err != gorm.ErrRecordNotFound {
return false
}
return true
}
func (a *ApiBase) JSONMarshal(t interface{}) ([]byte, error) {
buffer := &bytes.Buffer{}
encoder := json.NewEncoder(buffer)
encoder.SetEscapeHTML(false)
err := encoder.Encode(t)
return buffer.Bytes(), err
}
func (a *ApiBase) response() {
var response []byte
if a.IsCustomResponse {
return
}
if a.Error == nil {
if a.CustomResponse != nil {
response, _ = a.JSONMarshal(&a.CustomResponse)
} else if a.Response != nil {
response, _ = a.JSONMarshal(&a.Response)
} else {
_ = a.ReturnErrorResponse(500, a.Error.Error())
response, _ = a.JSONMarshal(&a.Response)
}
} else {
if a.CustomResponse != nil {
response, _ = a.JSONMarshal(&a.CustomResponse)
} else if a.Response != nil {
response, _ = a.JSONMarshal(&a.Response)
} else {
_ = a.ReturnErrorResponse(500, a.Error.Error())
response, _ = a.JSONMarshal(&a.Response)
}
}
r := string(response)
if config.Cf.Common.RunMode == "debug" {
logger.AccessLogger.Infof("%s 返回数据 -> %s", a.C.FullPath(), r)
}
a.C.String(http.StatusOK, r)
}
func (a *ApiBase) NewResponseCommon(code int, msg string) *ResponseCommon {
return &ResponseCommon{
Code: code,
Msg: msg,
}
}
func (a *ApiBase) NewSuccessResponseCommon() *ResponseCommon {
return a.NewResponseCommon(Success, a.Translate("success"))
}
func (a *ApiBase) NewResponse(code int, msg string, data ...interface{}) *Response {
return &Response{
ResponseCommon: a.NewResponseCommon(code, msg),
Data: dataHandler(data...),
}
}
func (a *ApiBase) NewSuccessResponse(data ...interface{}) *Response {
return &Response{
ResponseCommon: a.NewSuccessResponseCommon(),
Data: dataHandler(data...),
}
}
func (a *ApiBase) ReturnSuccessResponse(data ...interface{}) error {
a.Response = a.NewSuccessResponse(data)
return nil
}
func (a *ApiBase) ReturnErrorResponse(code int, msg string, data ...interface{}) error {
a.Response = a.NewResponse(code, msg, data)
a.Error = errors.New(msg)
return a.Error
}
func (a *ApiBase) ReturnPublicErrorResponse(msg string, data ...interface{}) error {
if len(msg) <= 0 {
//logger.AccessLogger.Errorln("系统错误!")
//msg = cache.Global.GetLang(a.Lang, "sys_error")
}
return a.ReturnErrorResponse(PublicError, msg, data...)
}
func (a *ApiBase) ReturnSuccessCustomResponse(data interface{}) error {
a.CustomResponse = &data
return nil
}
func dataHandler(data ...interface{}) interface{} {
if len(data) == 1 {
return data[0]
} else {
return data
}
}