response.go 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. package response
  2. // 统一响应结构
  3. type Response struct {
  4. Code int `json:"code"` // 0=成功,非0=失败
  5. Msg string `json:"msg,omitempty"` // 提示信息
  6. Data interface{} `json:"data,omitempty"` // 具体数据
  7. Error string `json:"error,omitempty"` // 错误详情
  8. }
  9. // 错误码定义(结合你的业务场景)
  10. const (
  11. CodeOK = 0
  12. CodeParamError = 1001 // 参数错误
  13. CodeNotFound = 1002 // 资源未找到
  14. CodeDBError = 1003 // 数据库操作失败
  15. // 更精细的数据库错误码(用于区分连接/查询/元数据/事务等)
  16. CodeDBConnError = 1101 // 数据库连接失败
  17. CodeDBQueryError = 1102 // 数据库查询/执行失败
  18. CodeDBMetaError = 1103 // 数据库元数据查询失败
  19. CodeAuthError = 1004 // 鉴权失败
  20. CodePermission = 1005 // 权限不足
  21. CodeConflict = 1006 // 资源冲突
  22. CodeTimeout = 1007 // 超时
  23. CodeInternalError = 1099 // 服务器内部错误
  24. // 连接池相关
  25. CodeConnPoolFull = 2001 // 连接池已满
  26. CodeConnPoolClosed = 2002 // 连接池已关闭
  27. CodeConnNotExist = 2003 // 连接不存在
  28. CodeConnAlreadyExist = 2004 // 连接已存在
  29. // 存储相关
  30. CodeGroupNotExist = 3001 // 分组不存在
  31. CodeGroupExist = 3002 // 分组已存在
  32. CodeSaveFailed = 3003 // 保存失败
  33. CodeLoadFailed = 3004 // 加载失败
  34. CodeDeleteFailed = 3005 // 删除失败
  35. // 脚本 (Script) 相关
  36. CodeScriptNotExist = 4001 // 脚本不存在
  37. CodeScriptExist = 4002 // 脚本已存在
  38. CodeScriptSaveErr = 4003 // 脚本保存失败
  39. CodeScriptLoadErr = 4004 // 脚本加载失败
  40. CodeScriptDeleteErr = 4005 // 脚本删除失败
  41. // 其他可扩展
  42. )
  43. // AppError 支持自定义错误
  44. type AppError struct {
  45. Code int
  46. Msg string
  47. }
  48. func (e *AppError) Error() string { return e.Msg }
  49. func NewAppError(code int, msg string) *AppError {
  50. return &AppError{Code: code, Msg: msg}
  51. }
  52. // 常用错误变量(可按需扩展)
  53. var (
  54. ErrParam = NewAppError(CodeParamError, "参数错误")
  55. ErrNotFound = NewAppError(CodeNotFound, "资源未找到")
  56. ErrDB = NewAppError(CodeDBError, "数据库操作失败")
  57. // 细化数据库错误
  58. ErrDBConn = NewAppError(CodeDBConnError, "数据库连接失败")
  59. ErrDBQuery = NewAppError(CodeDBQueryError, "数据库查询失败")
  60. ErrDBMeta = NewAppError(CodeDBMetaError, "数据库元数据查询失败")
  61. ErrAuth = NewAppError(CodeAuthError, "鉴权失败")
  62. ErrPermission = NewAppError(CodePermission, "权限不足")
  63. ErrConflict = NewAppError(CodeConflict, "资源冲突")
  64. ErrTimeout = NewAppError(CodeTimeout, "请求超时")
  65. ErrInternal = NewAppError(CodeInternalError, "服务器内部错误")
  66. // 连接池相关
  67. ErrConnPoolFull = NewAppError(CodeConnPoolFull, "连接池已满")
  68. ErrConnPoolClosed = NewAppError(CodeConnPoolClosed, "连接池已关闭")
  69. ErrConnNotExist = NewAppError(CodeConnNotExist, "连接不存在")
  70. ErrConnAlreadyExist = NewAppError(CodeConnAlreadyExist, "连接已存在")
  71. // 存储相关
  72. ErrGroupNotExist = NewAppError(CodeGroupNotExist, "分组不存在")
  73. ErrGroupExist = NewAppError(CodeGroupExist, "分组已存在")
  74. ErrSaveFailed = NewAppError(CodeSaveFailed, "保存失败")
  75. ErrLoadFailed = NewAppError(CodeLoadFailed, "加载失败")
  76. ErrDeleteFailed = NewAppError(CodeDeleteFailed, "删除失败")
  77. // 脚本 (Script) 相关
  78. ErrScriptNotExist = NewAppError(CodeScriptNotExist, "脚本不存在")
  79. ErrScriptExist = NewAppError(CodeScriptExist, "脚本已存在")
  80. ErrScriptSaveErr = NewAppError(CodeScriptSaveErr, "脚本保存失败")
  81. ErrScriptLoadErr = NewAppError(CodeScriptLoadErr, "脚本加载失败")
  82. ErrScriptDeleteErr = NewAppError(CodeScriptDeleteErr, "脚本删除失败")
  83. )
  84. // 响应辅助函数
  85. func Success(data interface{}) Response {
  86. return Response{Code: CodeOK, Msg: "操作成功", Data: data}
  87. }
  88. func SuccessWithMsg(msg string, data interface{}) Response {
  89. return Response{Code: CodeOK, Msg: msg, Data: data}
  90. }
  91. func Error(msg string) Response {
  92. return Response{Code: CodeInternalError, Msg: msg}
  93. }
  94. func ErrorWithDetail(msg string, err error) Response {
  95. errorDetail := ""
  96. if err != nil {
  97. errorDetail = err.Error()
  98. }
  99. return Response{Code: CodeInternalError, Msg: msg, Error: errorDetail}
  100. }
  101. func ErrorWithCode(code int, msg string) Response {
  102. return Response{Code: code, Msg: msg}
  103. }
  104. func ErrorWithCodeAndDetail(code int, msg string, err error) Response {
  105. errorDetail := ""
  106. if err != nil {
  107. errorDetail = err.Error()
  108. }
  109. return Response{Code: code, Msg: msg, Error: errorDetail}
  110. }
  111. func ParamError(msg string) Response {
  112. return Response{Code: CodeParamError, Msg: msg}
  113. }
  114. func ParamErrorWithDetail(msg string, err error) Response {
  115. errorDetail := ""
  116. if err != nil {
  117. errorDetail = err.Error()
  118. }
  119. return Response{Code: CodeParamError, Msg: msg, Error: errorDetail}
  120. }
  121. func NotFound(msg string) Response {
  122. return Response{Code: CodeNotFound, Msg: msg}
  123. }
  124. func NotFoundWithDetail(msg string, err error) Response {
  125. errorDetail := ""
  126. if err != nil {
  127. errorDetail = err.Error()
  128. }
  129. return Response{Code: CodeNotFound, Msg: msg, Error: errorDetail}
  130. }
  131. func DBError(msg string) Response {
  132. return Response{Code: CodeDBError, Msg: msg}
  133. }
  134. func DBErrorWithDetail(msg string, err error) Response {
  135. errorDetail := ""
  136. if err != nil {
  137. errorDetail = err.Error()
  138. }
  139. return Response{Code: CodeDBError, Msg: msg, Error: errorDetail}
  140. }
  141. func GroupNotExistError(msg string) Response {
  142. return Response{Code: CodeGroupNotExist, Msg: msg}
  143. }
  144. func GroupNotExistErrorWithDetail(msg string, err error) Response {
  145. errorDetail := ""
  146. if err != nil {
  147. errorDetail = err.Error()
  148. }
  149. return Response{Code: CodeGroupNotExist, Msg: msg, Error: errorDetail}
  150. }