api.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package api
  2. import (
  3. "errors"
  4. "github.com/0xJacky/Nginx-UI/internal/logger"
  5. "github.com/gin-gonic/gin"
  6. val "github.com/go-playground/validator/v10"
  7. "net/http"
  8. "reflect"
  9. )
  10. func ErrHandler(c *gin.Context, err error) {
  11. logger.GetLogger().Errorln(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. func BindAndValid(c *gin.Context, target interface{}) bool {
  21. errs := make(map[string]string)
  22. err := c.ShouldBindJSON(target)
  23. if err != nil {
  24. logger.Error("bind err", err)
  25. var verrs val.ValidationErrors
  26. ok := errors.As(err, &verrs)
  27. if !ok {
  28. logger.Error("valid err", verrs)
  29. c.JSON(http.StatusNotAcceptable, gin.H{
  30. "message": "Requested with wrong parameters",
  31. "code": http.StatusNotAcceptable,
  32. "error": verrs,
  33. })
  34. return false
  35. }
  36. for _, value := range verrs {
  37. t := reflect.ValueOf(target)
  38. realType := t.Type().Elem()
  39. field, _ := realType.FieldByName(value.StructField())
  40. errs[field.Tag.Get("json")] = value.Tag()
  41. }
  42. c.JSON(http.StatusNotAcceptable, gin.H{
  43. "errors": errs,
  44. "message": "Requested with wrong parameters",
  45. "code": http.StatusNotAcceptable,
  46. })
  47. return false
  48. }
  49. return true
  50. }