group_badges.go

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