60 lines
2.4 KiB
Go
60 lines
2.4 KiB
Go
|
|
package usecase
|
||
|
|
|
||
|
|
import (
|
||
|
|
"errors"
|
||
|
|
"strings"
|
||
|
|
|
||
|
|
errs "gateway/internal/library/errors"
|
||
|
|
"gateway/internal/library/errors/code"
|
||
|
|
permission "gateway/internal/model/permission/domain"
|
||
|
|
)
|
||
|
|
|
||
|
|
var errb = errs.For(code.Permission)
|
||
|
|
|
||
|
|
// wrapRepoErr converts repository sentinel errors into structured errs
|
||
|
|
// with the right HTTP/gRPC mapping. All usecase methods funnel repo
|
||
|
|
// errors through this helper to keep the surface uniform.
|
||
|
|
func wrapRepoErr(err error, msg ...string) error {
|
||
|
|
if err == nil {
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
switch {
|
||
|
|
case errors.Is(err, permission.ErrPermissionNotFound):
|
||
|
|
return errb.ResNotFound("permission not found").WithCause(err)
|
||
|
|
case errors.Is(err, permission.ErrPermissionDup):
|
||
|
|
return errb.ResAlreadyExist("permission already exists").WithCause(err)
|
||
|
|
case errors.Is(err, permission.ErrRoleNotFound):
|
||
|
|
return errb.ResNotFound("role not found").WithCause(err)
|
||
|
|
case errors.Is(err, permission.ErrRoleDuplicate):
|
||
|
|
return errb.ResAlreadyExist("role already exists in tenant").WithCause(err)
|
||
|
|
case errors.Is(err, permission.ErrRoleSystemImmutable):
|
||
|
|
return errb.ResInvalidState("system role is immutable").WithCause(err)
|
||
|
|
case errors.Is(err, permission.ErrRoleNotInTenant):
|
||
|
|
return errb.ResNotFound("role not in tenant").WithCause(err)
|
||
|
|
case errors.Is(err, permission.ErrRoleKeyReserved):
|
||
|
|
return errb.InputInvalidFormat("role key uses reserved prefix").WithCause(err)
|
||
|
|
case errors.Is(err, permission.ErrRoleKeyInvalid):
|
||
|
|
return errb.InputInvalidFormat("role key format invalid").WithCause(err)
|
||
|
|
case errors.Is(err, permission.ErrUserRoleNotFound):
|
||
|
|
return errb.ResNotFound("user role not found").WithCause(err)
|
||
|
|
case errors.Is(err, permission.ErrUserRoleDuplicate):
|
||
|
|
return errb.ResAlreadyExist("user role already assigned").WithCause(err)
|
||
|
|
case errors.Is(err, permission.ErrRoleMappingNotFound):
|
||
|
|
return errb.ResNotFound("role mapping not found").WithCause(err)
|
||
|
|
case errors.Is(err, permission.ErrRoleMappingDuplicate):
|
||
|
|
return errb.ResAlreadyExist("role mapping already exists").WithCause(err)
|
||
|
|
case errors.Is(err, permission.ErrCasbinNotConfigured):
|
||
|
|
return errb.SysNotImplemented("casbin enforcer not configured").WithCause(err)
|
||
|
|
case errors.Is(err, permission.ErrInvalidStatus):
|
||
|
|
return errb.InputInvalidFormat("invalid status").WithCause(err)
|
||
|
|
}
|
||
|
|
if e := errs.FromError(err); e != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
m := strings.TrimSpace(strings.Join(msg, " "))
|
||
|
|
if m == "" {
|
||
|
|
m = "permission repository error"
|
||
|
|
}
|
||
|
|
return errb.DBError(m).WithCause(err)
|
||
|
|
}
|