package response import ( "base-framework/pkg/router" "net/http" ) type ErrorInfo struct { Method string `json:"method,omitempty"` Path string `json:"path,omitempty"` Message string `json:"message,omitempty"` Stack string `json:"stack,omitempty"` } // Result 统一响应结构体 type Result struct { Code string `json:"code"` Message string `json:"message"` Data interface{} `json:"data,omitempty"` Error *ErrorInfo `json:"error,omitempty"` } const ( CodeSuccess = "0000" // 成功 CodeFail = "0001" // 失败 CodeNoLogin = "1001" // 未登录 CodeLoginExpired = "1002" // 登录过期 CodeInvalidToken = "1003" // Token 无效 CodeInvalidOrgCode = "1004" // 机构码有误 CodeInvalidAccount = "1005" // 账号或密码有误 ) var codeMessages = map[string]string{ CodeSuccess: "请求成功", CodeFail: "请求失败", CodeNoLogin: "未登录", CodeLoginExpired: "登录已过期", CodeInvalidToken: "Token 无效", CodeInvalidOrgCode: "机构码有误", CodeInvalidAccount: "账号或密码有误", } // 兜底提示 const defaultMessage = "未知错误" // Builder 链式构造器 type Builder struct { c *router.Context result Result } // Success 构造成功响应 func Success(c *router.Context) *Builder { return &Builder{ c: c, result: Result{ Code: CodeSuccess, Message: getMessage(CodeSuccess), }, } } // Error 构造失败响应 func Error(c *router.Context) *Builder { return &Builder{ c: c, result: Result{ Code: CodeFail, Message: getMessage(CodeFail), }, } } // Code 设置状态码(自动填充默认提示,除非后面手动改) func (b *Builder) Code(code string) *Builder { b.result.Code = code b.result.Message = getMessage(code) return b } // Message 设置提示消息(覆盖默认的) func (b *Builder) Message(msg string) *Builder { b.result.Message = msg return b } // Data 设置返回数据 func (b *Builder) Data(data interface{}) *Builder { b.result.Data = data return b } // ErrorInfo 设置错误信息 func (b *Builder) ErrorInfo(err *ErrorInfo) *Builder { b.result.Error = err return b } // Send 发送响应 func (b *Builder) Send() { if b.result.Data == nil { b.result.Data = "" } b.c.JSON(http.StatusOK, b.result) } // getMessage 获取状态码对应提示,兜底 defaultMessage func getMessage(code string) string { if msg, ok := codeMessages[code]; ok { return msg } return defaultMessage }