81 lines
1.7 KiB
Go
81 lines
1.7 KiB
Go
package utils
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"reflect"
|
|
"strings"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/go-playground/locales/zh"
|
|
ut "github.com/go-playground/universal-translator"
|
|
"github.com/go-playground/validator/v10"
|
|
zhtrans "github.com/go-playground/validator/v10/translations/zh"
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
// 生成用户token
|
|
func NewUserToken() string {
|
|
id := uuid.Must(uuid.NewRandom()).String()
|
|
return strings.ReplaceAll(id, "-", "")
|
|
}
|
|
|
|
// NewRequestID 新请求ID生成
|
|
func NewRequestID(c *gin.Context) string {
|
|
if c == nil {
|
|
return uuid.Must(uuid.NewRandom()).String()
|
|
}
|
|
reqid := c.Request.Header.Get("requestid")
|
|
if reqid == "" {
|
|
reqid = uuid.Must(uuid.NewRandom()).String()
|
|
}
|
|
return reqid
|
|
}
|
|
|
|
// 新项目ID生成
|
|
func NewProjectID() string {
|
|
id := strings.ReplaceAll(uuid.Must(uuid.NewRandom()).String(), "-", "")
|
|
return id[6:]
|
|
}
|
|
|
|
func NewUserID() string {
|
|
id := strings.ReplaceAll(uuid.Must(uuid.NewRandom()).String(), "-", "")
|
|
return id[4:]
|
|
}
|
|
|
|
// NewGroupID 新组ID
|
|
func NewGroupID() string {
|
|
id := strings.ReplaceAll(uuid.Must(uuid.NewRandom()).String(), "-", "")
|
|
return id[2:]
|
|
}
|
|
|
|
func init() {
|
|
validate = validator.New()
|
|
}
|
|
|
|
var validate *validator.Validate
|
|
|
|
func ValidateError(req interface{}) error {
|
|
zh := zh.New()
|
|
uni := ut.New(zh)
|
|
trans, _ := uni.GetTranslator("zh")
|
|
|
|
validate.RegisterTagNameFunc(func(field reflect.StructField) string {
|
|
return field.Tag.Get("label")
|
|
})
|
|
|
|
e := zhtrans.RegisterDefaultTranslations(validate, trans)
|
|
if e != nil {
|
|
return errors.New("翻译器注册失败")
|
|
}
|
|
|
|
err := validate.Struct(req)
|
|
|
|
if err != nil {
|
|
for _, err := range err.(validator.ValidationErrors) {
|
|
return fmt.Errorf(err.Translate(trans))
|
|
}
|
|
}
|
|
return nil
|
|
}
|