Files
go-admin/tools/utils.go
T
2020-09-23 00:35:07 +08:00

95 lines
2.2 KiB
Go

package tools
import (
"errors"
"fmt"
"gorm.io/gorm"
"log"
"runtime"
"strconv"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
"github.com/spf13/cast"
"golang.org/x/crypto/bcrypt"
)
// 不建议使用的方法(即将过时)
// Deprecated method (out of date)
func StrToInt(err error, index string) int {
result, err := strconv.Atoi(index)
if err != nil {
HasError(err, "string to int error"+err.Error(), -1)
}
return result
}
func CompareHashAndPassword(e string, p string) (bool, error) {
err := bcrypt.CompareHashAndPassword([]byte(e), []byte(p))
if err != nil {
return false, err
}
return true, nil
}
// Assert 条件断言
// 当断言条件为 假 时触发 panic
// 对于当前请求不会再执行接下来的代码,并且返回指定格式的错误信息和错误码
func Assert(condition bool, msg string, code ...int) {
if !condition {
statusCode := 200
if len(code) > 0 {
statusCode = code[0]
}
panic("CustomError#" + strconv.Itoa(statusCode) + "#" + msg)
}
}
// HasError 错误断言
// 当 error 不为 nil 时触发 panic
// 对于当前请求不会再执行接下来的代码,并且返回指定格式的错误信息和错误码
// 若 msg 为空,则默认为 error 中的内容
func HasError(err error, msg string, code ...int) {
if err != nil {
statusCode := 200
if len(code) > 0 {
statusCode = code[0]
}
if msg == "" {
msg = err.Error()
}
_, file, line, _ := runtime.Caller(1)
log.Printf("%s:%v error: %#v", file, line, err)
panic("CustomError#" + strconv.Itoa(statusCode) + "#" + msg)
}
}
// GenerateMsgIDFromContext 生成msgID
func GenerateMsgIDFromContext(c *gin.Context) string {
var msgID string
data, ok := c.Get("msgID")
if !ok {
msgID = uuid.New().String()
c.Set("msgID", msgID)
return msgID
}
msgID = cast.ToString(data)
return msgID
}
// GetOrm 获取orm连接
func GetOrm(c *gin.Context) (*gorm.DB, error) {
msgID := GenerateMsgIDFromContext(c)
idb, exist := c.Get("db")
if !exist {
return nil, errors.New(fmt.Sprintf("msgID[%s], db connect not exist", msgID))
}
switch idb.(type) {
case *gorm.DB:
//新增操作
return idb.(*gorm.DB), nil
default:
return nil, errors.New(fmt.Sprintf("msgID[%s], db connect not exist", msgID))
}
}