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 }