Files
bj_power/bj_power_mes/common/httpx/response.go
T

78 lines
2.3 KiB
Go

package xhttp
import (
"context"
"errors"
"bj_power_mes/common/errorx"
"github.com/go-playground/validator/v10"
"github.com/iancoleman/strcase"
"github.com/zeromicro/go-zero/core/logx"
)
type Body struct {
Code uint32 `json:"code"`
Msg string `json:"message"`
Fields []FieldError `json:"fields,omitempty"`
Detail string `json:"detail,omitempty"`
Data interface{} `json:"data,omitempty"`
}
type FieldError struct {
Field string `json:"field"`
Error string `json:"error"`
}
func OkJsonCtx(_ context.Context, data any) any {
return Body{Msg: "OK", Data: data}
}
func ErrorCtx(ctx context.Context, err error) (int, any) {
logx.WithContext(ctx).Errorf("[API-ERR] %v", err)
var errs validator.ValidationErrors
if errors.As(err, &errs) { // 参数验证错误
var fields []FieldError
for _, er := range errs {
fields = append(fields, FieldError{
Field: strcase.ToLowerCamel(er.StructField()),
Error: er.Translate(translator),
})
}
body := Body{Code: errorx.RequestParamInvalidWithField, Msg: errorx.MapErrMsg(errorx.RequestParamInvalid), Fields: fields}
return 200, body
}
var fes errorx.ServiceFieldErrors
if errors.As(err, &fes) { // 业务验证错误
es := fes.Errors()
if len(es) > 0 {
fieldErrors := make([]FieldError, len(es))
for i, err := range es {
var e errorx.ServiceFieldError
errors.As(err, &e)
fieldErrors[i].Field = e.Field()
fieldErrors[i].Error = e.Error()
}
body := Body{Code: errorx.RequestParamInvalidWithField, Msg: errorx.MapErrMsg(errorx.RequestParamInvalid), Fields: fieldErrors}
return 200, body
}
return 200, Body{Code: errorx.RequestParamInvalid, Msg: errorx.MapErrMsg(errorx.RequestParamInvalid)}
}
var fe errorx.ServiceFieldError
if errors.As(err, &fe) { // 业务验证错误
fieldErrors := make([]FieldError, 1)
fieldErrors[0].Field = fe.Field()
fieldErrors[0].Error = fe.Error()
body := Body{Code: fe.Code(), Msg: errorx.MapErrMsg(fe.Code()), Fields: fieldErrors}
return 200, body
}
var ce errorx.ServiceError
if errors.As(err, &ce) {
body := Body{Code: ce.Code(), Msg: errorx.MapErrMsg(ce.Code(), ce.Error())}
return 200, body
}
body := Body{Code: errorx.CommonErrCode, Msg: errorx.MapErrMsg(errorx.CommonErrCode), Detail: err.Error()}
return 200, body
}