award_emojis.go

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