Files
Message-Push-Nest/pkg/app/form.go
T

63 lines
1.5 KiB
Go

package app
import (
"fmt"
"github.com/astaxie/beego/validation"
"github.com/gin-gonic/gin"
"github.com/go-playground/validator/v10"
"message-nest/pkg/e"
"message-nest/pkg/util"
"net/http"
"strings"
)
// BindAndValid binds and validates data
func BindAndValid(c *gin.Context, form interface{}) (int, int) {
err := c.Bind(form)
if err != nil {
return http.StatusBadRequest, e.INVALID_PARAMS
}
valid := validation.Validation{}
check, err := valid.Valid(form)
if err != nil {
return http.StatusInternalServerError, e.ERROR
}
if !check {
MarkErrors(valid.Errors)
return http.StatusBadRequest, e.INVALID_PARAMS
}
return http.StatusOK, e.SUCCESS
}
func CommonPlaygroundValid(obj interface{}) (int, string) {
if err := util.CustomerValidate.Struct(obj); err != nil {
errs := err.(validator.ValidationErrors)
errMsg := BuildValidationErrors(errs)
return http.StatusBadRequest, errMsg
}
return http.StatusOK, ""
}
func BindJsonAndPlayValid(c *gin.Context, req interface{}) (int, string) {
err := c.ShouldBindJSON(req)
if err != nil {
return http.StatusBadRequest, err.Error()
} else {
return CommonPlaygroundValid(req)
}
}
func BuildValidationErrors(errors []validator.FieldError) string {
var errorMsgBuilder strings.Builder
for i, err := range errors {
if i > 0 {
errorMsgBuilder.WriteString("; ")
}
message := err.Translate(util.Trans)
errorMsgBuilder.WriteString(fmt.Sprintf("%s", message))
}
return errorMsgBuilder.String()
}