Files
2026-10-23 22:31:02 -03:00

58 lines
1.9 KiB
Go

package domain
import (
"errors"
"strings"
)
var (
ErrNotFound = errors.New("registro não encontrado")
ErrConflict = errors.New("registro já existe")
ErrCredentialsRequired = errors.New("credencial da PontoMais não configurada ou não validada")
ErrUserNotActive = errors.New("usuário não está ativo")
ErrInvalidState = errors.New("operação não permitida no estado atual")
ErrUnauthenticated = errors.New("sessão inválida ou expirada")
ErrForbidden = errors.New("permissão insuficiente")
ErrInvalidLogin = errors.New("usuário ou senha inválidos")
ErrAccountLocked = errors.New("conta bloqueada temporariamente por tentativas de login")
ErrLastOwner = errors.New("é preciso manter pelo menos um owner ativo")
ErrNotConfigured = errors.New("integração não configurada")
)
type ValidationError struct {
Field string `json:"field"`
Message string `json:"message"`
}
// ValidationErrors agrupa erros de validação de campos (HTTP 422).
type ValidationErrors []ValidationError
func (v ValidationErrors) Error() string {
parts := make([]string, 0, len(v))
for _, e := range v {
parts = append(parts, e.Field+": "+e.Message)
}
return strings.Join(parts, "; ")
}
func (v *ValidationErrors) Add(field, message string) {
*v = append(*v, ValidationError{Field: field, Message: message})
}
// OrNil devolve nil quando não há erros, para uso em `return errs.OrNil()`.
func (v ValidationErrors) OrNil() error {
if len(v) == 0 {
return nil
}
return v
}
// stateError é um ErrInvalidState com mensagem específica para o usuário.
type stateError struct{ msg string }
func (e stateError) Error() string { return e.msg }
func (e stateError) Is(target error) bool { return target == ErrInvalidState }
// InvalidState cria um erro que satisfaz errors.Is(err, ErrInvalidState).
func InvalidState(msg string) error { return stateError{msg: msg} }