...

Source file src/github.com/xanzy/go-gitlab/project_badges.go

Documentation: github.com/xanzy/go-gitlab

     1  //
     2  // Copyright 2021, Sander van Harmelen
     3  //
     4  // Licensed under the Apache License, Version 2.0 (the "License");
     5  // you may not use this file except in compliance with the License.
     6  // You may obtain a copy of the License at
     7  //
     8  //     http://www.apache.org/licenses/LICENSE-2.0
     9  //
    10  // Unless required by applicable law or agreed to in writing, software
    11  // distributed under the License is distributed on an "AS IS" BASIS,
    12  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  // See the License for the specific language governing permissions and
    14  // limitations under the License.
    15  //
    16  
    17  package gitlab
    18  
    19  import (
    20  	"fmt"
    21  	"net/http"
    22  )
    23  
    24  // ProjectBadge represents a project badge.
    25  //
    26  // GitLab API docs:
    27  // https://docs.gitlab.com/ee/api/project_badges.html#list-all-badges-of-a-project
    28  type ProjectBadge struct {
    29  	ID               int    `json:"id"`
    30  	Name             string `json:"name"`
    31  	LinkURL          string `json:"link_url"`
    32  	ImageURL         string `json:"image_url"`
    33  	RenderedLinkURL  string `json:"rendered_link_url"`
    34  	RenderedImageURL string `json:"rendered_image_url"`
    35  	// Kind represents a project badge kind. Can be empty, when used PreviewProjectBadge().
    36  	Kind string `json:"kind"`
    37  }
    38  
    39  // ProjectBadgesService handles communication with the project badges
    40  // related methods of the GitLab API.
    41  //
    42  // GitLab API docs: https://docs.gitlab.com/ee/api/project_badges.html
    43  type ProjectBadgesService struct {
    44  	client *Client
    45  }
    46  
    47  // ListProjectBadgesOptions represents the available ListProjectBadges()
    48  // options.
    49  //
    50  // GitLab API docs:
    51  // https://docs.gitlab.com/ee/api/project_badges.html#list-all-badges-of-a-project
    52  type ListProjectBadgesOptions struct {
    53  	ListOptions
    54  	Name *string `url:"name,omitempty" json:"name,omitempty"`
    55  }
    56  
    57  // ListProjectBadges gets a list of a project's badges and its group badges.
    58  //
    59  // GitLab API docs:
    60  // https://docs.gitlab.com/ee/api/project_badges.html#list-all-badges-of-a-project
    61  func (s *ProjectBadgesService) ListProjectBadges(pid interface{}, opt *ListProjectBadgesOptions, options ...RequestOptionFunc) ([]*ProjectBadge, *Response, error) {
    62  	project, err := parseID(pid)
    63  	if err != nil {
    64  		return nil, nil, err
    65  	}
    66  	u := fmt.Sprintf("projects/%s/badges", PathEscape(project))
    67  
    68  	req, err := s.client.NewRequest(http.MethodGet, u, opt, options)
    69  	if err != nil {
    70  		return nil, nil, err
    71  	}
    72  
    73  	var pb []*ProjectBadge
    74  	resp, err := s.client.Do(req, &pb)
    75  	if err != nil {
    76  		return nil, resp, err
    77  	}
    78  
    79  	return pb, resp, nil
    80  }
    81  
    82  // GetProjectBadge gets a project badge.
    83  //
    84  // GitLab API docs:
    85  // https://docs.gitlab.com/ee/api/project_badges.html#get-a-badge-of-a-project
    86  func (s *ProjectBadgesService) GetProjectBadge(pid interface{}, badge int, options ...RequestOptionFunc) (*ProjectBadge, *Response, error) {
    87  	project, err := parseID(pid)
    88  	if err != nil {
    89  		return nil, nil, err
    90  	}
    91  	u := fmt.Sprintf("projects/%s/badges/%d", PathEscape(project), badge)
    92  
    93  	req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
    94  	if err != nil {
    95  		return nil, nil, err
    96  	}
    97  
    98  	pb := new(ProjectBadge)
    99  	resp, err := s.client.Do(req, pb)
   100  	if err != nil {
   101  		return nil, resp, err
   102  	}
   103  
   104  	return pb, resp, nil
   105  }
   106  
   107  // AddProjectBadgeOptions represents the available AddProjectBadge() options.
   108  //
   109  // GitLab API docs:
   110  // https://docs.gitlab.com/ee/api/project_badges.html#add-a-badge-to-a-project
   111  type AddProjectBadgeOptions struct {
   112  	LinkURL  *string `url:"link_url,omitempty" json:"link_url,omitempty"`
   113  	ImageURL *string `url:"image_url,omitempty" json:"image_url,omitempty"`
   114  	Name     *string `url:"name,omitempty" json:"name,omitempty"`
   115  }
   116  
   117  // AddProjectBadge adds a badge to a project.
   118  //
   119  // GitLab API docs:
   120  // https://docs.gitlab.com/ee/api/project_badges.html#add-a-badge-to-a-project
   121  func (s *ProjectBadgesService) AddProjectBadge(pid interface{}, opt *AddProjectBadgeOptions, options ...RequestOptionFunc) (*ProjectBadge, *Response, error) {
   122  	project, err := parseID(pid)
   123  	if err != nil {
   124  		return nil, nil, err
   125  	}
   126  	u := fmt.Sprintf("projects/%s/badges", PathEscape(project))
   127  
   128  	req, err := s.client.NewRequest(http.MethodPost, u, opt, options)
   129  	if err != nil {
   130  		return nil, nil, err
   131  	}
   132  
   133  	pb := new(ProjectBadge)
   134  	resp, err := s.client.Do(req, pb)
   135  	if err != nil {
   136  		return nil, resp, err
   137  	}
   138  
   139  	return pb, resp, nil
   140  }
   141  
   142  // EditProjectBadgeOptions represents the available EditProjectBadge() options.
   143  //
   144  // GitLab API docs:
   145  // https://docs.gitlab.com/ee/api/project_badges.html#edit-a-badge-of-a-project
   146  type EditProjectBadgeOptions struct {
   147  	LinkURL  *string `url:"link_url,omitempty" json:"link_url,omitempty"`
   148  	ImageURL *string `url:"image_url,omitempty" json:"image_url,omitempty"`
   149  	Name     *string `url:"name,omitempty" json:"name,omitempty"`
   150  }
   151  
   152  // EditProjectBadge updates a badge of a project.
   153  //
   154  // GitLab API docs:
   155  // https://docs.gitlab.com/ee/api/project_badges.html#edit-a-badge-of-a-project
   156  func (s *ProjectBadgesService) EditProjectBadge(pid interface{}, badge int, opt *EditProjectBadgeOptions, options ...RequestOptionFunc) (*ProjectBadge, *Response, error) {
   157  	project, err := parseID(pid)
   158  	if err != nil {
   159  		return nil, nil, err
   160  	}
   161  	u := fmt.Sprintf("projects/%s/badges/%d", PathEscape(project), badge)
   162  
   163  	req, err := s.client.NewRequest(http.MethodPut, u, opt, options)
   164  	if err != nil {
   165  		return nil, nil, err
   166  	}
   167  
   168  	pb := new(ProjectBadge)
   169  	resp, err := s.client.Do(req, pb)
   170  	if err != nil {
   171  		return nil, resp, err
   172  	}
   173  
   174  	return pb, resp, nil
   175  }
   176  
   177  // DeleteProjectBadge removes a badge from a project. Only project's
   178  // badges will be removed by using this endpoint.
   179  //
   180  // GitLab API docs:
   181  // https://docs.gitlab.com/ee/api/project_badges.html#remove-a-badge-from-a-project
   182  func (s *ProjectBadgesService) DeleteProjectBadge(pid interface{}, badge int, options ...RequestOptionFunc) (*Response, error) {
   183  	project, err := parseID(pid)
   184  	if err != nil {
   185  		return nil, err
   186  	}
   187  	u := fmt.Sprintf("projects/%s/badges/%d", PathEscape(project), badge)
   188  
   189  	req, err := s.client.NewRequest(http.MethodDelete, u, nil, options)
   190  	if err != nil {
   191  		return nil, err
   192  	}
   193  
   194  	return s.client.Do(req, nil)
   195  }
   196  
   197  // ProjectBadgePreviewOptions represents the available PreviewProjectBadge() options.
   198  //
   199  // GitLab API docs:
   200  // https://docs.gitlab.com/ee/api/project_badges.html#preview-a-badge-from-a-project
   201  type ProjectBadgePreviewOptions struct {
   202  	LinkURL  *string `url:"link_url,omitempty" json:"link_url,omitempty"`
   203  	ImageURL *string `url:"image_url,omitempty" json:"image_url,omitempty"`
   204  }
   205  
   206  // PreviewProjectBadge returns how the link_url and image_url final URLs would be after
   207  // resolving the placeholder interpolation.
   208  //
   209  // GitLab API docs:
   210  // https://docs.gitlab.com/ee/api/project_badges.html#preview-a-badge-from-a-project
   211  func (s *ProjectBadgesService) PreviewProjectBadge(pid interface{}, opt *ProjectBadgePreviewOptions, options ...RequestOptionFunc) (*ProjectBadge, *Response, error) {
   212  	project, err := parseID(pid)
   213  	if err != nil {
   214  		return nil, nil, err
   215  	}
   216  	u := fmt.Sprintf("projects/%s/badges/render", PathEscape(project))
   217  
   218  	req, err := s.client.NewRequest(http.MethodGet, u, opt, options)
   219  	if err != nil {
   220  		return nil, nil, err
   221  	}
   222  
   223  	pb := new(ProjectBadge)
   224  	resp, err := s.client.Do(req, &pb)
   225  	if err != nil {
   226  		return nil, resp, err
   227  	}
   228  
   229  	return pb, resp, nil
   230  }
   231  

View as plain text