feat: 合并pkg同类项
continuous-integration/drone/push Build is passing

This commit is contained in:
2022-01-13 14:28:50 +08:00
parent 80bd452cca
commit bb60689055
6 changed files with 37 additions and 41 deletions
+10
View File
@@ -0,0 +1,10 @@
package api
import "encoding/json"
// Response 所有api统一返回格式
type Response struct {
Code int `json:"code"`
Message string `json:"message"`
Data json.RawMessage `json:"data,omitempty"`
}
+83
View File
@@ -0,0 +1,83 @@
// Package api 关于所有第三方框架的二次封装
package api
import (
"context"
"github.com/gofiber/fiber/v2"
)
// FiberErrHandler fiber 错误处理的中间件
func FiberErrHandler(ctx *fiber.Ctx, err error) error {
code := fiber.StatusInternalServerError
msg := ""
if e, ok := err.(*fiber.Error); ok {
code = e.Code
msg = e.Message
}
if err != nil {
msg = err.Error()
}
return ctx.Status(code).JSON(Response{
Code: code,
Message: msg,
Data: nil,
})
}
// FibberRespHandler fiber resp的统一处理
func FibberRespHandler(c *fiber.Ctx) error {
if respContentType := string(c.Response().Header.ContentType()); respContentType == fiber.MIMEApplicationJSON {
resp := Response{
Code: 0,
Message: "",
Data: c.Response().Body(),
}
return c.JSON(resp)
}
return c.Next()
}
// FibberRecover fiberPanicRecover
func FibberRecover(c *fiber.Ctx) error {
if respContentType := string(c.Response().Header.ContentType()); respContentType == fiber.MIMEApplicationJSON {
resp := Response{
Code: 0,
Message: "",
Data: c.Response().Body(),
}
return c.JSON(resp)
}
return c.Next()
}
// FibberUserCtxWithTrace 把fibberCtx的traceId 置入UserCtx中
func FibberUserCtxWithTrace(c *fiber.Ctx) error {
c.SetUserContext(context.WithValue(context.Background(), fiber.HeaderXRequestID, c.Response().Header.Peek(fiber.HeaderXRequestID)))
return c.Next()
}
func NewFError(msg string) error {
return fiber.NewError(fiber.StatusInternalServerError, msg)
}
func NewFErrorWithCode(code int, msg string) error {
return fiber.NewError(code, msg)
}
func WarpFError(err error) error {
if err == nil {
return nil
}
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
}
func WarpFErrorWithCode(code int, err error) error {
if err == nil {
return nil
}
return fiber.NewError(code, err.Error())
}
+66
View File
@@ -0,0 +1,66 @@
package api
import (
"fmt"
"github.com/go-playground/locales/zh_Hans_CN"
ut "github.com/go-playground/universal-translator"
"github.com/go-playground/validator/v10"
zh_translations "github.com/go-playground/validator/v10/translations/zh"
"github.com/gofiber/fiber/v2"
"reflect"
"strings"
)
var Validate *validator.Validate
var trans ut.Translator
func init() {
Validate = validator.New()
zh := zh_Hans_CN.New()
uni := ut.New(zh, zh)
var ok bool
trans, ok = uni.GetTranslator("zh_Hans_CN")
if !ok {
panic(fmt.Errorf("uni.GetTranslator(%s) failed", "zh"))
}
Validate.RegisterTagNameFunc(func(field reflect.StructField) string {
addWarp := func(tag string) string {
return "[" + tag + "]"
}
if labelTag := field.Tag.Get("label"); labelTag != "" {
return addWarp(labelTag)
}
if jsonTag := field.Tag.Get("json"); jsonTag != "" {
return addWarp(jsonTag)
}
return addWarp(field.Name)
})
err := zh_translations.RegisterDefaultTranslations(Validate, trans)
if err != nil {
panic(err)
}
}
func Bind(c *fiber.Ctx, out interface{}) error {
if reflect.TypeOf(out).Kind() != reflect.Ptr {
return NewFError("bind must ptr")
}
if err := c.BodyParser(out); err != nil {
return WarpFError(err)
}
err := Validate.Struct(out)
if err != nil {
if errs, ok := err.(validator.ValidationErrors); ok {
errString := make([]string, 0, len(errs))
for _, fieldError := range errs.Translate(trans) {
errString = append(errString, fieldError)
}
err = fmt.Errorf("%s", strings.Join(errString, ","))
}
return WarpFErrorWithCode(fiber.StatusBadRequest, err)
}
return nil
}