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