project_badges.go

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