...

Source file src/github.com/xanzy/go-gitlab/group_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  // GroupBadgesService handles communication with the group badges
    25  //
    26  // GitLab API docs:
    27  // https://docs.gitlab.com/ee/api/group_badges.html
    28  type GroupBadgesService struct {
    29  	client *Client
    30  }
    31  
    32  // BadgeKind represents a GitLab Badge Kind
    33  type BadgeKind string
    34  
    35  // all possible values Badge Kind
    36  const (
    37  	ProjectBadgeKind BadgeKind = "project"
    38  	GroupBadgeKind   BadgeKind = "group"
    39  )
    40  
    41  // GroupBadge represents a group badge.
    42  //
    43  // GitLab API docs:
    44  // https://docs.gitlab.com/ee/api/group_badges.html
    45  type GroupBadge struct {
    46  	ID               int       `json:"id"`
    47  	Name             string    `json:"name"`
    48  	LinkURL          string    `json:"link_url"`
    49  	ImageURL         string    `json:"image_url"`
    50  	RenderedLinkURL  string    `json:"rendered_link_url"`
    51  	RenderedImageURL string    `json:"rendered_image_url"`
    52  	Kind             BadgeKind `json:"kind"`
    53  }
    54  
    55  // ListGroupBadgesOptions represents the available ListGroupBadges() options.
    56  //
    57  // GitLab API docs:
    58  // https://docs.gitlab.com/ee/api/group_badges.html#list-all-badges-of-a-group
    59  type ListGroupBadgesOptions struct {
    60  	ListOptions
    61  	Name *string `url:"name,omitempty" json:"name,omitempty"`
    62  }
    63  
    64  // ListGroupBadges gets a list of a group badges.
    65  //
    66  // GitLab API docs:
    67  // https://docs.gitlab.com/ee/api/group_badges.html#list-all-badges-of-a-group
    68  func (s *GroupBadgesService) ListGroupBadges(gid interface{}, opt *ListGroupBadgesOptions, options ...RequestOptionFunc) ([]*GroupBadge, *Response, error) {
    69  	group, err := parseID(gid)
    70  	if err != nil {
    71  		return nil, nil, err
    72  	}
    73  	u := fmt.Sprintf("groups/%s/badges", PathEscape(group))
    74  
    75  	req, err := s.client.NewRequest(http.MethodGet, u, opt, options)
    76  	if err != nil {
    77  		return nil, nil, err
    78  	}
    79  
    80  	var gb []*GroupBadge
    81  	resp, err := s.client.Do(req, &gb)
    82  	if err != nil {
    83  		return nil, resp, err
    84  	}
    85  
    86  	return gb, resp, nil
    87  }
    88  
    89  // GetGroupBadge gets a group badge.
    90  //
    91  // GitLab API docs:
    92  // https://docs.gitlab.com/ee/api/group_badges.html#get-a-badge-of-a-group
    93  func (s *GroupBadgesService) GetGroupBadge(gid interface{}, badge int, options ...RequestOptionFunc) (*GroupBadge, *Response, error) {
    94  	group, err := parseID(gid)
    95  	if err != nil {
    96  		return nil, nil, err
    97  	}
    98  	u := fmt.Sprintf("groups/%s/badges/%d", PathEscape(group), badge)
    99  
   100  	req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
   101  	if err != nil {
   102  		return nil, nil, err
   103  	}
   104  
   105  	gb := new(GroupBadge)
   106  	resp, err := s.client.Do(req, gb)
   107  	if err != nil {
   108  		return nil, resp, err
   109  	}
   110  
   111  	return gb, resp, nil
   112  }
   113  
   114  // AddGroupBadgeOptions represents the available AddGroupBadge() options.
   115  //
   116  // GitLab API docs:
   117  // https://docs.gitlab.com/ee/api/group_badges.html#add-a-badge-to-a-group
   118  type AddGroupBadgeOptions struct {
   119  	LinkURL  *string `url:"link_url,omitempty" json:"link_url,omitempty"`
   120  	ImageURL *string `url:"image_url,omitempty" json:"image_url,omitempty"`
   121  	Name     *string `url:"name,omitempty" json:"name,omitempty"`
   122  }
   123  
   124  // AddGroupBadge adds a badge to a group.
   125  //
   126  // GitLab API docs:
   127  // https://docs.gitlab.com/ee/api/group_badges.html#add-a-badge-to-a-group
   128  func (s *GroupBadgesService) AddGroupBadge(gid interface{}, opt *AddGroupBadgeOptions, options ...RequestOptionFunc) (*GroupBadge, *Response, error) {
   129  	group, err := parseID(gid)
   130  	if err != nil {
   131  		return nil, nil, err
   132  	}
   133  	u := fmt.Sprintf("groups/%s/badges", PathEscape(group))
   134  
   135  	req, err := s.client.NewRequest(http.MethodPost, u, opt, options)
   136  	if err != nil {
   137  		return nil, nil, err
   138  	}
   139  
   140  	gb := new(GroupBadge)
   141  	resp, err := s.client.Do(req, gb)
   142  	if err != nil {
   143  		return nil, resp, err
   144  	}
   145  
   146  	return gb, resp, nil
   147  }
   148  
   149  // EditGroupBadgeOptions represents the available EditGroupBadge() options.
   150  //
   151  // GitLab API docs:
   152  // https://docs.gitlab.com/ee/api/group_badges.html#edit-a-badge-of-a-group
   153  type EditGroupBadgeOptions struct {
   154  	LinkURL  *string `url:"link_url,omitempty" json:"link_url,omitempty"`
   155  	ImageURL *string `url:"image_url,omitempty" json:"image_url,omitempty"`
   156  	Name     *string `url:"name,omitempty" json:"name,omitempty"`
   157  }
   158  
   159  // EditGroupBadge updates a badge of a group.
   160  //
   161  // GitLab API docs:
   162  // https://docs.gitlab.com/ee/api/group_badges.html#edit-a-badge-of-a-group
   163  func (s *GroupBadgesService) EditGroupBadge(gid interface{}, badge int, opt *EditGroupBadgeOptions, options ...RequestOptionFunc) (*GroupBadge, *Response, error) {
   164  	group, err := parseID(gid)
   165  	if err != nil {
   166  		return nil, nil, err
   167  	}
   168  	u := fmt.Sprintf("groups/%s/badges/%d", PathEscape(group), badge)
   169  
   170  	req, err := s.client.NewRequest(http.MethodPut, u, opt, options)
   171  	if err != nil {
   172  		return nil, nil, err
   173  	}
   174  
   175  	gb := new(GroupBadge)
   176  	resp, err := s.client.Do(req, gb)
   177  	if err != nil {
   178  		return nil, resp, err
   179  	}
   180  
   181  	return gb, resp, nil
   182  }
   183  
   184  // DeleteGroupBadge removes a badge from a group.
   185  //
   186  // GitLab API docs:
   187  // https://docs.gitlab.com/ee/api/group_badges.html#remove-a-badge-from-a-group
   188  func (s *GroupBadgesService) DeleteGroupBadge(gid interface{}, badge int, options ...RequestOptionFunc) (*Response, error) {
   189  	group, err := parseID(gid)
   190  	if err != nil {
   191  		return nil, err
   192  	}
   193  	u := fmt.Sprintf("groups/%s/badges/%d", PathEscape(group), badge)
   194  
   195  	req, err := s.client.NewRequest(http.MethodDelete, u, nil, options)
   196  	if err != nil {
   197  		return nil, err
   198  	}
   199  
   200  	return s.client.Do(req, nil)
   201  }
   202  
   203  // GroupBadgePreviewOptions represents the available PreviewGroupBadge() options.
   204  //
   205  // GitLab API docs:
   206  // https://docs.gitlab.com/ee/api/group_badges.html#preview-a-badge-from-a-group
   207  type GroupBadgePreviewOptions struct {
   208  	LinkURL  *string `url:"link_url,omitempty" json:"link_url,omitempty"`
   209  	ImageURL *string `url:"image_url,omitempty" json:"image_url,omitempty"`
   210  	Name     *string `url:"name,omitempty" json:"name,omitempty"`
   211  }
   212  
   213  // PreviewGroupBadge returns how the link_url and image_url final URLs would be after
   214  // resolving the placeholder interpolation.
   215  //
   216  // GitLab API docs:
   217  // https://docs.gitlab.com/ee/api/group_badges.html#preview-a-badge-from-a-group
   218  func (s *GroupBadgesService) PreviewGroupBadge(gid interface{}, opt *GroupBadgePreviewOptions, options ...RequestOptionFunc) (*GroupBadge, *Response, error) {
   219  	group, err := parseID(gid)
   220  	if err != nil {
   221  		return nil, nil, err
   222  	}
   223  	u := fmt.Sprintf("groups/%s/badges/render", PathEscape(group))
   224  
   225  	req, err := s.client.NewRequest(http.MethodGet, u, opt, options)
   226  	if err != nil {
   227  		return nil, nil, err
   228  	}
   229  
   230  	gb := new(GroupBadge)
   231  	resp, err := s.client.Do(req, &gb)
   232  	if err != nil {
   233  		return nil, resp, err
   234  	}
   235  
   236  	return gb, resp, nil
   237  }
   238  

View as plain text