3
respostas

[Dúvida] Traduzi ou alterar mensagem de retorno

É possível retornar o erro traduzi ou informar o definir o erro que deva aparecer ao invés do padrão ?

3 respostas

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.

  1. Uso da biblioteca validator:

    • Na sugestão do ChatGPT, você migrou para a biblioteca "github.com/go-playground/validator/v10". Essa é uma escolha comum e robusta para validações em Go.
    • Certifique-se de ter a biblioteca instalada em seu projeto usando:
      go get -u github.com/go-playground/validator/v10
      
  2. Aprimoramento na Personalização das Mensagens de Erro:

    • A sugestão atual apresenta mensagens de erro personalizadas para diferentes tipos de validação, como "required" e "len".
    • Caso tenha necessidades específicas para outras validações, você pode adicionar casos adicionais no switch.
  3. Manutenção da Estrutura do Código:

    • O código está estruturado de maneira clara, com a definição da estrutura do aluno e a função de validação 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:

  • Mantive a estrutura geral do código.
  • As mensagens de erro personalizadas estão presentes nos casos "required" e "len".
  • O switch permite adicionar casos conforme necessário para outras validações.
  • Adicionei comentários explicativos para facilitar a compreensão do código.

Espero que essas modificações tornem a implementação mais clara e eficaz para você.

Um abraço e bons estudos.