render.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package base
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "github.com/pkg/errors"
  5. "gopkg.in/go-playground/validator.v8"
  6. "net/http"
  7. )
  8. // TRenderJson for API
  9. type TRenderJson struct {
  10. ReturnCode int `json:"returnCode"`
  11. ReturnMsg string `json:"returnMsg"`
  12. ReturnUserMsg string `json:"returnUserMsg"`
  13. Data map[string]interface{} `json:"data"`
  14. }
  15. // TRenderJsonShell for API
  16. type TRenderJsonShell struct {
  17. ReturnCode int `json:"returnCode" example:"0"`
  18. ReturnMsg string `json:"returnMsg" example:"succ"`
  19. ReturnUserMsg string `json:"returnUserMsg" example:"成功"`
  20. Data interface{} `json:"data"`
  21. }
  22. // GetReturnCode for API
  23. func (t TRenderJsonShell) GetReturnCode() int {
  24. return t.ReturnCode
  25. }
  26. // TRenderJsonBase !!! HACK ME 兼容 ware service
  27. type TRenderJsonBase interface {
  28. GetReturnCode() int
  29. }
  30. // GetReturnCode for API
  31. func (t TRenderJson) GetReturnCode() int {
  32. return t.ReturnCode
  33. }
  34. // RenderJsonSucc for API
  35. func RenderJsonSucc(ctx *gin.Context, data map[string]interface{}) {
  36. renderjson := TRenderJson{0, "succ", "成功", data}
  37. ctx.JSON(http.StatusOK, renderjson)
  38. ctx.Set("render", renderjson)
  39. return
  40. }
  41. func RenderJsonShellSucc(ctx *gin.Context, data interface{}) {
  42. renderjson := TRenderJsonShell{0, "succ", "成功", data}
  43. ctx.JSON(http.StatusOK, renderjson)
  44. ctx.Set("render", renderjson)
  45. return
  46. }
  47. func RenderJsonFail(ctx *gin.Context, err error) {
  48. var renderjson TRenderJson
  49. switch errors.Cause(err).(type) {
  50. case Error:
  51. renderjson.ReturnMsg = errors.Cause(err).(Error).ErrorMsg
  52. renderjson.ReturnUserMsg = errors.Cause(err).(Error).ErrorUserMsg
  53. renderjson.ReturnCode = errors.Cause(err).(Error).ErrorCode
  54. case validator.ValidationErrors:
  55. renderjson.ReturnMsg = "ParamError"
  56. renderjson.ReturnUserMsg = "参数错误"
  57. renderjson.ReturnCode = 4000000
  58. var validateData []interface{}
  59. for _, err := range errors.Cause(err).(validator.ValidationErrors) {
  60. validateData = append(validateData, map[string]interface{}{"message": "params check error", "tag": err.Tag, "field": err.Field})
  61. }
  62. renderjson.Data = map[string]interface{}{"validateData": validateData}
  63. default:
  64. renderjson.ReturnMsg = errors.Cause(err).Error()
  65. renderjson.ReturnUserMsg = ""
  66. renderjson.ReturnCode = -1
  67. }
  68. ctx.JSON(http.StatusOK, renderjson)
  69. ctx.Set("render", renderjson)
  70. //打印错误栈
  71. StackLogger(ctx, err)
  72. return
  73. }
  74. // TRenderError for API
  75. type TRenderError struct {
  76. TRenderJson
  77. Err Error
  78. }
  79. func (err TRenderError) Error() string {
  80. return err.Err.Error()
  81. }