Skip to content

Commit 15d4adf

Browse files
saber-wangjetersen
andauthored
Add API for get single merge request, create note on merge request, get pipelines for merge request, delete for webhooks (#137)
Co-Authored-By: Joseph Petersen <josephp90@gmail.com>
1 parent 33a698b commit 15d4adf

File tree

7 files changed

+116
-6
lines changed

7 files changed

+116
-6
lines changed

src/GitLabApiClient/IMergeRequestsClient.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using GitLabApiClient.Models.MergeRequests.Responses;
99
using GitLabApiClient.Models.Notes.Requests;
1010
using GitLabApiClient.Models.Notes.Responses;
11+
using GitLabApiClient.Models.Pipelines.Responses;
1112
using GitLabApiClient.Models.Projects.Responses;
1213

1314
namespace GitLabApiClient
@@ -31,6 +32,14 @@ public interface IMergeRequestsClient
3132
/// <returns>Merge requests satisfying options.</returns>
3233
Task<IList<MergeRequest>> GetAsync(Action<MergeRequestsQueryOptions> options = null);
3334

35+
/// <summary>
36+
/// Get single Merge requests by id
37+
/// </summary>
38+
/// <param name="projectId">The ID, path or <see cref="Project"/> of the project.</param>
39+
/// <param name="mergeRequestId">The Internal Merge Request Id.</param>
40+
/// <returns>Shows information about a single merge request.</returns>
41+
Task<MergeRequest> GetAsync(ProjectId projectId, int mergeRequestId);
42+
3443
/// <summary>
3544
/// Creates merge request.
3645
/// </summary>
@@ -64,6 +73,14 @@ public interface IMergeRequestsClient
6473
/// <param name="mergeRequestId">The Internal Merge Request Id.</param>
6574
Task DeleteAsync(ProjectId projectId, int mergeRequestId);
6675

76+
/// <summary>
77+
/// Creates a new note (comment) to a single Merge Request.
78+
/// </summary>
79+
/// <returns>The newly created issue note.</returns>
80+
/// <param name="projectId">The ID, path or <see cref="Project"/> of the project.</param>
81+
/// <param name="mergeRequestId">The IID of an Merge Request.</param>
82+
/// <param name="request">Create Merge Request note request.</param>
83+
Task<Note> CreateNoteAsync(ProjectId projectId, int mergeRequestId, CreateMergeRequestNoteRequest request);
6784

6885
/// <summary>
6986
/// Retrieves notes (comments) of a merge request.
@@ -74,6 +91,14 @@ public interface IMergeRequestsClient
7491
/// <returns>Merge requests satisfying options.</returns>
7592
Task<IList<Note>> GetNotesAsync(ProjectId projectId, int mergeRequestIid, Action<MergeRequestNotesQueryOptions> options = null);
7693

94+
/// <summary>
95+
/// List erge request pipelines
96+
/// </summary>
97+
/// <param name="projectId">The ID, path or <see cref="Project"/> of the project.</param>
98+
/// <param name="mergeRequestId">The Internal Merge Request Id.</param>
99+
/// <returns>Get a list of merge request pipelines.</returns>
100+
Task<IList<Pipeline>> GetPipelinesAsync(ProjectId projectId, int mergeRequestId);
101+
77102
/// <summary>
78103
/// Retrieves discussions of a merge request.
79104
/// </summary>

src/GitLabApiClient/IWebhookClient.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public interface IWebhookClient
1717
/// <param name="projectId">The ID, path or <see cref="Project"/> of the project.</param>
1818
/// <param name="hookId">The hook ID, you want to retrieve.</param>
1919
/// <returns></returns>
20-
Task<Webhook> GetAsync(ProjectId projectId, int hookId);
20+
Task<Webhook> GetAsync(ProjectId projectId, long hookId);
2121

2222
/// <summary>
2323
/// Retrieves all project hooks
@@ -39,6 +39,15 @@ public interface IWebhookClient
3939
/// </summary>
4040
/// <param name="projectId">The ID, path or <see cref="Project"/> of the project.</param>
4141
/// <param name="hookId">The hook ID, you want to delete.</param>
42-
Task DeleteAsync(ProjectId projectId, int hookId);
42+
Task DeleteAsync(ProjectId projectId, long hookId);
43+
44+
/// <summary>
45+
/// Update new webhook
46+
/// </summary>
47+
/// <param name="projectId">The ID, path or <see cref="Project"/> of the project.</param>
48+
/// <param name="hookId">The hook ID, you want to update.</param>
49+
/// <param name="request">Create hook request.</param>
50+
/// <returns>newly created hook</returns>
51+
Task<Webhook> UpdateAsync(ProjectId projectId, long hookId, CreateWebhookRequest request);
4352
}
4453
}

src/GitLabApiClient/MergeRequestsClient.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
using GitLabApiClient.Models.MergeRequests.Responses;
1212
using GitLabApiClient.Models.Notes.Requests;
1313
using GitLabApiClient.Models.Notes.Responses;
14+
using GitLabApiClient.Models.Pipelines.Responses;
1415
using GitLabApiClient.Models.Projects.Responses;
1516

1617
namespace GitLabApiClient
@@ -75,6 +76,14 @@ public async Task<IList<MergeRequest>> GetAsync(Action<MergeRequestsQueryOptions
7576
return await _httpFacade.GetPagedList<MergeRequest>(query);
7677
}
7778

79+
/// <summary>
80+
/// Get single Merge requests by id
81+
/// </summary>
82+
/// <param name="projectId">The ID, path or <see cref="Project"/> of the project.</param>
83+
/// <param name="mergeRequestId">The Internal Merge Request Id.</param>
84+
/// <returns>Shows information about a single merge request.</returns>
85+
public async Task<MergeRequest> GetAsync(ProjectId projectId, int mergeRequestId)
86+
=> await _httpFacade.Get<MergeRequest>($"projects/{projectId}/merge_requests/{mergeRequestId}");
7887
/// <summary>
7988
/// Creates merge request.
8089
/// </summary>
@@ -115,6 +124,16 @@ public async Task<MergeRequest> AcceptAsync(ProjectId projectId, int mergeReques
115124
public async Task DeleteAsync(ProjectId projectId, int mergeRequestId) =>
116125
await _httpFacade.Delete($"projects/{projectId}/merge_requests/{mergeRequestId}");
117126

127+
/// <summary>
128+
/// Creates a new note (comment) to a single Merge Request.
129+
/// </summary>
130+
/// <returns>The newly created issue note.</returns>
131+
/// <param name="projectId">The ID, path or <see cref="Project"/> of the project.</param>
132+
/// <param name="mergeRequestId">The IID of an Merge Request.</param>
133+
/// <param name="request">Create Merge Request note request.</param>
134+
public async Task<Note> CreateNoteAsync(ProjectId projectId, int mergeRequestId, CreateMergeRequestNoteRequest request) =>
135+
await _httpFacade.Post<Note>($"projects/{projectId}/merge_requests/{mergeRequestId}/notes", request);
136+
118137
/// <summary>
119138
/// Retrieves notes (comments) of a merge request.
120139
/// </summary>
@@ -131,6 +150,15 @@ public async Task<IList<Note>> GetNotesAsync(ProjectId projectId, int mergeReque
131150
return await _httpFacade.GetPagedList<Note>(url);
132151
}
133152

153+
/// <summary>
154+
/// List erge request pipelines
155+
/// </summary>
156+
/// <param name="projectId">The ID, path or <see cref="Project"/> of the project.</param>
157+
/// <param name="mergeRequestId">The Internal Merge Request Id.</param>
158+
/// <returns>Get a list of merge request pipelines.</returns>
159+
public async Task<IList<Pipeline>> GetPipelinesAsync(ProjectId projectId, int mergeRequestId)
160+
=> await _httpFacade.Get<List<Pipeline>>($"projects/{projectId}/merge_requests/{mergeRequestId}/pipelines");
161+
134162
/// <summary>
135163
/// Retrieves discussions of a merge request.
136164
/// </summary>

src/GitLabApiClient/Models/MergeRequests/Responses/MergeRequest.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using GitLabApiClient.Models.Issues.Responses;
44
using GitLabApiClient.Models.Milestones.Responses;
5+
using GitLabApiClient.Models.Pipelines.Responses;
56
using Newtonsoft.Json;
67

78
namespace GitLabApiClient.Models.MergeRequests.Responses
@@ -85,5 +86,8 @@ public sealed class MergeRequest : ModifiableObject
8586

8687
[JsonProperty("time_stats")]
8788
public MergeRequestTimeStatistic TimeStats { get; set; }
89+
90+
[JsonProperty("pipeline")]
91+
public Pipeline Pipeline { get; set; }
8892
}
8993
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using System;
2+
using GitLabApiClient.Internal.Utilities;
3+
using Newtonsoft.Json;
4+
5+
namespace GitLabApiClient.Models.Notes.Requests
6+
{
7+
/// <summary>
8+
/// Used to create issue notes in a project.
9+
/// </summary>
10+
public sealed class CreateMergeRequestNoteRequest
11+
{
12+
/// <summary>
13+
/// Initializes a new instance of the <see cref="CreateMergeRequestNoteRequest "/> class.
14+
/// </summary>
15+
/// <param name="body">The content of a note.</param>
16+
public CreateMergeRequestNoteRequest(string body) => Body = body;
17+
18+
public CreateMergeRequestNoteRequest()
19+
{
20+
}
21+
22+
/// <summary>
23+
/// The content of a note.
24+
/// </summary>
25+
[JsonProperty("body")]
26+
public string Body { get; set; }
27+
28+
/// <summary>
29+
/// Date time string, ISO 8601 formatted, e.g. 2016-03-11T03:45:40Z (requires admin or project/group owner rights)
30+
/// </summary>
31+
[JsonProperty("created_at")]
32+
public DateTime? CreatedAt { get; set; }
33+
}
34+
}

src/GitLabApiClient/Models/Pipelines/Responses/Pipeline.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ public class Pipeline
2121
public Uri WebUrl { get; set; }
2222

2323
[JsonProperty("created_at")]
24-
public DateTime CreatedAt { get; set; }
24+
public DateTime? CreatedAt { get; set; }
2525

2626
[JsonProperty("updated_at")]
27-
public DateTime UpdatedAt { get; set; }
27+
public DateTime? UpdatedAt { get; set; }
2828
}
2929
}

src/GitLabApiClient/WebhookClient.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ internal WebhookClient(
2525
/// <param name="projectId">The ID, path or <see cref="Project"/> of the project.</param>
2626
/// <param name="hookId">The hook ID, you want to retrieve.</param>
2727
/// <returns></returns>
28-
public async Task<Webhook> GetAsync(ProjectId projectId, int hookId) =>
28+
public async Task<Webhook> GetAsync(ProjectId projectId, long hookId) =>
2929
await _httpFacade.Get<Webhook>($"projects/{projectId}/hooks/{hookId}");
3030

3131
/// <summary>
@@ -52,8 +52,18 @@ public async Task<Webhook> CreateAsync(ProjectId projectId, CreateWebhookRequest
5252
/// </summary>
5353
/// <param name="projectId">The ID, path or <see cref="Project"/> of the project.</param>
5454
/// <param name="hookId">The hook ID, you want to delete.</param>
55-
public async Task DeleteAsync(ProjectId projectId, int hookId) =>
55+
public async Task DeleteAsync(ProjectId projectId, long hookId) =>
5656
await _httpFacade.Delete($"projects/{projectId}/hooks/{hookId}");
57+
58+
/// <summary>
59+
/// Update new webhook
60+
/// </summary>
61+
/// <param name="projectId">The ID, path or <see cref="Project"/> of the project.</param>
62+
/// <param name="hookId">The hook ID, you want to update.</param>
63+
/// <param name="request">Create hook request.</param>
64+
/// <returns>newly created hook</returns>
65+
public async Task<Webhook> UpdateAsync(ProjectId projectId, long hookId, CreateWebhookRequest request) =>
66+
await _httpFacade.Put<Webhook>($"projects/{projectId}/hooks/{hookId}", request);
5767
}
5868

5969

0 commit comments

Comments
 (0)