gitlab.com/picnic-app/backend/role-api@v0.0.0-20230614140944-06a76ff3696d/internal/controller/get_assigned_roles.go (about) 1 package controller 2 3 import ( 4 "context" 5 6 v1 "gitlab.com/picnic-app/backend/libs/golang/protobuf-registry/gen/role-api/role/v1" 7 "gitlab.com/picnic-app/backend/role-api/internal/controller/serialize" 8 "gitlab.com/picnic-app/backend/role-api/internal/errors" 9 "gitlab.com/picnic-app/backend/role-api/internal/model" 10 ) 11 12 func (c Controller) GetAssignedRoles(ctx context.Context, req *v1.GetAssignedRolesRequest) ( 13 *v1.GetAssignedRolesResponse, error, 14 ) { 15 if req == nil { 16 return nil, errors.InvalidArgumentError("request") 17 } 18 19 assignedRoles, err := c.service.GetAssignedRoles(ctx, req.EntityId, req.CircleId, req.UserId) 20 if err != nil { 21 return nil, err 22 } 23 24 if len(assignedRoles) == 0 { 25 return &v1.GetAssignedRolesResponse{ 26 Scopes: []*v1.Scope{}, 27 Roles: []*v1.Role{}, 28 }, nil 29 } 30 31 var roleIDs []string 32 unique := map[string]struct{}{} 33 for _, assignedRole := range assignedRoles { 34 _, ok := unique[assignedRole.RoleID] 35 if ok { 36 continue 37 } 38 39 unique[assignedRole.RoleID] = struct{}{} 40 roleIDs = append(roleIDs, assignedRole.RoleID) 41 } 42 43 roles, err := c.service.GetRoles(ctx, roleIDs) 44 if err != nil { 45 return nil, err 46 } 47 48 out := make([]model.Role, 0, len(roles)) 49 for _, role := range roles { 50 if role.DeletedAt != nil { 51 continue 52 } 53 out = append(out, role) 54 } 55 56 return &v1.GetAssignedRolesResponse{ 57 Roles: serialize.Roles(out), 58 Scopes: serialize.Scopes(assignedRoles), 59 }, nil 60 }