É possível retornar o erro traduzi ou informar o definir o erro que deva aparecer ao invés do padrão ?
É possível retornar o erro traduzi ou informar o definir o erro que deva aparecer ao invés do padrão ?
Oi Mateus, tudo bem?
Certamente, é possível personalizar as mensagens de erro em vez de utilizar as mensagens padrão. No código do seu projeto, é possível especificar as mensagens de erro desejadas para cada tipo de validação.
Isso permite que, em caso de falha na validação, você apresente ao usuário uma mensagem mais amigável e compreensível.
Você pode ler mais sobre e ver exemplos na documentação.
Um abraço e bons estudos.
Boa tarde Lorena,
Primeiramente, gostaria de expressar minha gratidão pela assistência que me ofereceu. Apesar dos meus esforços, não consegui aplicar as sugestões no meu código. Suspeito que a dificuldade esteja relacionada à diferença entre as bibliotecas que estamos utilizando. Através da ajuda do ChatGPT, recebi algumas sugestões que resolveram parcialmente o problema, porém, ainda não estou plenamente satisfeito com a solução.
Acredito que deva existir uma maneira mais eficaz de abordar a questão. Abaixo, estou incluindo o meu código anterior. Se for possível me auxiliar a implementar com base no meu código antigo, ficarei imensamente grato. A jornada com Go está apenas começando para mim, e estou confiante de que eventualmente conseguirei dominar esse processo.
Codigo antes da sugestão do Chat
package models
import (
"gopkg.in/validator.v2"
"gorm.io/gorm"
)
type Aluno struct {
gorm.Model
Nome string `json:"nome" validate:"nonzero" `
CPF string `json:"cpf" validate:"nonzero, len=11, regexp=^[0-9]*$"`
}
func ValidacaoDoAluno(aluno *Aluno) error {
if err := validator.Validate(aluno); err != nil { // Estou usando a biblioteca validator para validar as propriedade e retornar ume erro com base nas proriedades.
return err
}
return nil
}
Depois da sugestão.
package models
import (
"errors"
"strings"
"github.com/go-playground/validator/v10"
"gorm.io/gorm"
)
type Aluno struct {
gorm.Model
Nome string `json:"nome" validate:"required"`
CPF string `json:"cpf" validate:"required,len=11"`
}
func ValidacaoDoAluno(aluno *Aluno) error {
validate := validator.New()
if err := validate.Struct(aluno); err != nil {
if _, ok := err.(*validator.InvalidValidationError); ok {
return err
}
var fieldErrors []string
for _, err := range err.(validator.ValidationErrors) {
switch err.Tag() {
case "required":
fieldErrors = append(fieldErrors, "O campo '"+err.Field()+"' é obrigatório")
case "len":
fieldErrors = append(fieldErrors, "O campo '"+err.Field()+"' deve ter 11 dígitos")
default:
fieldErrors = append(fieldErrors, "Erro de validação no campo '"+err.Field()+"'")
}
}
return errors.New("Erros de validação: " + strings.Join(fieldErrors, ", "))
}
return nil
}
Oi Mateus, tudo bem?
Analisando o seu código original e a sugestão posterior, vejo que você migrou para a biblioteca "github.com/go-playground/validator/v10" e ajustou a estrutura do código para oferecer mensagens de erro personalizadas.
Vamos revisitar o código sugerido após a intervenção do ChatGPT e verificar se podemos tornar a solução mais clara e adequada ao seu contexto.
Uso da biblioteca validator:
go get -u github.com/go-playground/validator/v10
Aprimoramento na Personalização das Mensagens de Erro:
Manutenção da Estrutura do Código:
ValidacaoDoAluno
.Agora, para facilitar sua compreensão e possível implementação, vou ajustar algumas partes do código sugerido, mantendo a clareza e melhorando a legibilidade:
package models
import (
"errors"
"strings"
"github.com/go-playground/validator/v10"
"gorm.io/gorm"
)
type Aluno struct {
gorm.Model
Nome string `json:"nome" validate:"required"`
CPF string `json:"cpf" validate:"required,len=11"`
}
func ValidacaoDoAluno(aluno *Aluno) error {
validate := validator.New()
if err := validate.Struct(aluno); err != nil {
if _, ok := err.(*validator.InvalidValidationError); ok {
return err
}
var fieldErrors []string
for _, err := range err.(validator.ValidationErrors) {
switch err.Tag() {
case "required":
fieldErrors = append(fieldErrors, "O campo '"+err.Field()+"' é obrigatório")
case "len":
fieldErrors = append(fieldErrors, "O campo '"+err.Field()+"' deve ter 11 dígitos")
default:
fieldErrors = append(fieldErrors, "Erro de validação no campo '"+err.Field()+"'")
}
}
return errors.New("Erros de validação: " + strings.Join(fieldErrors, ", "))
}
return nil
}
Agora, gostaria de destacar alguns pontos importantes:
Espero que essas modificações tornem a implementação mais clara e eficaz para você.
Um abraço e bons estudos.