api.go 910 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package api
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "log"
  5. "net/http"
  6. "strings"
  7. ut "github.com/go-playground/universal-translator"
  8. val "github.com/go-playground/validator/v10"
  9. )
  10. func ErrorHandler(c *gin.Context, err error) {
  11. log.Println(err)
  12. c.JSON(http.StatusInternalServerError, gin.H{
  13. "message": err.Error(),
  14. })
  15. }
  16. type ValidError struct {
  17. Key string
  18. Message string
  19. }
  20. type ValidErrors gin.H
  21. func BindAndValid(c *gin.Context, v interface{}) (bool, ValidErrors) {
  22. errs := make(ValidErrors)
  23. err := c.ShouldBind(v)
  24. if err != nil {
  25. log.Println(err)
  26. v := c.Value("trans")
  27. trans, _ := v.(ut.Translator)
  28. verrs, ok := err.(val.ValidationErrors)
  29. if !ok {
  30. return false, errs
  31. }
  32. for key, value := range verrs.Translate(trans) {
  33. k := strings.Split(key, ".")
  34. sub := strings.ToLower(k[1])
  35. errs[sub] = value
  36. }
  37. return false, errs
  38. }
  39. return true, nil
  40. }