src.dualinventive.com/go/users-service/grpc/mappings.go

94 lines
2.1 KiB
Go

package grpc
import (
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"src.dualinventive.com/go/users-service/errors"
"src.dualinventive.com/go/users-service/internal/domain"
)
func mapUser(user *domain.User) *User {
mapped := &User{
UserID: uint64(user.ID),
UserName: user.UserName,
FirstName: user.FirstName,
LastName: user.LastName,
Reference: user.Reference,
}
modelRoles := make([]*Role, 0, len(user.Roles))
for _, domainRole := range user.Roles {
var rightCodes []string
for _, right := range domainRole.Rights {
rightCodes = append(rightCodes, right.Code)
}
modelRoles = append(modelRoles, &Role{
Name: domainRole.Name,
Rights: rightCodes,
})
}
mapped.Roles = modelRoles
mapped.Company = &Company{
Id: int64(user.Company.ID),
Name: user.Company.Name,
Code: user.Company.Code,
}
return mapped
}
func mapUsers(users []domain.User) []*User {
if users == nil {
return nil
}
userslist := []*User{}
for _, user := range users {
user := user
userslist = append(userslist, mapUser(&user))
}
return userslist
}
func mapFilter(reqfilter *UsersFilter) domain.UsersFilter {
filter := make(domain.UsersFilter)
if reqfilter != nil && len(reqfilter.Reference) != 0 {
filter[domain.UsersFilterTypeReference] = reqfilter.Reference
}
return filter
}
func mapSortCol(sortcol ListUsersRequest_SortCol) domain.SortCol {
switch sortcol {
case ListUsersRequest_ID_ASC:
return domain.SortColIDAsc
case ListUsersRequest_ID_DESC:
return domain.SortColIDDesc
case ListUsersRequest_NAME_ASC:
return domain.SortColNameAsc
case ListUsersRequest_NAME_DESC:
return domain.SortColNameDesc
default:
return domain.SortColIDAsc
}
}
func mapError(err error) error {
switch err.(type) {
case *errors.ErrUnauthorized:
return status.Error(codes.Unauthenticated, err.Error())
case *errors.ErrAuthFailed:
return status.Error(codes.Internal, err.Error())
case *errors.ErrUserNotFound:
return status.Error(codes.NotFound, err.Error())
case *errors.ErrUserRepositoryErr:
return status.Error(codes.Internal, err.Error())
default:
return status.Error(codes.Internal, err.Error())
}
}