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  }