58 lines
1.9 KiB
Go
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} }
|