Skip to content

Commit f975346

Browse files
committed
feat: commit at 20241227173948
1 parent 4afc658 commit f975346

File tree

3 files changed

+34
-11
lines changed

3 files changed

+34
-11
lines changed

pkg/core/core.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func ShouldBindUri[T any](c *gin.Context, rq T, validators ...ValidatorFn[T]) er
4242
func ReadRequest[T any](c *gin.Context, rq T, bindFn BindFn, validators ...ValidatorFn[T]) error {
4343
// 调用绑定函数绑定请求数据
4444
if err := bindFn(rq); err != nil {
45-
return err
45+
return errorsx.ErrBind.WithMessage(err.Error())
4646
}
4747

4848
// 如果目标结构体实现了 Default 接口,则调用其 Default 方法设置默认值

pkg/errorsx/code.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package errorsx
2+
3+
import "net/http"
4+
5+
// errorsx 预定义标准的错误.
6+
var (
7+
// OK 代表请求成功.
8+
OK = &ErrorX{Code: http.StatusOK, Message: ""}
9+
10+
// ErrInternal 表示所有未知的服务器端错误.
11+
ErrInternal = &ErrorX{Code: http.StatusInternalServerError, Reason: "InternalError", Message: "Internal server error."}
12+
13+
// ErrNotFound 表示资源未找到.
14+
ErrNotFound = &ErrorX{Code: http.StatusNotFound, Reason: "NotFound", Message: "Resource not found."}
15+
16+
// ErrBind 表示请求体绑定错误.
17+
ErrBind = &ErrorX{Code: http.StatusBadRequest, Reason: "BindError", Message: "Error occurred while binding the request body to the struct."}
18+
19+
// ErrInvalidArgument 表示参数验证失败.
20+
ErrInvalidArgument = &ErrorX{Code: http.StatusBadRequest, Reason: "InvalidArgument", Message: "Argument verification failed."}
21+
22+
// ErrUnauthenticated 表示认证失败.
23+
ErrUnauthenticated = &ErrorX{Code: http.StatusUnauthorized, Reason: "Unauthenticated", Message: "Unauthenticated."}
24+
25+
// ErrPermissionDenied 表示请求没有权限.
26+
ErrPermissionDenied = &ErrorX{Code: http.StatusForbidden, Reason: "PermissionDenied", Message: "Permission denied. Access to the requested resource is forbidden."}
27+
28+
// ErrOperationFailed 表示操作失败.
29+
ErrOperationFailed = &ErrorX{Code: http.StatusConflict, Reason: "OperationFailed", Message: "The requested operation has failed. Please try again later."}
30+
)

pkg/errorsx/errorsx.go

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,6 @@ import (
1010
"google.golang.org/grpc/status"
1111
)
1212

13-
const (
14-
// UnknownCode 定义了未知错误的代码.
15-
UnknownCode = http.StatusInternalServerError
16-
// UnknownReason 定义了未知错误的原因.
17-
UnknownReason = ""
18-
)
19-
2013
// ErrorX 定义了 OneX 项目体系中使用的错误类型,用于描述错误的详细信息.
2114
type ErrorX struct {
2215
// Code 表示错误的 HTTP 状态码,用于与客户端进行交互时标识错误的类型.
@@ -106,7 +99,7 @@ func Code(err error) int {
10699
// Reason 返回特定错误的原因.
107100
func Reason(err error) string {
108101
if err == nil {
109-
return UnknownReason
102+
return ErrInternal.Reason
110103
}
111104
return FromError(err).Reason
112105
}
@@ -129,12 +122,12 @@ func FromError(err error) *ErrorX {
129122
// 则返回一个带有默认值的 ErrorX,表示是一个未知类型的错误.
130123
gs, ok := status.FromError(err)
131124
if !ok {
132-
return New(UnknownCode, UnknownReason, err.Error())
125+
return New(ErrInternal.Code, ErrInternal.Reason, err.Error())
133126
}
134127

135128
// 如果 err 是 gRPC 的错误类型,会成功返回一个 gRPC status 对象(gs).
136129
// 使用 gRPC 状态中的错误代码和消息创建一个 ErrorX.
137-
ret := New(httpstatus.FromGRPCCode(gs.Code()), UnknownReason, gs.Message())
130+
ret := New(httpstatus.FromGRPCCode(gs.Code()), ErrInternal.Reason, gs.Message())
138131

139132
// 遍历 gRPC 错误详情中的所有附加信息(Details).
140133
for _, detail := range gs.Details() {

0 commit comments

Comments
 (0)