1package pagerduty 2 3import ( 4 "fmt" 5 "net/http" 6 7 "github.com/google/go-querystring/query" 8) 9 10// Team is a collection of users and escalation policies that represent a group of people within an organization. 11type Team struct { 12 APIObject 13 Name string `json:"name,omitempty"` 14 Description string `json:"description,omitempty"` 15} 16 17// ListTeamResponse is the structure used when calling the ListTeams API endpoint. 18type ListTeamResponse struct { 19 APIListObject 20 Teams []Team 21} 22 23// ListTeamOptions are the input parameters used when calling the ListTeams API endpoint. 24type ListTeamOptions struct { 25 APIListObject 26 Query string `url:"query,omitempty"` 27} 28 29// ListTeams lists teams of your PagerDuty account, optionally filtered by a search query. 30func (c *Client) ListTeams(o ListTeamOptions) (*ListTeamResponse, error) { 31 v, err := query.Values(o) 32 if err != nil { 33 return nil, err 34 } 35 36 resp, err := c.get("/teams?" + v.Encode()) 37 if err != nil { 38 return nil, err 39 } 40 var result ListTeamResponse 41 return &result, c.decodeJSON(resp, &result) 42} 43 44// CreateTeam creates a new team. 45func (c *Client) CreateTeam(t *Team) (*Team, error) { 46 resp, err := c.post("/teams", t, nil) 47 return getTeamFromResponse(c, resp, err) 48} 49 50// DeleteTeam removes an existing team. 51func (c *Client) DeleteTeam(id string) error { 52 _, err := c.delete("/teams/" + id) 53 return err 54} 55 56// GetTeam gets details about an existing team. 57func (c *Client) GetTeam(id string) (*Team, error) { 58 resp, err := c.get("/teams/" + id) 59 return getTeamFromResponse(c, resp, err) 60} 61 62// UpdateTeam updates an existing team. 63func (c *Client) UpdateTeam(id string, t *Team) (*Team, error) { 64 resp, err := c.put("/teams/"+id, t, nil) 65 return getTeamFromResponse(c, resp, err) 66} 67 68// RemoveEscalationPolicyFromTeam removes an escalation policy from a team. 69func (c *Client) RemoveEscalationPolicyFromTeam(teamID, epID string) error { 70 _, err := c.delete("/teams/" + teamID + "/escalation_policies/" + epID) 71 return err 72} 73 74// AddEscalationPolicyToTeam adds an escalation policy to a team. 75func (c *Client) AddEscalationPolicyToTeam(teamID, epID string) error { 76 _, err := c.put("/teams/"+teamID+"/escalation_policies/"+epID, nil, nil) 77 return err 78} 79 80// RemoveUserFromTeam removes a user from a team. 81func (c *Client) RemoveUserFromTeam(teamID, userID string) error { 82 _, err := c.delete("/teams/" + teamID + "/users/" + userID) 83 return err 84} 85 86// AddUserToTeam adds a user to a team. 87func (c *Client) AddUserToTeam(teamID, userID string) error { 88 _, err := c.put("/teams/"+teamID+"/users/"+userID, nil, nil) 89 return err 90} 91 92func getTeamFromResponse(c *Client, resp *http.Response, err error) (*Team, error) { 93 if err != nil { 94 return nil, err 95 } 96 var target map[string]Team 97 if dErr := c.decodeJSON(resp, &target); dErr != nil { 98 return nil, fmt.Errorf("Could not decode JSON response: %v", dErr) 99 } 100 rootNode := "team" 101 t, nodeOK := target[rootNode] 102 if !nodeOK { 103 return nil, fmt.Errorf("JSON response does not have %s field", rootNode) 104 } 105 return &t, nil 106} 107