github.com/google/go-github/v49@v49.1.0/github/teams_discussions.go (about) 1 // Copyright 2018 The go-github AUTHORS. All rights reserved. 2 // 3 // Use of this source code is governed by a BSD-style 4 // license that can be found in the LICENSE file. 5 6 package github 7 8 import ( 9 "context" 10 "fmt" 11 ) 12 13 // TeamDiscussion represents a GitHub dicussion in a team. 14 type TeamDiscussion struct { 15 Author *User `json:"author,omitempty"` 16 Body *string `json:"body,omitempty"` 17 BodyHTML *string `json:"body_html,omitempty"` 18 BodyVersion *string `json:"body_version,omitempty"` 19 CommentsCount *int `json:"comments_count,omitempty"` 20 CommentsURL *string `json:"comments_url,omitempty"` 21 CreatedAt *Timestamp `json:"created_at,omitempty"` 22 LastEditedAt *Timestamp `json:"last_edited_at,omitempty"` 23 HTMLURL *string `json:"html_url,omitempty"` 24 NodeID *string `json:"node_id,omitempty"` 25 Number *int `json:"number,omitempty"` 26 Pinned *bool `json:"pinned,omitempty"` 27 Private *bool `json:"private,omitempty"` 28 TeamURL *string `json:"team_url,omitempty"` 29 Title *string `json:"title,omitempty"` 30 UpdatedAt *Timestamp `json:"updated_at,omitempty"` 31 URL *string `json:"url,omitempty"` 32 Reactions *Reactions `json:"reactions,omitempty"` 33 } 34 35 func (d TeamDiscussion) String() string { 36 return Stringify(d) 37 } 38 39 // DiscussionListOptions specifies optional parameters to the 40 // TeamServices.ListDiscussions method. 41 type DiscussionListOptions struct { 42 // Sorts the discussion by the date they were created. 43 // Accepted values are asc and desc. Default is desc. 44 Direction string `url:"direction,omitempty"` 45 46 ListOptions 47 } 48 49 // ListDiscussionsByID lists all discussions on team's page given Organization and Team ID. 50 // Authenticated user must grant read:discussion scope. 51 // 52 // GitHub API docs: https://docs.github.com/en/rest/teams/discussions#list-discussions 53 func (s *TeamsService) ListDiscussionsByID(ctx context.Context, orgID, teamID int64, opts *DiscussionListOptions) ([]*TeamDiscussion, *Response, error) { 54 u := fmt.Sprintf("organizations/%v/team/%v/discussions", orgID, teamID) 55 u, err := addOptions(u, opts) 56 if err != nil { 57 return nil, nil, err 58 } 59 60 req, err := s.client.NewRequest("GET", u, nil) 61 if err != nil { 62 return nil, nil, err 63 } 64 65 var teamDiscussions []*TeamDiscussion 66 resp, err := s.client.Do(ctx, req, &teamDiscussions) 67 if err != nil { 68 return nil, resp, err 69 } 70 71 return teamDiscussions, resp, nil 72 } 73 74 // ListDiscussionsBySlug lists all discussions on team's page given Organization name and Team's slug. 75 // Authenticated user must grant read:discussion scope. 76 // 77 // GitHub API docs: https://docs.github.com/en/rest/teams/discussions#list-discussions 78 func (s *TeamsService) ListDiscussionsBySlug(ctx context.Context, org, slug string, opts *DiscussionListOptions) ([]*TeamDiscussion, *Response, error) { 79 u := fmt.Sprintf("orgs/%v/teams/%v/discussions", org, slug) 80 u, err := addOptions(u, opts) 81 if err != nil { 82 return nil, nil, err 83 } 84 85 req, err := s.client.NewRequest("GET", u, nil) 86 if err != nil { 87 return nil, nil, err 88 } 89 90 var teamDiscussions []*TeamDiscussion 91 resp, err := s.client.Do(ctx, req, &teamDiscussions) 92 if err != nil { 93 return nil, resp, err 94 } 95 96 return teamDiscussions, resp, nil 97 } 98 99 // GetDiscussionByID gets a specific discussion on a team's page given Organization and Team ID. 100 // Authenticated user must grant read:discussion scope. 101 // 102 // GitHub API docs: https://docs.github.com/en/rest/teams/discussions#get-a-discussion 103 func (s *TeamsService) GetDiscussionByID(ctx context.Context, orgID, teamID int64, discussionNumber int) (*TeamDiscussion, *Response, error) { 104 u := fmt.Sprintf("organizations/%v/team/%v/discussions/%v", orgID, teamID, discussionNumber) 105 req, err := s.client.NewRequest("GET", u, nil) 106 if err != nil { 107 return nil, nil, err 108 } 109 110 teamDiscussion := &TeamDiscussion{} 111 resp, err := s.client.Do(ctx, req, teamDiscussion) 112 if err != nil { 113 return nil, resp, err 114 } 115 116 return teamDiscussion, resp, nil 117 } 118 119 // GetDiscussionBySlug gets a specific discussion on a team's page given Organization name and Team's slug. 120 // Authenticated user must grant read:discussion scope. 121 // 122 // GitHub API docs: https://docs.github.com/en/rest/teams/discussions#get-a-discussion 123 func (s *TeamsService) GetDiscussionBySlug(ctx context.Context, org, slug string, discussionNumber int) (*TeamDiscussion, *Response, error) { 124 u := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v", org, slug, discussionNumber) 125 req, err := s.client.NewRequest("GET", u, nil) 126 if err != nil { 127 return nil, nil, err 128 } 129 130 teamDiscussion := &TeamDiscussion{} 131 resp, err := s.client.Do(ctx, req, teamDiscussion) 132 if err != nil { 133 return nil, resp, err 134 } 135 136 return teamDiscussion, resp, nil 137 } 138 139 // CreateDiscussionByID creates a new discussion post on a team's page given Organization and Team ID. 140 // Authenticated user must grant write:discussion scope. 141 // 142 // GitHub API docs: https://docs.github.com/en/rest/teams/discussions#create-a-discussion 143 func (s *TeamsService) CreateDiscussionByID(ctx context.Context, orgID, teamID int64, discussion TeamDiscussion) (*TeamDiscussion, *Response, error) { 144 u := fmt.Sprintf("organizations/%v/team/%v/discussions", orgID, teamID) 145 req, err := s.client.NewRequest("POST", u, discussion) 146 if err != nil { 147 return nil, nil, err 148 } 149 150 teamDiscussion := &TeamDiscussion{} 151 resp, err := s.client.Do(ctx, req, teamDiscussion) 152 if err != nil { 153 return nil, resp, err 154 } 155 156 return teamDiscussion, resp, nil 157 } 158 159 // CreateDiscussionBySlug creates a new discussion post on a team's page given Organization name and Team's slug. 160 // Authenticated user must grant write:discussion scope. 161 // 162 // GitHub API docs: https://docs.github.com/en/rest/teams/discussions#create-a-discussion 163 func (s *TeamsService) CreateDiscussionBySlug(ctx context.Context, org, slug string, discussion TeamDiscussion) (*TeamDiscussion, *Response, error) { 164 u := fmt.Sprintf("orgs/%v/teams/%v/discussions", org, slug) 165 req, err := s.client.NewRequest("POST", u, discussion) 166 if err != nil { 167 return nil, nil, err 168 } 169 170 teamDiscussion := &TeamDiscussion{} 171 resp, err := s.client.Do(ctx, req, teamDiscussion) 172 if err != nil { 173 return nil, resp, err 174 } 175 176 return teamDiscussion, resp, nil 177 } 178 179 // EditDiscussionByID edits the title and body text of a discussion post given Organization and Team ID. 180 // Authenticated user must grant write:discussion scope. 181 // User is allowed to change Title and Body of a discussion only. 182 // 183 // GitHub API docs: https://docs.github.com/en/rest/teams/discussions#update-a-discussion 184 func (s *TeamsService) EditDiscussionByID(ctx context.Context, orgID, teamID int64, discussionNumber int, discussion TeamDiscussion) (*TeamDiscussion, *Response, error) { 185 u := fmt.Sprintf("organizations/%v/team/%v/discussions/%v", orgID, teamID, discussionNumber) 186 req, err := s.client.NewRequest("PATCH", u, discussion) 187 if err != nil { 188 return nil, nil, err 189 } 190 191 teamDiscussion := &TeamDiscussion{} 192 resp, err := s.client.Do(ctx, req, teamDiscussion) 193 if err != nil { 194 return nil, resp, err 195 } 196 197 return teamDiscussion, resp, nil 198 } 199 200 // EditDiscussionBySlug edits the title and body text of a discussion post given Organization name and Team's slug. 201 // Authenticated user must grant write:discussion scope. 202 // User is allowed to change Title and Body of a discussion only. 203 // 204 // GitHub API docs: https://docs.github.com/en/rest/teams/discussions#update-a-discussion 205 func (s *TeamsService) EditDiscussionBySlug(ctx context.Context, org, slug string, discussionNumber int, discussion TeamDiscussion) (*TeamDiscussion, *Response, error) { 206 u := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v", org, slug, discussionNumber) 207 req, err := s.client.NewRequest("PATCH", u, discussion) 208 if err != nil { 209 return nil, nil, err 210 } 211 212 teamDiscussion := &TeamDiscussion{} 213 resp, err := s.client.Do(ctx, req, teamDiscussion) 214 if err != nil { 215 return nil, resp, err 216 } 217 218 return teamDiscussion, resp, nil 219 } 220 221 // DeleteDiscussionByID deletes a discussion from team's page given Organization and Team ID. 222 // Authenticated user must grant write:discussion scope. 223 // 224 // GitHub API docs: https://docs.github.com/en/rest/teams/discussions#delete-a-discussion 225 func (s *TeamsService) DeleteDiscussionByID(ctx context.Context, orgID, teamID int64, discussionNumber int) (*Response, error) { 226 u := fmt.Sprintf("organizations/%v/team/%v/discussions/%v", orgID, teamID, discussionNumber) 227 req, err := s.client.NewRequest("DELETE", u, nil) 228 if err != nil { 229 return nil, err 230 } 231 232 return s.client.Do(ctx, req, nil) 233 } 234 235 // DeleteDiscussionBySlug deletes a discussion from team's page given Organization name and Team's slug. 236 // Authenticated user must grant write:discussion scope. 237 // 238 // GitHub API docs: https://docs.github.com/en/rest/teams/discussions#delete-a-discussion 239 func (s *TeamsService) DeleteDiscussionBySlug(ctx context.Context, org, slug string, discussionNumber int) (*Response, error) { 240 u := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v", org, slug, discussionNumber) 241 req, err := s.client.NewRequest("DELETE", u, nil) 242 if err != nil { 243 return nil, err 244 } 245 246 return s.client.Do(ctx, req, nil) 247 }