github.com/google/go-github/v65@v65.0.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/rest/teams/discussions#list-discussions 53 // 54 //meta:operation GET /orgs/{org}/teams/{team_slug}/discussions 55 func (s *TeamsService) ListDiscussionsByID(ctx context.Context, orgID, teamID int64, opts *DiscussionListOptions) ([]*TeamDiscussion, *Response, error) { 56 u := fmt.Sprintf("organizations/%v/team/%v/discussions", orgID, teamID) 57 u, err := addOptions(u, opts) 58 if err != nil { 59 return nil, nil, err 60 } 61 62 req, err := s.client.NewRequest("GET", u, nil) 63 if err != nil { 64 return nil, nil, err 65 } 66 67 var teamDiscussions []*TeamDiscussion 68 resp, err := s.client.Do(ctx, req, &teamDiscussions) 69 if err != nil { 70 return nil, resp, err 71 } 72 73 return teamDiscussions, resp, nil 74 } 75 76 // ListDiscussionsBySlug lists all discussions on team's page given Organization name and Team's slug. 77 // Authenticated user must grant read:discussion scope. 78 // 79 // GitHub API docs: https://docs.github.com/rest/teams/discussions#list-discussions 80 // 81 //meta:operation GET /orgs/{org}/teams/{team_slug}/discussions 82 func (s *TeamsService) ListDiscussionsBySlug(ctx context.Context, org, slug string, opts *DiscussionListOptions) ([]*TeamDiscussion, *Response, error) { 83 u := fmt.Sprintf("orgs/%v/teams/%v/discussions", org, slug) 84 u, err := addOptions(u, opts) 85 if err != nil { 86 return nil, nil, err 87 } 88 89 req, err := s.client.NewRequest("GET", u, nil) 90 if err != nil { 91 return nil, nil, err 92 } 93 94 var teamDiscussions []*TeamDiscussion 95 resp, err := s.client.Do(ctx, req, &teamDiscussions) 96 if err != nil { 97 return nil, resp, err 98 } 99 100 return teamDiscussions, resp, nil 101 } 102 103 // GetDiscussionByID gets a specific discussion on a team's page given Organization and Team ID. 104 // Authenticated user must grant read:discussion scope. 105 // 106 // GitHub API docs: https://docs.github.com/rest/teams/discussions#get-a-discussion 107 // 108 //meta:operation GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number} 109 func (s *TeamsService) GetDiscussionByID(ctx context.Context, orgID, teamID int64, discussionNumber int) (*TeamDiscussion, *Response, error) { 110 u := fmt.Sprintf("organizations/%v/team/%v/discussions/%v", orgID, teamID, discussionNumber) 111 req, err := s.client.NewRequest("GET", u, nil) 112 if err != nil { 113 return nil, nil, err 114 } 115 116 teamDiscussion := &TeamDiscussion{} 117 resp, err := s.client.Do(ctx, req, teamDiscussion) 118 if err != nil { 119 return nil, resp, err 120 } 121 122 return teamDiscussion, resp, nil 123 } 124 125 // GetDiscussionBySlug gets a specific discussion on a team's page given Organization name and Team's slug. 126 // Authenticated user must grant read:discussion scope. 127 // 128 // GitHub API docs: https://docs.github.com/rest/teams/discussions#get-a-discussion 129 // 130 //meta:operation GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number} 131 func (s *TeamsService) GetDiscussionBySlug(ctx context.Context, org, slug string, discussionNumber int) (*TeamDiscussion, *Response, error) { 132 u := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v", org, slug, discussionNumber) 133 req, err := s.client.NewRequest("GET", u, nil) 134 if err != nil { 135 return nil, nil, err 136 } 137 138 teamDiscussion := &TeamDiscussion{} 139 resp, err := s.client.Do(ctx, req, teamDiscussion) 140 if err != nil { 141 return nil, resp, err 142 } 143 144 return teamDiscussion, resp, nil 145 } 146 147 // CreateDiscussionByID creates a new discussion post on a team's page given Organization and Team ID. 148 // Authenticated user must grant write:discussion scope. 149 // 150 // GitHub API docs: https://docs.github.com/rest/teams/discussions#create-a-discussion 151 // 152 //meta:operation POST /orgs/{org}/teams/{team_slug}/discussions 153 func (s *TeamsService) CreateDiscussionByID(ctx context.Context, orgID, teamID int64, discussion TeamDiscussion) (*TeamDiscussion, *Response, error) { 154 u := fmt.Sprintf("organizations/%v/team/%v/discussions", orgID, teamID) 155 req, err := s.client.NewRequest("POST", u, discussion) 156 if err != nil { 157 return nil, nil, err 158 } 159 160 teamDiscussion := &TeamDiscussion{} 161 resp, err := s.client.Do(ctx, req, teamDiscussion) 162 if err != nil { 163 return nil, resp, err 164 } 165 166 return teamDiscussion, resp, nil 167 } 168 169 // CreateDiscussionBySlug creates a new discussion post on a team's page given Organization name and Team's slug. 170 // Authenticated user must grant write:discussion scope. 171 // 172 // GitHub API docs: https://docs.github.com/rest/teams/discussions#create-a-discussion 173 // 174 //meta:operation POST /orgs/{org}/teams/{team_slug}/discussions 175 func (s *TeamsService) CreateDiscussionBySlug(ctx context.Context, org, slug string, discussion TeamDiscussion) (*TeamDiscussion, *Response, error) { 176 u := fmt.Sprintf("orgs/%v/teams/%v/discussions", org, slug) 177 req, err := s.client.NewRequest("POST", u, discussion) 178 if err != nil { 179 return nil, nil, err 180 } 181 182 teamDiscussion := &TeamDiscussion{} 183 resp, err := s.client.Do(ctx, req, teamDiscussion) 184 if err != nil { 185 return nil, resp, err 186 } 187 188 return teamDiscussion, resp, nil 189 } 190 191 // EditDiscussionByID edits the title and body text of a discussion post given Organization and Team ID. 192 // Authenticated user must grant write:discussion scope. 193 // User is allowed to change Title and Body of a discussion only. 194 // 195 // GitHub API docs: https://docs.github.com/rest/teams/discussions#update-a-discussion 196 // 197 //meta:operation PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number} 198 func (s *TeamsService) EditDiscussionByID(ctx context.Context, orgID, teamID int64, discussionNumber int, discussion TeamDiscussion) (*TeamDiscussion, *Response, error) { 199 u := fmt.Sprintf("organizations/%v/team/%v/discussions/%v", orgID, teamID, discussionNumber) 200 req, err := s.client.NewRequest("PATCH", u, discussion) 201 if err != nil { 202 return nil, nil, err 203 } 204 205 teamDiscussion := &TeamDiscussion{} 206 resp, err := s.client.Do(ctx, req, teamDiscussion) 207 if err != nil { 208 return nil, resp, err 209 } 210 211 return teamDiscussion, resp, nil 212 } 213 214 // EditDiscussionBySlug edits the title and body text of a discussion post given Organization name and Team's slug. 215 // Authenticated user must grant write:discussion scope. 216 // User is allowed to change Title and Body of a discussion only. 217 // 218 // GitHub API docs: https://docs.github.com/rest/teams/discussions#update-a-discussion 219 // 220 //meta:operation PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number} 221 func (s *TeamsService) EditDiscussionBySlug(ctx context.Context, org, slug string, discussionNumber int, discussion TeamDiscussion) (*TeamDiscussion, *Response, error) { 222 u := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v", org, slug, discussionNumber) 223 req, err := s.client.NewRequest("PATCH", u, discussion) 224 if err != nil { 225 return nil, nil, err 226 } 227 228 teamDiscussion := &TeamDiscussion{} 229 resp, err := s.client.Do(ctx, req, teamDiscussion) 230 if err != nil { 231 return nil, resp, err 232 } 233 234 return teamDiscussion, resp, nil 235 } 236 237 // DeleteDiscussionByID deletes a discussion from team's page given Organization and Team ID. 238 // Authenticated user must grant write:discussion scope. 239 // 240 // GitHub API docs: https://docs.github.com/rest/teams/discussions#delete-a-discussion 241 // 242 //meta:operation DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number} 243 func (s *TeamsService) DeleteDiscussionByID(ctx context.Context, orgID, teamID int64, discussionNumber int) (*Response, error) { 244 u := fmt.Sprintf("organizations/%v/team/%v/discussions/%v", orgID, teamID, discussionNumber) 245 req, err := s.client.NewRequest("DELETE", u, nil) 246 if err != nil { 247 return nil, err 248 } 249 250 return s.client.Do(ctx, req, nil) 251 } 252 253 // DeleteDiscussionBySlug deletes a discussion from team's page given Organization name and Team's slug. 254 // Authenticated user must grant write:discussion scope. 255 // 256 // GitHub API docs: https://docs.github.com/rest/teams/discussions#delete-a-discussion 257 // 258 //meta:operation DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number} 259 func (s *TeamsService) DeleteDiscussionBySlug(ctx context.Context, org, slug string, discussionNumber int) (*Response, error) { 260 u := fmt.Sprintf("orgs/%v/teams/%v/discussions/%v", org, slug, discussionNumber) 261 req, err := s.client.NewRequest("DELETE", u, nil) 262 if err != nil { 263 return nil, err 264 } 265 266 return s.client.Do(ctx, req, nil) 267 }