rescode.go 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. package common
  2. import (
  3. "log/slog"
  4. )
  5. import (
  6. "github.com/gin-gonic/gin"
  7. "github.com/nicksnyder/go-i18n/v2/i18n"
  8. "github.com/spf13/cast"
  9. )
  10. const OKCode = "0x000000"
  11. const InvalidTokenCode = "0x010101"
  12. const InvalidRoleCode = "0x010102"
  13. type ResDesc string
  14. var (
  15. // 全局
  16. Success ResDesc = "ErrCode_Success"
  17. InvalidTokenError ResDesc = "ErrCode_InvalidTokenError"
  18. InvalidRoleError ResDesc = "ErrCode_InvalidRoleError"
  19. InvalidParamError ResDesc = "ErrCode_InvalidParamError"
  20. MissingParamError ResDesc = "ErrCode_MissingParamError"
  21. NotExistsError ResDesc = "ErrCode_NotExistsError"
  22. NotSupportError ResDesc = "ErrCode_NotSupportError"
  23. NoAuthError ResDesc = "ErrCode_NoAuthError"
  24. ExistsError ResDesc = "ErrCode_ExistsError"
  25. NotAvailableError ResDesc = "ErrCode_NotAvailableError"
  26. UnknownError ResDesc = "ErrCode_UnknownError"
  27. InvalidLanguageError ResDesc = "ErrCode_InvalidLanguageError"
  28. InvalidSourceError ResDesc = "ErrCode_InvalidSourceError"
  29. InvalidProductError ResDesc = "ErrCode_InvalidProductError"
  30. // 业务 错误
  31. InvalidIdError ResDesc = "Error_InvalidIdError"
  32. FieldTypeError ResDesc = "Error_FieldTypeError"
  33. )
  34. var (
  35. OK = &ResStatus{Code: "0x000000", Description: Success, Solution: ""}
  36. InvalidToken = &ResStatus{Code: "0x000101", Description: InvalidTokenError, Solution: ""}
  37. InvalidRole = &ResStatus{Code: "0x000102", Description: InvalidRoleError, Solution: ""}
  38. InvalidLanguage = &ResStatus{Code: "0x000103", Description: InvalidLanguageError, Solution: ""}
  39. InvalidSource = &ResStatus{Code: "0x000104", Description: InvalidSourceError, Solution: ""}
  40. InvalidProduct = &ResStatus{Code: "0x000105", Description: InvalidProductError, Solution: ""}
  41. GrpcCanceled = &ResStatus{Code: "0x000111", Description: "", Solution: ""}
  42. GrpcUnknown = &ResStatus{Code: "0x000112", Description: "", Solution: ""}
  43. GrpcInvalidArgument = &ResStatus{Code: "0x000113", Description: "", Solution: ""}
  44. GrpcDeadlineExceeded = &ResStatus{Code: "0x000114", Description: "", Solution: ""}
  45. GrpcNotFound = &ResStatus{Code: "0x000115", Description: "", Solution: ""}
  46. GrpcAlreadyExists = &ResStatus{Code: "0x000116", Description: "", Solution: ""}
  47. GrpcPermissionDenied = &ResStatus{Code: "0x000117", Description: "", Solution: ""}
  48. GrpcResourceExhausted = &ResStatus{Code: "0x000118", Description: "", Solution: ""}
  49. GrpcFailedPrecondition = &ResStatus{Code: "0x000119", Description: "", Solution: ""}
  50. GrpcAborted = &ResStatus{Code: "0x000120", Description: "", Solution: ""}
  51. GrpcOutOfRange = &ResStatus{Code: "0x000121", Description: "", Solution: ""}
  52. GrpcUnimplemented = &ResStatus{Code: "0x000122", Description: "", Solution: ""}
  53. GrpcInternal = &ResStatus{Code: "0x000123", Description: "", Solution: ""}
  54. GrpcUnavailable = &ResStatus{Code: "0x000124", Description: "", Solution: ""}
  55. GrpcDataLoss = &ResStatus{Code: "0x000125", Description: "", Solution: ""}
  56. GrpcUnauthenticated = &ResStatus{Code: "0x000126", Description: "", Solution: ""}
  57. InvalidParam = &ResStatus{Code: "0x000131", Description: InvalidParamError, Solution: ""}
  58. MissingParam = &ResStatus{Code: "0x000132", Description: MissingParamError, Solution: ""}
  59. NotExists = &ResStatus{Code: "0x000133", Description: NotExistsError, Solution: ""}
  60. NotSupport = &ResStatus{Code: "0x000134", Description: NotSupportError, Solution: ""}
  61. NoAuth = &ResStatus{Code: "0x000135", Description: NoAuthError, Solution: ""}
  62. Exists = &ResStatus{Code: "0x000136", Description: ExistsError, Solution: ""}
  63. NotAvailable = &ResStatus{Code: "0x000137", Description: NotAvailableError, Solution: ""}
  64. InvalidUsernameOrPasswd = &ResStatus{Code: "0x010101", Description: "ErrCode_InvalidUsernameOrPasswdError", Solution: ""}
  65. Unknown = &ResStatus{Code: "0x999999", Description: UnknownError, Solution: ""}
  66. )
  67. func helper(code string, msg ResDesc) *ResStatus {
  68. return &ResStatus{
  69. Code: code,
  70. Description: msg,
  71. Solution: "",
  72. }
  73. }
  74. type ResStatus struct {
  75. Code string `json:"code"`
  76. Description ResDesc `json:"description"`
  77. Params map[string]interface{} `json:"-"`
  78. Solution string `json:"solution"`
  79. }
  80. func (p *ResStatus) Error() string {
  81. return string(p.Description)
  82. }
  83. func (p *ResStatus) Desc(msg ResDesc) *ResStatus {
  84. return &ResStatus{p.Code, msg, nil, p.Solution}
  85. }
  86. func convertParamsToMap(params ...interface{}) map[string]interface{} {
  87. result := make(map[string]interface{})
  88. for i := 0; i < len(params); i += 2 {
  89. var value interface{}
  90. if i+1 < len(params) {
  91. value = params[i+1]
  92. } else {
  93. value = nil
  94. }
  95. result[cast.ToString(params[i])] = value
  96. }
  97. return result
  98. }
  99. func (p *ResStatus) SetParam(params ...interface{}) *ResStatus {
  100. return &ResStatus{p.Code, p.Description, convertParamsToMap(params...), p.Solution}
  101. }
  102. func (p *ResStatus) Translator(localizer *i18n.Localizer) *ResStatus {
  103. t, err := localizer.Localize(&i18n.LocalizeConfig{
  104. MessageID: string(p.Description),
  105. TemplateData: p.Params,
  106. })
  107. if err != nil {
  108. slog.Error("translator fail\n", "desc", p.Description, "err", err)
  109. t = string(p.Description)
  110. }
  111. return &ResStatus{p.Code, ResDesc(t), p.Params, p.Solution}
  112. }
  113. func (p *ResStatus) H(data ...interface{}) gin.H {
  114. if len(data) > 0 {
  115. return gin.H{
  116. "code": p.Code,
  117. "description": p.Description,
  118. "solution": p.Solution,
  119. "data": data[0],
  120. }
  121. }
  122. return gin.H{
  123. "code": p.Code,
  124. "description": p.Description,
  125. "solution": p.Solution,
  126. "data": gin.H{},
  127. }
  128. }