Check /
(value any)
| 188 | |
| 189 | // Check / |
| 190 | func (m *MyValidator) Check(value any) (errFields []*FormErrorField, err error) { |
| 191 | defer func() { |
| 192 | if len(errFields) == 0 { |
| 193 | return |
| 194 | } |
| 195 | for _, field := range errFields { |
| 196 | if len(field.ErrorField) == 0 { |
| 197 | continue |
| 198 | } |
| 199 | firstRune := []rune(field.ErrorMsg)[0] |
| 200 | if !unicode.IsLetter(firstRune) || !unicode.Is(unicode.Latin, firstRune) { |
| 201 | continue |
| 202 | } |
| 203 | upperFirstRune := unicode.ToUpper(firstRune) |
| 204 | field.ErrorMsg = string(upperFirstRune) + field.ErrorMsg[1:] |
| 205 | if !strings.HasSuffix(field.ErrorMsg, ".") { |
| 206 | field.ErrorMsg += "." |
| 207 | } |
| 208 | } |
| 209 | }() |
| 210 | err = m.Validate.Struct(value) |
| 211 | if err != nil { |
| 212 | var valErrors validator.ValidationErrors |
| 213 | if !errors.As(err, &valErrors) { |
| 214 | log.Error(err) |
| 215 | return nil, errors.New("validate check exception") |
| 216 | } |
| 217 | |
| 218 | for _, fieldError := range valErrors { |
| 219 | errField := &FormErrorField{ |
| 220 | ErrorField: fieldError.Field(), |
| 221 | ErrorMsg: fieldError.Translate(m.Tran), |
| 222 | } |
| 223 | |
| 224 | // get original tag name from value for set err field key. |
| 225 | structNamespace := fieldError.StructNamespace() |
| 226 | _, fieldName, found := strings.Cut(structNamespace, ".") |
| 227 | if found { |
| 228 | originalTag := getObjectTagByFieldName(value, fieldName) |
| 229 | if len(originalTag) > 0 { |
| 230 | errField.ErrorField = originalTag |
| 231 | } |
| 232 | } |
| 233 | errFields = append(errFields, errField) |
| 234 | } |
| 235 | if len(errFields) > 0 { |
| 236 | errMsg := "" |
| 237 | if len(errFields) == 1 { |
| 238 | errMsg = errFields[0].ErrorMsg |
| 239 | } |
| 240 | return errFields, myErrors.BadRequest(reason.RequestFormatError).WithMsg(errMsg) |
| 241 | } |
| 242 | } |
| 243 | |
| 244 | if v, ok := value.(Checker); ok { |
| 245 | errFields, err = v.Check() |
| 246 | if err == nil { |
| 247 | return nil, nil |
nothing calls this directly
no test coverage detected