account_team.go raw

   1  package rest
   2  
   3  import (
   4  	"errors"
   5  	"fmt"
   6  	"net/http"
   7  
   8  	"gopkg.in/ns1/ns1-go.v2/rest/model/account"
   9  )
  10  
  11  // TeamsService handles 'account/teams' endpoint.
  12  type TeamsService service
  13  
  14  // List returns all teams in the account.
  15  //
  16  // NS1 API docs: https://ns1.com/api/#teams-get
  17  func (s *TeamsService) List() ([]*account.Team, *http.Response, error) {
  18  	req, err := s.client.NewRequest("GET", "account/teams", nil)
  19  	if err != nil {
  20  		return nil, nil, err
  21  	}
  22  
  23  	tl := []*account.Team{}
  24  	resp, err := s.client.Do(req, &tl)
  25  	if err != nil {
  26  		return nil, resp, err
  27  	}
  28  
  29  	return tl, resp, nil
  30  }
  31  
  32  // Get returns details of a single team.
  33  //
  34  // NS1 API docs: https://ns1.com/api/#teams-id-get
  35  func (s *TeamsService) Get(id string) (*account.Team, *http.Response, error) {
  36  	path := fmt.Sprintf("account/teams/%s", id)
  37  
  38  	req, err := s.client.NewRequest("GET", path, nil)
  39  	if err != nil {
  40  		return nil, nil, err
  41  	}
  42  
  43  	var t account.Team
  44  	resp, err := s.client.Do(req, &t)
  45  	if err != nil {
  46  		switch err.(type) {
  47  		case *Error:
  48  			if resourceMissingMatch(err.(*Error).Message) {
  49  				return nil, resp, ErrTeamMissing
  50  			}
  51  		}
  52  		return nil, resp, err
  53  	}
  54  
  55  	return &t, resp, nil
  56  }
  57  
  58  // Create takes a *Team and creates a new account team.
  59  //
  60  // NS1 API docs: https://ns1.com/api/#teams-put
  61  func (s *TeamsService) Create(t *account.Team) (*http.Response, error) {
  62  	var (
  63  		req *http.Request
  64  		err error
  65  	)
  66  
  67  	req, err = s.client.NewRequest("PUT", "account/teams", t)
  68  	if err != nil {
  69  		return nil, err
  70  	}
  71  
  72  	// Update team fields with data from api(ensure consistent)
  73  	resp, err := s.client.Do(req, &t)
  74  	if err != nil {
  75  		switch err.(type) {
  76  		case *Error:
  77  			if err.(*Error).Message == fmt.Sprintf("team with name \"%s\" exists", t.Name) {
  78  				return resp, ErrTeamExists
  79  			}
  80  		}
  81  		return resp, err
  82  	}
  83  
  84  	return resp, nil
  85  }
  86  
  87  // Update changes the name or access rights for a team.
  88  //
  89  // NS1 API docs: https://ns1.com/api/#teams-id-post
  90  func (s *TeamsService) Update(t *account.Team) (*http.Response, error) {
  91  	path := fmt.Sprintf("account/teams/%s", t.ID)
  92  
  93  	var (
  94  		req *http.Request
  95  		err error
  96  	)
  97  
  98  	req, err = s.client.NewRequest("POST", path, t)
  99  	if err != nil {
 100  		return nil, err
 101  	}
 102  
 103  	// Update team fields with data from api(ensure consistent)
 104  	resp, err := s.client.Do(req, &t)
 105  	if err != nil {
 106  		switch err.(type) {
 107  		case *Error:
 108  			if resourceMissingMatch(err.(*Error).Message) {
 109  				return resp, ErrTeamMissing
 110  			}
 111  		}
 112  		return resp, err
 113  	}
 114  
 115  	return resp, nil
 116  }
 117  
 118  // Delete deletes a team.
 119  //
 120  // NS1 API docs: https://ns1.com/api/#teams-id-delete
 121  func (s *TeamsService) Delete(id string) (*http.Response, error) {
 122  	path := fmt.Sprintf("account/teams/%s", id)
 123  
 124  	req, err := s.client.NewRequest("DELETE", path, nil)
 125  	if err != nil {
 126  		return nil, err
 127  	}
 128  
 129  	resp, err := s.client.Do(req, nil)
 130  	if err != nil {
 131  		switch err.(type) {
 132  		case *Error:
 133  			if resourceMissingMatch(err.(*Error).Message) {
 134  				return resp, ErrTeamMissing
 135  			}
 136  		}
 137  		return resp, err
 138  	}
 139  
 140  	return resp, nil
 141  }
 142  
 143  var (
 144  	// ErrTeamExists bundles PUT create error.
 145  	ErrTeamExists = errors.New("team already exists")
 146  	// ErrTeamMissing bundles GET/POST/DELETE error.
 147  	ErrTeamMissing = errors.New("team does not exist")
 148  )
 149