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  }