e-li-nps/internal/elinps/validate.go

69 lines
2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package elinps
import (
"errors"
"regexp"
"strings"
"e-li.nps/internal/contratos"
)
var emailRe = regexp.MustCompile(`^[^\s@]+@[^\s@]+\.[^\s@]+$`)
func normalizeEmail(s string) string {
return strings.ToLower(strings.TrimSpace(s))
}
func ValidatePedidoInput(in *contratos.PedidoInput) error {
in.ProdutoNome = strings.TrimSpace(in.ProdutoNome)
in.InquilinoCodigo = strings.TrimSpace(in.InquilinoCodigo)
in.InquilinoNome = strings.TrimSpace(in.InquilinoNome)
in.UsuarioCodigo = strings.TrimSpace(in.UsuarioCodigo)
in.UsuarioNome = strings.TrimSpace(in.UsuarioNome)
in.UsuarioTelefone = strings.TrimSpace(in.UsuarioTelefone)
in.UsuarioEmail = normalizeEmail(in.UsuarioEmail)
if in.ProdutoNome == "" || len(in.ProdutoNome) > 64 {
return errors.New("produto_nome invalido")
}
if in.InquilinoCodigo == "" || len(in.InquilinoCodigo) > 64 {
return errors.New("inquilino_codigo invalido")
}
if in.InquilinoNome == "" || len(in.InquilinoNome) > 128 {
return errors.New("inquilino_nome invalido")
}
if in.UsuarioCodigo == "" || len(in.UsuarioCodigo) > 64 {
return errors.New("usuario_codigo invalido")
}
if in.UsuarioNome == "" || len(in.UsuarioNome) > 128 {
return errors.New("usuario_nome invalido")
}
// E-mail passa a ser opcional: o controle de exibição é por
// (produto + inquilino_codigo + usuario_codigo).
if in.UsuarioEmail != "" {
if len(in.UsuarioEmail) > 254 || !emailRe.MatchString(in.UsuarioEmail) {
return errors.New("usuario_email invalido")
}
}
if len(in.UsuarioTelefone) > 64 {
return errors.New("usuario_telefone invalido")
}
return nil
}
func ValidatePatchInput(in *contratos.PatchInput) error {
if in.Nota != nil {
// Regra do produto: escala NPS é 010.
if *in.Nota < 0 || *in.Nota > 10 {
return errors.New("nota invalida")
}
}
if in.Justificativa != nil {
j := strings.TrimSpace(*in.Justificativa)
if len(j) > 2000 {
return errors.New("justificativa muito longa")
}
*in.Justificativa = j
}
return nil
}