-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
AssigneesClient.cs
160 lines (142 loc) · 7.02 KB
/
AssigneesClient.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Octokit
{
/// <summary>
/// A client for GitHub's Issue Assignees API.
/// </summary>
/// <remarks>
/// See the <a href="http://developer.github.com/v3/issues/assignees/">Issue Assignees API documentation</a> for more information.
/// </remarks>
public class AssigneesClient : ApiClient, IAssigneesClient
{
/// <summary>
/// Instantiates a new GitHub Issue Assignees API client.
/// </summary>
/// <param name="apiConnection">An API connection</param>
public AssigneesClient(IApiConnection apiConnection) : base(apiConnection)
{
}
/// <summary>
/// Gets all the available assignees (owner + collaborators) to which issues may be assigned.
/// </summary>
/// <param name="owner">The owner of the repository</param>
/// <param name="name">The name of the repository</param>
[ManualRoute("GET", "/repos/{owner}/{repo}/assignees")]
public Task<IReadOnlyList<User>> GetAllForRepository(string owner, string name)
{
Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner));
Ensure.ArgumentNotNullOrEmptyString(name, nameof(name));
return GetAllForRepository(owner, name, ApiOptions.None);
}
/// <summary>
/// Gets all the available assignees (owner + collaborators) to which issues may be assigned.
/// </summary>
/// <param name="repositoryId">The Id of the repository</param>
[ManualRoute("GET", "/repositories/{id}/assignees")]
public Task<IReadOnlyList<User>> GetAllForRepository(long repositoryId)
{
return GetAllForRepository(repositoryId, ApiOptions.None);
}
/// <summary>
/// Gets all the available assignees (owner + collaborators) to which issues may be assigned.
/// </summary>
/// <param name="owner">The owner of the repository</param>
/// <param name="name">The name of the repository</param>
/// <param name="options">The options to change API's response.</param>
[ManualRoute("GET", "/repos/{owner}/{repo}/assignees")]
public Task<IReadOnlyList<User>> GetAllForRepository(string owner, string name, ApiOptions options)
{
Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner));
Ensure.ArgumentNotNullOrEmptyString(name, nameof(name));
Ensure.ArgumentNotNull(options, nameof(options));
var endpoint = ApiUrls.Assignees(owner, name);
return ApiConnection.GetAll<User>(endpoint, null, options);
}
/// <summary>
/// Gets all the available assignees (owner + collaborators) to which issues may be assigned.
/// </summary>
/// <param name="repositoryId">The Id of the repository</param>
/// <param name="options">The options to change API's response.</param>
[ManualRoute("GET", "/repositories/{id}/assignees")]
public Task<IReadOnlyList<User>> GetAllForRepository(long repositoryId, ApiOptions options)
{
Ensure.ArgumentNotNull(options, nameof(options));
var endpoint = ApiUrls.Assignees(repositoryId);
return ApiConnection.GetAll<User>(endpoint, null, options);
}
/// <summary>
/// Checks to see if a user is an assignee for a repository.
/// </summary>
/// <param name="owner">The owner of the repository</param>
/// <param name="name">The name of the repository</param>
/// <param name="assignee">Username of the prospective assignee</param>
[ManualRoute("GET", "/repos/{owner}/{repo}/assignees/{username}")]
public async Task<bool> CheckAssignee(string owner, string name, string assignee)
{
Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner));
Ensure.ArgumentNotNullOrEmptyString(name, nameof(name));
Ensure.ArgumentNotNullOrEmptyString(assignee, nameof(assignee));
try
{
var response = await Connection.Get<object>(ApiUrls.CheckAssignee(owner, name, assignee), null, null).ConfigureAwait(false);
return response.HttpResponse.IsTrue();
}
catch (NotFoundException)
{
return false;
}
}
/// <summary>
/// Add assignees to a specified Issue.
/// </summary>
/// <param name="owner">The owner of the repository</param>
/// <param name="name">The name of the repository</param>
/// <param name="issueNumber">The issue number</param>
/// <param name="assignees">List of names of assignees to add</param>
/// <returns></returns>
[ManualRoute("POST", "/repos/{owner}/{repo}/issues/{issue_number}/assignees")]
public Task<Issue> AddAssignees(string owner, string name, int issueNumber, AssigneesUpdate assignees)
{
Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner));
Ensure.ArgumentNotNullOrEmptyString(name, nameof(name));
Ensure.ArgumentNotNull(assignees, nameof(assignees));
return ApiConnection.Post<Issue>(ApiUrls.IssueAssignees(owner, name, issueNumber), assignees);
}
/// <summary>
/// Remove assignees from a specified Issue.
/// </summary>
/// <param name="owner">The owner of the repository</param>
/// <param name="name">The name of the repository</param>
/// <param name="issueNumber">The issue number</param>
/// <param name="assignees">List of assignees to remove</param>
/// <returns></returns>
[ManualRoute("DELETE", "/repos/{owner}/{repo}/issues/{issue_number}/assignees")]
public Task<Issue> RemoveAssignees(string owner, string name, int issueNumber, AssigneesUpdate assignees)
{
Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner));
Ensure.ArgumentNotNullOrEmptyString(name, nameof(name));
Ensure.ArgumentNotNull(assignees, nameof(assignees));
return ApiConnection.Delete<Issue>(ApiUrls.IssueAssignees(owner, name, issueNumber), assignees);
}
/// <summary>
/// Checks to see if a user is an assignee for a repository.
/// </summary>
/// <param name="repositoryId">The Id of the repository</param>
/// <param name="assignee">Username of the prospective assignee</param>
[ManualRoute("GET", "/repositories/{id}/assignees/{username}")]
public async Task<bool> CheckAssignee(long repositoryId, string assignee)
{
Ensure.ArgumentNotNullOrEmptyString(assignee, nameof(assignee));
try
{
var response = await Connection.Get<object>(ApiUrls.CheckAssignee(repositoryId, assignee), null, null).ConfigureAwait(false);
return response.HttpResponse.IsTrue();
}
catch (NotFoundException)
{
return false;
}
}
}
}