github.com/pivotal-cf/go-pivnet/v6@v6.0.2/subscription_groups.go (about) 1 package pivnet 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "errors" 7 "fmt" 8 "net/http" 9 "strconv" 10 "strings" 11 ) 12 13 type SubscriptionGroupsService struct { 14 client Client 15 } 16 17 type SubscriptionGroupsResponse struct { 18 SubscriptionGroups []SubscriptionGroup `json:"subscription_groups,omitempty"` 19 } 20 21 type SubscriptionGroupMember struct { 22 ID int `json:"id,omitempty" yaml:"id,omitempty"` 23 Name string `json:"name,omitempty" yaml:"name,omitempty"` 24 Email string `json:"email,omitempty" yaml:"email,omitempty"` 25 IsAdmin bool `json:"admin" yaml:"admin"` 26 } 27 28 type SubscriptionGroupMemberNoAdmin struct { 29 ID int `json:"id,omitempty" yaml:"id,omitempty"` 30 Name string `json:"name,omitempty" yaml:"name,omitempty"` 31 Email string `json:"email,omitempty" yaml:"email,omitempty"` 32 } 33 34 type SubscriptionGroupMemberEmail struct { 35 Email string `json:"email,omitempty" yaml:"email,omitempty"` 36 } 37 38 type subscriptionGroupMemberToAdd struct { 39 Member SubscriptionGroupMember `json:"member,omitempty"` 40 } 41 42 type subscriptionGroupMemberNoAdminToAdd struct { 43 Member SubscriptionGroupMemberNoAdmin `json:"member,omitempty"` 44 } 45 46 type subscriptionGroupMemberToRemove struct { 47 Member SubscriptionGroupMemberEmail `json:"member"` 48 } 49 50 type SubscriptionGroup struct { 51 ID int `json:"id,omitempty" yaml:"id,omitempty"` 52 Name string `json:"name,omitempty" yaml:"name,omitempty"` 53 Members []SubscriptionGroupMember `json:"members" yaml:"members"` 54 PendingInvitations []string `json:"pending_invitations" yaml:"pending_invitations"` 55 Subscriptions []SubscriptionGroupSubscription `json:"subscriptions" yaml:"subscriptions"` 56 } 57 58 type SubscriptionGroupSubscription struct { 59 ID int `json:"id,omitempty" yaml:"id,omitempty"` 60 Name string `json:"name,omitempty" yaml:"name,omitempty"` 61 } 62 63 func (c SubscriptionGroupsService) List() ([]SubscriptionGroup, error) { 64 url := "/subscription_groups" 65 66 var response SubscriptionGroupsResponse 67 resp, err := c.client.MakeRequest( 68 "GET", 69 url, 70 http.StatusOK, 71 nil, 72 ) 73 if err != nil { 74 return nil, err 75 } 76 defer resp.Body.Close() 77 78 err = json.NewDecoder(resp.Body).Decode(&response) 79 if err != nil { 80 return nil, err 81 } 82 83 return response.SubscriptionGroups, nil 84 } 85 86 func (c SubscriptionGroupsService) Get(subscriptionGroupID int) (SubscriptionGroup, error) { 87 url := fmt.Sprintf("/subscription_groups/%d", subscriptionGroupID) 88 89 var response SubscriptionGroup 90 resp, err := c.client.MakeRequest( 91 "GET", 92 url, 93 http.StatusOK, 94 nil, 95 ) 96 if err != nil { 97 return SubscriptionGroup{}, err 98 } 99 defer resp.Body.Close() 100 101 err = json.NewDecoder(resp.Body).Decode(&response) 102 if err != nil { 103 return SubscriptionGroup{}, err 104 } 105 106 return response, nil 107 } 108 109 func (c SubscriptionGroupsService) AddMember( 110 subscriptionGroupID int, 111 memberEmailAddress string, 112 isAdmin string, 113 ) (SubscriptionGroup, error) { 114 url := fmt.Sprintf("/subscription_groups/%d/add_member", subscriptionGroupID) 115 116 var b []byte 117 var err error 118 119 if len(strings.TrimSpace(isAdmin)) == 0 { 120 addSubscriptionGroupMemberBody := subscriptionGroupMemberNoAdminToAdd{ 121 SubscriptionGroupMemberNoAdmin{ 122 Email: memberEmailAddress, 123 }, 124 } 125 126 b, err = json.Marshal(addSubscriptionGroupMemberBody) 127 if err != nil { 128 return SubscriptionGroup{}, err 129 } 130 } else { 131 isAdmin, err := strconv.ParseBool(isAdmin) 132 if err != nil { 133 return SubscriptionGroup{}, errors.New("parameter admin should be true or false") 134 } 135 136 addSubscriptionGroupMemberBody := subscriptionGroupMemberToAdd{ 137 SubscriptionGroupMember{ 138 Email: memberEmailAddress, 139 IsAdmin: isAdmin, 140 }, 141 } 142 143 b, err = json.Marshal(addSubscriptionGroupMemberBody) 144 if err != nil { 145 return SubscriptionGroup{}, err 146 } 147 } 148 149 body := bytes.NewReader(b) 150 151 var response SubscriptionGroup 152 resp, err := c.client.MakeRequest( 153 "PATCH", 154 url, 155 http.StatusOK, 156 body, 157 ) 158 if err != nil { 159 return SubscriptionGroup{}, err 160 } 161 defer resp.Body.Close() 162 163 err = json.NewDecoder(resp.Body).Decode(&response) 164 if err != nil { 165 return SubscriptionGroup{}, err 166 } 167 168 return response, nil 169 } 170 171 func (c SubscriptionGroupsService) RemoveMember( 172 subscriptionGroupID int, 173 memberEmailAddress string, 174 ) (SubscriptionGroup, error) { 175 url := fmt.Sprintf("/subscription_groups/%d/remove_member", subscriptionGroupID) 176 177 addSubscriptionGroupMemberBody := subscriptionGroupMemberToRemove{ 178 SubscriptionGroupMemberEmail{ 179 Email: memberEmailAddress, 180 }, 181 } 182 183 b, err := json.Marshal(addSubscriptionGroupMemberBody) 184 if err != nil { 185 return SubscriptionGroup{}, err 186 } 187 188 body := bytes.NewReader(b) 189 190 var response SubscriptionGroup 191 resp, err := c.client.MakeRequest( 192 "PATCH", 193 url, 194 http.StatusOK, 195 body, 196 ) 197 if err != nil { 198 return SubscriptionGroup{}, err 199 } 200 defer resp.Body.Close() 201 202 err = json.NewDecoder(resp.Body).Decode(&response) 203 if err != nil { 204 return SubscriptionGroup{}, err 205 } 206 207 return response, nil 208 }