github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/api/iamuum/iamuumv2/access_group_members.go (about) 1 package iamuumv2 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 AddGroupMemberRequestV2 struct { 17 Members []models.AccessGroupMemberV2 `json:"members"` 18 } 19 20 type AddGroupMemberResponseV2 struct { 21 Members []AddedGroupMemberV2 `json:"members"` 22 } 23 24 type AddedGroupMemberV2 struct { 25 ID string `json:"iam_id"` 26 Type string `json:"type"` 27 Href string `json:"href,omitempty"` 28 StatusCode int `json:"status_code,omitempty"` 29 Trace string `json:"trace,omitempty"` 30 CreatedAt string `json:"created_at,omitempty"` 31 CreatedByID string `json:"created_by_id,omitempty"` 32 Errors []Error `json:"errors,omitempty"` 33 } 34 type Error struct { 35 Code string `json:"code,omitempty"` 36 Message string `json:"message,omitempty"` 37 } 38 type GroupMembers struct { 39 PaginationFields 40 Members []models.AccessGroupMemberV2 `json:"members"` 41 } 42 43 func (gm *GroupMembers) Resources() []interface{} { 44 r := make([]interface{}, len(gm.Members)) 45 for i := range gm.Members { 46 r[i] = gm.Members[i] 47 } 48 return r 49 } 50 51 type AccessGroupMemberRepositoryV2 interface { 52 List(groupID string) ([]models.AccessGroupMemberV2, error) 53 Add(groupID string, request AddGroupMemberRequestV2) (AddGroupMemberResponseV2, error) 54 Remove(groupID string, memberID string) error 55 } 56 57 type accessGroupMemberRepository struct { 58 client *client.Client 59 } 60 61 func NewAccessGroupMemberRepository(c *client.Client) AccessGroupMemberRepositoryV2 { 62 return &accessGroupMemberRepository{ 63 client: c, 64 } 65 66 } 67 68 func (r *accessGroupMemberRepository) List(groupID string) ([]models.AccessGroupMemberV2, error) { 69 members := []models.AccessGroupMemberV2{} 70 _, err := r.client.GetPaginated(fmt.Sprintf("/v2/groups/%s/members", groupID), 71 NewPaginatedResourcesHandler(&GroupMembers{}), func(resource interface{}) bool { 72 if member, ok := resource.(models.AccessGroupMemberV2); ok { 73 members = append(members, member) 74 return true 75 } 76 return false 77 }) 78 if err != nil { 79 return []models.AccessGroupMemberV2{}, err 80 } 81 return members, nil 82 } 83 84 func (r *accessGroupMemberRepository) Add(groupID string, request AddGroupMemberRequestV2) (AddGroupMemberResponseV2, error) { 85 res := AddGroupMemberResponseV2{} 86 _, err := r.client.Put(fmt.Sprintf("/v2/groups/%s/members", groupID), &request, &res) 87 if err != nil { 88 return AddGroupMemberResponseV2{}, err 89 } 90 return res, nil 91 } 92 93 func (r *accessGroupMemberRepository) Remove(groupID string, memberID string) error { 94 _, err := r.client.Delete(helpers.Tprintf("/v2/groups/{{.GroupID}}/members/{{.MemberID}}", map[string]interface{}{ 95 "GroupID": groupID, 96 "MemberID": memberID, 97 })) 98 return err 99 }