This commit is contained in:
parent
89cf5f0d57
commit
16fb22479f
|
|
@ -0,0 +1,102 @@
|
|||
package utils
|
||||
|
||||
import (
|
||||
"github.com/flipped-aurora/gin-vue-admin/server/plugin/wechat-integration/model/response"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// ResponseHelper 响应助手
|
||||
type ResponseHelper struct{}
|
||||
|
||||
// Success 成功响应
|
||||
func (r *ResponseHelper) Success(c *gin.Context, data interface{}) {
|
||||
c.JSON(200, response.SuccessResponse(data))
|
||||
}
|
||||
|
||||
// SuccessWithMsg 带消息的成功响应
|
||||
func (r *ResponseHelper) SuccessWithMsg(c *gin.Context, data interface{}, msg string) {
|
||||
c.JSON(200, response.SuccessResponseWithMsg(data, msg))
|
||||
}
|
||||
|
||||
// Error 错误响应
|
||||
func (r *ResponseHelper) Error(c *gin.Context, code int) {
|
||||
c.JSON(200, response.ErrorResponse(code))
|
||||
}
|
||||
|
||||
// ErrorWithMsg 带消息的错误响应
|
||||
func (r *ResponseHelper) ErrorWithMsg(c *gin.Context, code int, msg string) {
|
||||
c.JSON(200, response.ErrorResponseWithMsg(code, msg))
|
||||
}
|
||||
|
||||
// HandleError 处理错误并返回相应的错误码
|
||||
func (r *ResponseHelper) HandleError(c *gin.Context, err error) {
|
||||
if err == nil {
|
||||
return
|
||||
}
|
||||
|
||||
errMsg := err.Error()
|
||||
|
||||
// 根据错误信息返回相应的错误码
|
||||
switch errMsg {
|
||||
case "用户不存在":
|
||||
r.Error(c, response.ERROR_USER_NOT_FOUND)
|
||||
case "获取用户 OpenID 失败":
|
||||
r.Error(c, response.ERROR_WX_OPENID_EMPTY)
|
||||
case "微信小程序 Code2Session 失败":
|
||||
r.Error(c, response.ERROR_WX_SESSION_FAILED)
|
||||
case "解密手机号失败":
|
||||
r.Error(c, response.ERROR_WX_PHONE_DECRYPT_FAILED)
|
||||
case "解密数据中未找到手机号":
|
||||
r.Error(c, response.ERROR_WX_PHONE_NOT_FOUND)
|
||||
case "用户 SessionKey 不存在,请重新登录":
|
||||
r.Error(c, response.ERROR_WX_SESSIONKEY_EMPTY)
|
||||
default:
|
||||
// 检查是否是数据库相关错误
|
||||
if isDBError(errMsg) {
|
||||
r.ErrorWithMsg(c, response.ERROR_INTERNAL, "数据库操作失败")
|
||||
} else {
|
||||
r.ErrorWithMsg(c, response.ERROR_COMMON, errMsg)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// isDBError 判断是否是数据库错误
|
||||
func isDBError(errMsg string) bool {
|
||||
dbErrorKeywords := []string{
|
||||
"Unknown column",
|
||||
"Table doesn't exist",
|
||||
"Duplicate entry",
|
||||
"Data too long",
|
||||
"cannot be null",
|
||||
"foreign key constraint",
|
||||
}
|
||||
|
||||
for _, keyword := range dbErrorKeywords {
|
||||
if contains(errMsg, keyword) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// contains 检查字符串是否包含子字符串
|
||||
func contains(s, substr string) bool {
|
||||
return len(s) >= len(substr) && (s == substr ||
|
||||
(len(s) > len(substr) &&
|
||||
(s[:len(substr)] == substr ||
|
||||
s[len(s)-len(substr):] == substr ||
|
||||
indexOf(s, substr) >= 0)))
|
||||
}
|
||||
|
||||
// indexOf 查找子字符串的位置
|
||||
func indexOf(s, substr string) int {
|
||||
for i := 0; i <= len(s)-len(substr); i++ {
|
||||
if s[i:i+len(substr)] == substr {
|
||||
return i
|
||||
}
|
||||
}
|
||||
return -1
|
||||
}
|
||||
|
||||
// 全局响应助手实例
|
||||
var ResponseUtil = &ResponseHelper{}
|
||||
Loading…
Reference in New Issue