...

Source file src/github.com/google/go-github/v45/github/teams_discussions.go

Documentation: github.com/google/go-github/v45/github

     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  }
   248  

View as plain text