award_emojis.go 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468
  1. //
  2. // Copyright 2017, Arkbriar
  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. package gitlab
  17. import (
  18. "fmt"
  19. "net/url"
  20. "time"
  21. )
  22. // AwardEmojiService handles communication with the emoji awards related methods
  23. // of the GitLab API.
  24. //
  25. // GitLab API docs: https://docs.gitlab.com/ce/api/award_emoji.html
  26. type AwardEmojiService struct {
  27. client *Client
  28. }
  29. // AwardEmoji represents a GitLab Award Emoji.
  30. //
  31. // GitLab API docs: https://docs.gitlab.com/ce/api/award_emoji.html
  32. type AwardEmoji struct {
  33. ID int `json:"id"`
  34. Name string `json:"name"`
  35. User struct {
  36. Name string `json:"name"`
  37. Username string `json:"username"`
  38. ID int `json:"id"`
  39. State string `json:"state"`
  40. AvatarURL string `json:"avatar_url"`
  41. WebURL string `json:"web_url"`
  42. } `json:"user"`
  43. CreatedAt *time.Time `json:"created_at"`
  44. UpdatedAt *time.Time `json:"updated_at"`
  45. AwardableID int `json:"awardable_id"`
  46. AwardableType string `json:"awardable_type"`
  47. }
  48. const (
  49. awardMergeRequest = "merge_requests"
  50. awardIssue = "issues"
  51. awardSnippets = "snippets"
  52. )
  53. // ListAwardEmojiOptions represents the available options for listing emoji
  54. // for each resources
  55. //
  56. // GitLab API docs:
  57. // https://docs.gitlab.com/ce/api/award_emoji.html
  58. type ListAwardEmojiOptions ListOptions
  59. // ListMergeRequestAwardEmoji gets a list of all award emoji on the merge request.
  60. //
  61. // GitLab API docs:
  62. // https://docs.gitlab.com/ce/api/award_emoji.html#list-an-awardable-39-s-award-emoji
  63. func (s *AwardEmojiService) ListMergeRequestAwardEmoji(pid interface{}, mergeRequestIID int, opt *ListAwardEmojiOptions, options ...OptionFunc) ([]*AwardEmoji, *Response, error) {
  64. return s.listAwardEmoji(pid, awardMergeRequest, mergeRequestIID, opt, options...)
  65. }
  66. // ListIssueAwardEmoji gets a list of all award emoji on the issue.
  67. //
  68. // GitLab API docs:
  69. // https://docs.gitlab.com/ce/api/award_emoji.html#list-an-awardable-39-s-award-emoji
  70. func (s *AwardEmojiService) ListIssueAwardEmoji(pid interface{}, issueIID int, opt *ListAwardEmojiOptions, options ...OptionFunc) ([]*AwardEmoji, *Response, error) {
  71. return s.listAwardEmoji(pid, awardIssue, issueIID, opt, options...)
  72. }
  73. // ListSnippetAwardEmoji gets a list of all award emoji on the snippet.
  74. //
  75. // GitLab API docs:
  76. // https://docs.gitlab.com/ce/api/award_emoji.html#list-an-awardable-39-s-award-emoji
  77. func (s *AwardEmojiService) ListSnippetAwardEmoji(pid interface{}, snippetID int, opt *ListAwardEmojiOptions, options ...OptionFunc) ([]*AwardEmoji, *Response, error) {
  78. return s.listAwardEmoji(pid, awardSnippets, snippetID, opt, options...)
  79. }
  80. func (s *AwardEmojiService) listAwardEmoji(pid interface{}, resource string, resourceID int, opt *ListAwardEmojiOptions, options ...OptionFunc) ([]*AwardEmoji, *Response, error) {
  81. project, err := parseID(pid)
  82. if err != nil {
  83. return nil, nil, err
  84. }
  85. u := fmt.Sprintf("projects/%s/%s/%d/award_emoji",
  86. url.QueryEscape(project),
  87. resource,
  88. resourceID,
  89. )
  90. req, err := s.client.NewRequest("GET", u, opt, options)
  91. if err != nil {
  92. return nil, nil, err
  93. }
  94. var as []*AwardEmoji
  95. resp, err := s.client.Do(req, &as)
  96. if err != nil {
  97. return nil, resp, err
  98. }
  99. return as, resp, err
  100. }
  101. // GetMergeRequestAwardEmoji get an award emoji from merge request.
  102. //
  103. // GitLab API docs:
  104. // https://docs.gitlab.com/ce/api/award_emoji.html#list-an-awardable-39-s-award-emoji
  105. func (s *AwardEmojiService) GetMergeRequestAwardEmoji(pid interface{}, mergeRequestIID, awardID int, options ...OptionFunc) (*AwardEmoji, *Response, error) {
  106. return s.getAwardEmoji(pid, awardMergeRequest, mergeRequestIID, awardID, options...)
  107. }
  108. // GetIssueAwardEmoji get an award emoji from issue.
  109. //
  110. // GitLab API docs:
  111. // https://docs.gitlab.com/ce/api/award_emoji.html#list-an-awardable-39-s-award-emoji
  112. func (s *AwardEmojiService) GetIssueAwardEmoji(pid interface{}, issueIID, awardID int, options ...OptionFunc) (*AwardEmoji, *Response, error) {
  113. return s.getAwardEmoji(pid, awardIssue, issueIID, awardID, options...)
  114. }
  115. // GetSnippetAwardEmoji get an award emoji from snippet.
  116. //
  117. // GitLab API docs:
  118. // https://docs.gitlab.com/ce/api/award_emoji.html#list-an-awardable-39-s-award-emoji
  119. func (s *AwardEmojiService) GetSnippetAwardEmoji(pid interface{}, snippetID, awardID int, options ...OptionFunc) (*AwardEmoji, *Response, error) {
  120. return s.getAwardEmoji(pid, awardSnippets, snippetID, awardID, options...)
  121. }
  122. func (s *AwardEmojiService) getAwardEmoji(pid interface{}, resource string, resourceID, awardID int, options ...OptionFunc) (*AwardEmoji, *Response, error) {
  123. project, err := parseID(pid)
  124. if err != nil {
  125. return nil, nil, err
  126. }
  127. u := fmt.Sprintf("projects/%s/%s/%d/award_emoji/%d",
  128. url.QueryEscape(project),
  129. resource,
  130. resourceID,
  131. awardID,
  132. )
  133. req, err := s.client.NewRequest("GET", u, nil, options)
  134. if err != nil {
  135. return nil, nil, err
  136. }
  137. a := new(AwardEmoji)
  138. resp, err := s.client.Do(req, &a)
  139. if err != nil {
  140. return nil, resp, err
  141. }
  142. return a, resp, err
  143. }
  144. // CreateAwardEmojiOptions represents the available options for awarding emoji
  145. // for a resource
  146. //
  147. // GitLab API docs:
  148. // https://docs.gitlab.com/ce/api/award_emoji.html#award-a-new-emoji
  149. type CreateAwardEmojiOptions struct {
  150. Name string `json:"name"`
  151. }
  152. // CreateMergeRequestAwardEmoji get an award emoji from merge request.
  153. //
  154. // GitLab API docs:
  155. // https://docs.gitlab.com/ce/api/award_emoji.html#award-a-new-emoji
  156. func (s *AwardEmojiService) CreateMergeRequestAwardEmoji(pid interface{}, mergeRequestIID int, opt *CreateAwardEmojiOptions, options ...OptionFunc) (*AwardEmoji, *Response, error) {
  157. return s.createAwardEmoji(pid, awardMergeRequest, mergeRequestIID, opt, options...)
  158. }
  159. // CreateIssueAwardEmoji get an award emoji from issue.
  160. //
  161. // GitLab API docs:
  162. // https://docs.gitlab.com/ce/api/award_emoji.html#award-a-new-emoji
  163. func (s *AwardEmojiService) CreateIssueAwardEmoji(pid interface{}, issueIID int, opt *CreateAwardEmojiOptions, options ...OptionFunc) (*AwardEmoji, *Response, error) {
  164. return s.createAwardEmoji(pid, awardIssue, issueIID, opt, options...)
  165. }
  166. // CreateSnippetAwardEmoji get an award emoji from snippet.
  167. //
  168. // GitLab API docs:
  169. // https://docs.gitlab.com/ce/api/award_emoji.html#award-a-new-emoji
  170. func (s *AwardEmojiService) CreateSnippetAwardEmoji(pid interface{}, snippetID int, opt *CreateAwardEmojiOptions, options ...OptionFunc) (*AwardEmoji, *Response, error) {
  171. return s.createAwardEmoji(pid, awardSnippets, snippetID, opt, options...)
  172. }
  173. func (s *AwardEmojiService) createAwardEmoji(pid interface{}, resource string, resourceID int, opt *CreateAwardEmojiOptions, options ...OptionFunc) (*AwardEmoji, *Response, error) {
  174. project, err := parseID(pid)
  175. if err != nil {
  176. return nil, nil, err
  177. }
  178. u := fmt.Sprintf("projects/%s/%s/%d/award_emoji",
  179. url.QueryEscape(project),
  180. resource,
  181. resourceID,
  182. )
  183. req, err := s.client.NewRequest("POST", u, opt, options)
  184. if err != nil {
  185. return nil, nil, err
  186. }
  187. a := new(AwardEmoji)
  188. resp, err := s.client.Do(req, &a)
  189. if err != nil {
  190. return nil, resp, err
  191. }
  192. return a, resp, err
  193. }
  194. // DeleteIssueAwardEmoji delete award emoji on an issue.
  195. //
  196. // GitLab API docs:
  197. // https://docs.gitlab.com/ce/api/award_emoji.html#award-a-new-emoji-on-a-note
  198. func (s *AwardEmojiService) DeleteIssueAwardEmoji(pid interface{}, issueIID, awardID int, options ...OptionFunc) (*Response, error) {
  199. return s.deleteAwardEmoji(pid, awardMergeRequest, issueIID, awardID, options...)
  200. }
  201. // DeleteMergeRequestAwardEmoji delete award emoji on a merge request.
  202. //
  203. // GitLab API docs:
  204. // https://docs.gitlab.com/ce/api/award_emoji.html#award-a-new-emoji-on-a-note
  205. func (s *AwardEmojiService) DeleteMergeRequestAwardEmoji(pid interface{}, mergeRequestIID, awardID int, options ...OptionFunc) (*Response, error) {
  206. return s.deleteAwardEmoji(pid, awardMergeRequest, mergeRequestIID, awardID, options...)
  207. }
  208. // DeleteSnippetAwardEmoji delete award emoji on a snippet.
  209. //
  210. // GitLab API docs:
  211. // https://docs.gitlab.com/ce/api/award_emoji.html#award-a-new-emoji-on-a-note
  212. func (s *AwardEmojiService) DeleteSnippetAwardEmoji(pid interface{}, snippetID, awardID int, options ...OptionFunc) (*Response, error) {
  213. return s.deleteAwardEmoji(pid, awardMergeRequest, snippetID, awardID, options...)
  214. }
  215. // DeleteAwardEmoji Delete an award emoji on the specified resource.
  216. //
  217. // GitLab API docs:
  218. // https://docs.gitlab.com/ce/api/award_emoji.html#delete-an-award-emoji
  219. func (s *AwardEmojiService) deleteAwardEmoji(pid interface{}, resource string, resourceID, awardID int, options ...OptionFunc) (*Response, error) {
  220. project, err := parseID(pid)
  221. if err != nil {
  222. return nil, err
  223. }
  224. u := fmt.Sprintf("projects/%s/%s/%d/award_emoji/%d", url.QueryEscape(project), resource,
  225. resourceID, awardID)
  226. req, err := s.client.NewRequest("DELETE", u, nil, options)
  227. if err != nil {
  228. return nil, err
  229. }
  230. return s.client.Do(req, nil)
  231. }
  232. // ListIssuesAwardEmojiOnNote gets a list of all award emoji on a note from the
  233. // issue.
  234. //
  235. // GitLab API docs:
  236. // https://docs.gitlab.com/ce/api/award_emoji.html#award-emoji-on-notes
  237. func (s *AwardEmojiService) ListIssuesAwardEmojiOnNote(pid interface{}, issueID, noteID int, opt *ListAwardEmojiOptions, options ...OptionFunc) ([]*AwardEmoji, *Response, error) {
  238. return s.listAwardEmojiOnNote(pid, awardIssue, issueID, noteID, opt, options...)
  239. }
  240. // ListMergeRequestAwardEmojiOnNote gets a list of all award emoji on a note
  241. // from the merge request.
  242. //
  243. // GitLab API docs:
  244. // https://docs.gitlab.com/ce/api/award_emoji.html#award-emoji-on-notes
  245. func (s *AwardEmojiService) ListMergeRequestAwardEmojiOnNote(pid interface{}, mergeRequestIID, noteID int, opt *ListAwardEmojiOptions, options ...OptionFunc) ([]*AwardEmoji, *Response, error) {
  246. return s.listAwardEmojiOnNote(pid, awardMergeRequest, mergeRequestIID, noteID, opt, options...)
  247. }
  248. // ListSnippetAwardEmojiOnNote gets a list of all award emoji on a note from the
  249. // snippet.
  250. //
  251. // GitLab API docs:
  252. // https://docs.gitlab.com/ce/api/award_emoji.html#award-emoji-on-notes
  253. func (s *AwardEmojiService) ListSnippetAwardEmojiOnNote(pid interface{}, snippetIID, noteID int, opt *ListAwardEmojiOptions, options ...OptionFunc) ([]*AwardEmoji, *Response, error) {
  254. return s.listAwardEmojiOnNote(pid, awardSnippets, snippetIID, noteID, opt, options...)
  255. }
  256. func (s *AwardEmojiService) listAwardEmojiOnNote(pid interface{}, resources string, ressourceID, noteID int, opt *ListAwardEmojiOptions, options ...OptionFunc) ([]*AwardEmoji, *Response, error) {
  257. project, err := parseID(pid)
  258. if err != nil {
  259. return nil, nil, err
  260. }
  261. u := fmt.Sprintf("projects/%s/%s/%d/notes/%d/award_emoji", url.QueryEscape(project), resources,
  262. ressourceID, noteID)
  263. req, err := s.client.NewRequest("GET", u, opt, options)
  264. if err != nil {
  265. return nil, nil, err
  266. }
  267. var as []*AwardEmoji
  268. resp, err := s.client.Do(req, &as)
  269. if err != nil {
  270. return nil, resp, err
  271. }
  272. return as, resp, err
  273. }
  274. // GetIssuesAwardEmojiOnNote gets an award emoji on a note from an issue.
  275. //
  276. // GitLab API docs:
  277. // https://docs.gitlab.com/ce/api/award_emoji.html#award-emoji-on-notes
  278. func (s *AwardEmojiService) GetIssuesAwardEmojiOnNote(pid interface{}, issueID, noteID, awardID int, options ...OptionFunc) (*AwardEmoji, *Response, error) {
  279. return s.getSingleNoteAwardEmoji(pid, awardIssue, issueID, noteID, awardID, options...)
  280. }
  281. // GetMergeRequestAwardEmojiOnNote gets an award emoji on a note from a
  282. // merge request.
  283. //
  284. // GitLab API docs:
  285. // https://docs.gitlab.com/ce/api/award_emoji.html#award-emoji-on-notes
  286. func (s *AwardEmojiService) GetMergeRequestAwardEmojiOnNote(pid interface{}, mergeRequestIID, noteID, awardID int, options ...OptionFunc) (*AwardEmoji, *Response, error) {
  287. return s.getSingleNoteAwardEmoji(pid, awardMergeRequest, mergeRequestIID, noteID, awardID,
  288. options...)
  289. }
  290. // GetSnippetAwardEmojiOnNote gets an award emoji on a note from a snippet.
  291. //
  292. // GitLab API docs:
  293. // https://docs.gitlab.com/ce/api/award_emoji.html#award-emoji-on-notes
  294. func (s *AwardEmojiService) GetSnippetAwardEmojiOnNote(pid interface{}, snippetIID, noteID, awardID int, options ...OptionFunc) (*AwardEmoji, *Response, error) {
  295. return s.getSingleNoteAwardEmoji(pid, awardSnippets, snippetIID, noteID, awardID, options...)
  296. }
  297. func (s *AwardEmojiService) getSingleNoteAwardEmoji(pid interface{}, ressource string, resourceID, noteID, awardID int, options ...OptionFunc) (*AwardEmoji, *Response, error) {
  298. project, err := parseID(pid)
  299. if err != nil {
  300. return nil, nil, err
  301. }
  302. u := fmt.Sprintf("projects/%s/%s/%d/notes/%d/award_emoji/%d",
  303. url.QueryEscape(project),
  304. ressource,
  305. resourceID,
  306. noteID,
  307. awardID,
  308. )
  309. req, err := s.client.NewRequest("GET", u, nil, options)
  310. if err != nil {
  311. return nil, nil, err
  312. }
  313. a := new(AwardEmoji)
  314. resp, err := s.client.Do(req, &a)
  315. if err != nil {
  316. return nil, resp, err
  317. }
  318. return a, resp, err
  319. }
  320. // CreateIssuesAwardEmojiOnNote gets an award emoji on a note from an issue.
  321. //
  322. // GitLab API docs:
  323. // https://docs.gitlab.com/ce/api/award_emoji.html#award-emoji-on-notes
  324. func (s *AwardEmojiService) CreateIssuesAwardEmojiOnNote(pid interface{}, issueID, noteID int, opt *CreateAwardEmojiOptions, options ...OptionFunc) (*AwardEmoji, *Response, error) {
  325. return s.createAwardEmojiOnNote(pid, awardIssue, issueID, noteID, opt, options...)
  326. }
  327. // CreateMergeRequestAwardEmojiOnNote gets an award emoji on a note from a
  328. // merge request.
  329. //
  330. // GitLab API docs:
  331. // https://docs.gitlab.com/ce/api/award_emoji.html#award-emoji-on-notes
  332. func (s *AwardEmojiService) CreateMergeRequestAwardEmojiOnNote(pid interface{}, mergeRequestIID, noteID int, opt *CreateAwardEmojiOptions, options ...OptionFunc) (*AwardEmoji, *Response, error) {
  333. return s.createAwardEmojiOnNote(pid, awardMergeRequest, mergeRequestIID, noteID, opt, options...)
  334. }
  335. // CreateSnippetAwardEmojiOnNote gets an award emoji on a note from a snippet.
  336. //
  337. // GitLab API docs:
  338. // https://docs.gitlab.com/ce/api/award_emoji.html#award-emoji-on-notes
  339. func (s *AwardEmojiService) CreateSnippetAwardEmojiOnNote(pid interface{}, snippetIID, noteID int, opt *CreateAwardEmojiOptions, options ...OptionFunc) (*AwardEmoji, *Response, error) {
  340. return s.createAwardEmojiOnNote(pid, awardSnippets, snippetIID, noteID, opt, options...)
  341. }
  342. // CreateAwardEmojiOnNote award emoji on a note.
  343. //
  344. // GitLab API docs:
  345. // https://docs.gitlab.com/ce/api/award_emoji.html#award-a-new-emoji-on-a-note
  346. func (s *AwardEmojiService) createAwardEmojiOnNote(pid interface{}, resource string, resourceID, noteID int, opt *CreateAwardEmojiOptions, options ...OptionFunc) (*AwardEmoji, *Response, error) {
  347. project, err := parseID(pid)
  348. if err != nil {
  349. return nil, nil, err
  350. }
  351. u := fmt.Sprintf("projects/%s/%s/%d/notes/%d/award_emoji",
  352. url.QueryEscape(project),
  353. resource,
  354. resourceID,
  355. noteID,
  356. )
  357. req, err := s.client.NewRequest("POST", u, nil, options)
  358. if err != nil {
  359. return nil, nil, err
  360. }
  361. a := new(AwardEmoji)
  362. resp, err := s.client.Do(req, &a)
  363. if err != nil {
  364. return nil, resp, err
  365. }
  366. return a, resp, err
  367. }
  368. // DeleteIssuesAwardEmojiOnNote deletes an award emoji on a note from an issue.
  369. //
  370. // GitLab API docs:
  371. // https://docs.gitlab.com/ce/api/award_emoji.html#award-emoji-on-notes
  372. func (s *AwardEmojiService) DeleteIssuesAwardEmojiOnNote(pid interface{}, issueID, noteID, awardID int, options ...OptionFunc) (*Response, error) {
  373. return s.deleteAwardEmojiOnNote(pid, awardIssue, issueID, noteID, awardID, options...)
  374. }
  375. // DeleteMergeRequestAwardEmojiOnNote deletes an award emoji on a note from a
  376. // merge request.
  377. //
  378. // GitLab API docs:
  379. // https://docs.gitlab.com/ce/api/award_emoji.html#award-emoji-on-notes
  380. func (s *AwardEmojiService) DeleteMergeRequestAwardEmojiOnNote(pid interface{}, mergeRequestIID, noteID, awardID int, options ...OptionFunc) (*Response, error) {
  381. return s.deleteAwardEmojiOnNote(pid, awardMergeRequest, mergeRequestIID, noteID, awardID,
  382. options...)
  383. }
  384. // DeleteSnippetAwardEmojiOnNote deletes an award emoji on a note from a snippet.
  385. //
  386. // GitLab API docs:
  387. // https://docs.gitlab.com/ce/api/award_emoji.html#award-emoji-on-notes
  388. func (s *AwardEmojiService) DeleteSnippetAwardEmojiOnNote(pid interface{}, snippetIID, noteID, awardID int, options ...OptionFunc) (*Response, error) {
  389. return s.deleteAwardEmojiOnNote(pid, awardSnippets, snippetIID, noteID, awardID, options...)
  390. }
  391. func (s *AwardEmojiService) deleteAwardEmojiOnNote(pid interface{}, resource string, resourceID, noteID, awardID int, options ...OptionFunc) (*Response, error) {
  392. project, err := parseID(pid)
  393. if err != nil {
  394. return nil, err
  395. }
  396. u := fmt.Sprintf("projects/%s/%s/%d/notes/%d/award_emoji/%d",
  397. url.QueryEscape(project),
  398. resource,
  399. resourceID,
  400. noteID,
  401. awardID,
  402. )
  403. req, err := s.client.NewRequest("DELETE", u, nil, options)
  404. if err != nil {
  405. return nil, err
  406. }
  407. return s.client.Do(req, nil)
  408. }