-
Notifications
You must be signed in to change notification settings - Fork 2
/
validator.go
81 lines (64 loc) · 1.58 KB
/
validator.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package core
import (
"errors"
"gopkg.in/asaskevich/govalidator.v9"
"net/http"
"strings"
)
type Validator struct{}
type FieldError struct {
Code string `json:"code"`
Message string `json:"message"`
Fields interface{} `json:"fields,omitempty"`
}
func (f FieldError) GetCode() string {
return f.Code
}
func (FieldError) GetStatus() int {
return http.StatusBadRequest
}
func (f FieldError) Error() string {
return "ErrorCode : " + f.Code
}
func (f FieldError) OriginalError() error {
return errors.New(f.Error())
}
func (f FieldError) OriginalErrorMessage() string {
return f.Error()
}
func (f FieldError) JSON() interface{} {
return f
}
func (f FieldError) GetMessage() interface{} {
return f.Message
}
type jsonErr struct {
Code string `json:"code"`
Message string `json:"message"`
Data interface{} `json:"data,omitempty"`
}
func ErrorToJson(err error) (m map[string]jsonErr) {
m = make(map[string]jsonErr)
for _, value := range err.(govalidator.Errors) {
m[value.(govalidator.Error).Name] = jsonErr{
Code: strings.ToUpper(value.(govalidator.Error).Validator),
Message: value.(govalidator.Error).Err.Error(),
}
}
return
}
func (cv *Validator) Validate(i interface{}) error {
govalidator.SetFieldsRequiredByDefault(true)
defer Recover("Validator has errors")
if _, err := govalidator.ValidateStruct(i); err != nil {
return NewValidatorFields(ErrorToJson(err))
}
return nil
}
func NewValidatorFields(fields interface{}) IError {
return &FieldError{
Code: "INVALID_PARAMS",
Message: "Invalid parameters",
Fields: fields,
}
}