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  }