response.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. package webutils
  2. import (
  3. "encoding/base64"
  4. "encoding/json"
  5. "net/http"
  6. "github.com/gin-gonic/gin"
  7. ut "github.com/go-playground/universal-translator"
  8. "github.com/sirupsen/logrus"
  9. "gogs.daxia.dev/huanan/pkg.daxia.dev.git/encrypt"
  10. )
  11. const (
  12. CodeSuccess = 20000
  13. CodeFailed = -1
  14. CodeIllegalToken = 50008
  15. CodeTokenExpired = 50014
  16. CodeOther = 50012
  17. )
  18. var (
  19. trans ut.Translator
  20. )
  21. type RespError struct {
  22. msg string
  23. }
  24. func NewRespError(msg string) RespError {
  25. return RespError{
  26. msg: msg,
  27. }
  28. }
  29. func (p *RespError) Error() string {
  30. return ""
  31. }
  32. type Response struct {
  33. Code int `json:"code"`
  34. Msg string `json:"msg"`
  35. Data interface{} `json:"data"`
  36. }
  37. type ResponseGen[T interface{}] struct {
  38. Code int `json:"code"`
  39. Msg string `json:"msg"`
  40. Data T `json:"data"`
  41. }
  42. func FailedResponse(c *gin.Context, msg string) {
  43. if c == nil {
  44. return
  45. }
  46. c.JSON(http.StatusOK, &Response{
  47. Code: CodeFailed,
  48. Msg: msg,
  49. Data: nil,
  50. })
  51. panic(NewRespError("failed"))
  52. }
  53. func FailedResponseEncrypt(c *gin.Context, msg string, encKey []byte) {
  54. if c == nil {
  55. return
  56. }
  57. if encKey != nil {
  58. respData, _ := json.Marshal(Response{
  59. Code: CodeFailed,
  60. Msg: msg,
  61. Data: nil,
  62. })
  63. encData, _ := encrypt.AesEncrypt(respData, encKey)
  64. encDataStr := base64.StdEncoding.EncodeToString(encData)
  65. c.Data(200, "application/json", []byte(encDataStr))
  66. panic(NewRespError("failed"))
  67. }
  68. c.JSON(http.StatusOK, &Response{
  69. Code: CodeFailed,
  70. Msg: msg,
  71. Data: nil,
  72. })
  73. panic(NewRespError("failed"))
  74. }
  75. func FailedResponseErr(c *gin.Context, err error) {
  76. if c == nil {
  77. return
  78. }
  79. logrus.Error(err)
  80. FailedResponse(c, "内部错误")
  81. }
  82. func FailedResponseWithCode(c *gin.Context, code int, msg string) {
  83. c.JSON(http.StatusOK, &Response{
  84. Code: code,
  85. Msg: msg,
  86. Data: nil,
  87. })
  88. panic(NewRespError("failed"))
  89. }
  90. func SuccessResponse(c *gin.Context, data interface{}) {
  91. c.JSON(http.StatusOK, &Response{
  92. Code: CodeSuccess,
  93. Msg: "",
  94. Data: data,
  95. })
  96. panic(NewRespError("success"))
  97. }
  98. func SuccessResponseEncrypt(c *gin.Context, data interface{}, encKey []byte) {
  99. if encKey != nil {
  100. respData, _ := json.Marshal(Response{
  101. Code: CodeSuccess,
  102. Msg: "",
  103. Data: data,
  104. })
  105. encData, _ := encrypt.AesEncrypt(respData, encKey)
  106. encDataStr := base64.StdEncoding.EncodeToString(encData)
  107. c.Data(200, "application/json", []byte(encDataStr))
  108. panic(NewRespError("failed"))
  109. }
  110. c.JSON(http.StatusOK, &Response{
  111. Code: CodeSuccess,
  112. Msg: "",
  113. Data: data,
  114. })
  115. panic(NewRespError("success"))
  116. }