github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/api/iamuum/iamuumv1/access_group_members.go (about)

     1  package iamuumv1
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/IBM-Cloud/bluemix-go/client"
     7  	"github.com/IBM-Cloud/bluemix-go/helpers"
     8  	"github.com/IBM-Cloud/bluemix-go/models"
     9  )
    10  
    11  const (
    12  	AccessGroupMemberUser    = "user"
    13  	AccessGroupMemberService = "service"
    14  )
    15  
    16  type AddGroupMemberRequest struct {
    17  	Members []models.AccessGroupMember `json:"members"`
    18  }
    19  
    20  type AddGroupMemberResponse struct {
    21  	Members []AddedGroupMember `json:"members"`
    22  }
    23  
    24  type AddedGroupMember struct {
    25  	ID string `json:"id"`
    26  
    27  	Msg string `json:"msg,omitempty"`
    28  
    29  	Type string `json:"type"`
    30  
    31  	OK bool `json:"ok,omitempty"`
    32  }
    33  
    34  type GroupMembers struct {
    35  	PaginationFields
    36  	Members []models.AccessGroupMember `json:"members"`
    37  }
    38  
    39  func (gm *GroupMembers) Resources() []interface{} {
    40  	r := make([]interface{}, len(gm.Members))
    41  	for i := range gm.Members {
    42  		r[i] = gm.Members[i]
    43  	}
    44  	return r
    45  }
    46  
    47  type AccessGroupMemberRepository interface {
    48  	List(groupID string) ([]models.AccessGroupMember, error)
    49  	Add(groupID string, request AddGroupMemberRequest) (AddGroupMemberResponse, error)
    50  	Remove(groupID string, memberID string) error
    51  }
    52  
    53  type accessGroupMemberRepository struct {
    54  	client *client.Client
    55  }
    56  
    57  func NewAccessGroupMemberRepository(c *client.Client) AccessGroupMemberRepository {
    58  	return &accessGroupMemberRepository{
    59  		client: c,
    60  	}
    61  
    62  }
    63  
    64  func (r *accessGroupMemberRepository) List(groupID string) ([]models.AccessGroupMember, error) {
    65  	members := []models.AccessGroupMember{}
    66  	_, err := r.client.GetPaginated(fmt.Sprintf("/v1/groups/%s/members", groupID),
    67  		NewPaginatedResourcesHandler(&GroupMembers{}), func(resource interface{}) bool {
    68  			if member, ok := resource.(models.AccessGroupMember); ok {
    69  				members = append(members, member)
    70  				return true
    71  			}
    72  			return false
    73  		})
    74  	if err != nil {
    75  		return []models.AccessGroupMember{}, err
    76  	}
    77  	return members, nil
    78  }
    79  
    80  func (r *accessGroupMemberRepository) Add(groupID string, request AddGroupMemberRequest) (AddGroupMemberResponse, error) {
    81  	res := AddGroupMemberResponse{}
    82  	_, err := r.client.Put(fmt.Sprintf("/v1/groups/%s/members", groupID), &request, &res)
    83  	if err != nil {
    84  		return AddGroupMemberResponse{}, err
    85  	}
    86  	return res, nil
    87  }
    88  
    89  func (r *accessGroupMemberRepository) Remove(groupID string, memberID string) error {
    90  	_, err := r.client.Delete(helpers.Tprintf("/v1/groups/{{.GroupID}}/members/{{.MemberID}}", map[string]interface{}{
    91  		"GroupID":  groupID,
    92  		"MemberID": memberID,
    93  	}))
    94  	return err
    95  }