project_badges.go 6.2 KB

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