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}