Skip to content

Commit 0108612

Browse files
Merge pull request #1050 from TransactionProcessing/task/#1049_put+post_patch_delete_changes
refactor http methods and add unit tests
2 parents a4ab0de + 42d0265 commit 0108612

File tree

9 files changed

+1336
-7
lines changed

9 files changed

+1336
-7
lines changed

.github/workflows/pullrequest.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ jobs:
1919
- name: Install NET 9
2020
uses: actions/[email protected]
2121
with:
22-
dotnet-version: '9.0.x'
22+
dotnet-version: '9.0.306'
2323

2424
- name: Restore Nuget Packages
2525
run: dotnet restore Shared.sln --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }}
@@ -67,7 +67,7 @@ jobs:
6767
- name: Install NET 9
6868
uses: actions/[email protected]
6969
with:
70-
dotnet-version: '9.0.x'
70+
dotnet-version: '9.0.306'
7171

7272
- name: Build Windows SQL Server
7373
run: |

ClientProxyBase/AssemblyInfo.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
using System.Runtime.CompilerServices;
2+
3+
[assembly: InternalsVisibleTo("Shared.Tests")]

ClientProxyBase/ClientProxyBase.cs

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ namespace ClientProxyBase;
1616
using System.Threading;
1717
using System.Threading.Tasks;
1818

19-
public abstract class ClientProxyBase {
19+
public abstract partial class ClientProxyBase {
2020
#region Fields
2121

2222
/// <summary>
@@ -106,6 +106,7 @@ protected virtual ResponseData<T> HandleResponseContent<T>(String content)
106106
return JsonConvert.DeserializeObject<ResponseData<T>>(content);
107107
}
108108

109+
/*
109110
protected virtual async Task<Result<TResponse>> SendGetRequest<TResponse>(String uri,
110111
String accessToken,
111112
CancellationToken cancellationToken) =>
@@ -151,9 +152,9 @@ protected virtual async Task<Result<TResponse>> SendGetRequest<TResponse>(String
151152
return Result.Success<TResponse>(responseData);
152153
}
153154
154-
protected virtual async Task<Result<TResponse>> SendPostRequest<TRequest, TResponse>(String uri, String accessToken, TRequest content, CancellationToken cancellationToken) => await this.SendPostRequest<TRequest, TResponse>(uri, accessToken, content, cancellationToken, null);
155+
protected virtual async Task<Result<TResponse>> SendPostRequest<TRequest, TResponse>(String uri, String accessToken, TRequest content, CancellationToken cancellationToken) => await this.SendPostRequest<TRequest, TResponse>(uri, accessToken, content, null, cancellationToken);
155156
156-
protected virtual async Task<Result<TResponse>> SendPostRequest<TRequest, TResponse>(String uri, String accessToken, TRequest content, CancellationToken cancellationToken, List<(String header, String value)> additionalHeaders)
157+
protected virtual async Task<Result<TResponse>> SendPostRequest<TRequest, TResponse>(String uri, String accessToken, TRequest content, List<(String header, String value)> additionalHeaders, CancellationToken cancellationToken)
157158
{
158159
159160
HttpRequestMessage requestMessage = new(HttpMethod.Post, uri);
@@ -184,6 +185,30 @@ protected virtual async Task<Result<TResponse>> SendPostRequest<TRequest, TRespo
184185
return Result.Success<TResponse>(responseData);
185186
}
186187
188+
protected virtual async Task<Result> SendPostRequest<TResponse>(string uri,
189+
string accessToken,
190+
List<(string header, string value)> additionalHeaders,
191+
CancellationToken cancellationToken) {
192+
Result result = await this.SendPostRequest<Object>(uri, accessToken, additionalHeaders, cancellationToken);
193+
if (result.IsFailed)
194+
return ResultHelpers.CreateFailure(result);
195+
return Result.Success();
196+
}
197+
198+
protected virtual async Task<Result> SendPostRequest<TResponse>(string uri,
199+
string accessToken,
200+
CancellationToken cancellationToken) => await this.SendPostRequest<TResponse>(uri, accessToken, null, cancellationToken);
201+
202+
//protected virtual async Task<Result> SendPostRequest(string uri,
203+
// string accessToken = null,
204+
// List<(string header, string value)> additionalHeaders = null)
205+
//{
206+
// Result<String> result = await SendPostRequest<object, string>(uri, accessToken, null, cancellationToken, additionalHeaders);
207+
// if (result.IsFailed)
208+
// return ResultHelpers.CreateFailure(result);
209+
// return Result.Success();
210+
//}
211+
187212
protected virtual async Task<Result<TResponse>> SendPutRequest<TRequest, TResponse>(String uri, String accessToken, TRequest content, CancellationToken cancellationToken) =>
188213
await this.SendPutRequest<TRequest, TResponse>(uri, accessToken, content, cancellationToken, null);
189214
@@ -278,7 +303,7 @@ protected virtual async Task<Result<TResponse>> SendDeleteRequest<TResponse>(Str
278303
TResponse responseData = JsonConvert.DeserializeObject<TResponse>(result.Data);
279304
280305
return Result.Success<TResponse>(responseData);
281-
}
306+
}*/
282307

283308
static void AddAdditionalHeaders(HttpRequestMessage requestMessage,
284309
List<(String header, String value)> additionalHeaders) {
@@ -289,7 +314,6 @@ static void AddAdditionalHeaders(HttpRequestMessage requestMessage,
289314
}
290315
}
291316

292-
293317
#endregion
294318
}
295319

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Net.Http;
5+
using System.Net.Http.Headers;
6+
using System.Text;
7+
using System.Threading;
8+
using System.Threading.Tasks;
9+
using Newtonsoft.Json;
10+
using Shared.Results;
11+
using SimpleResults;
12+
13+
namespace ClientProxyBase
14+
{
15+
public abstract partial class ClientProxyBase
16+
{
17+
internal virtual async Task<Result> SendHttpDeleteRequest(String uri,
18+
String accessToken,
19+
List<(String header, String value)> additionalHeaders,
20+
CancellationToken cancellationToken)
21+
{
22+
HttpRequestMessage requestMessage = new(HttpMethod.Delete, uri);
23+
if (String.IsNullOrEmpty(accessToken) == false)
24+
requestMessage.Headers.Authorization = new AuthenticationHeaderValue(AuthenticationSchemes.Bearer, accessToken);
25+
26+
AddAdditionalHeaders(requestMessage, additionalHeaders);
27+
28+
// Make the Http Call here
29+
HttpResponseMessage httpResponse = await this.HttpClient.SendAsync(requestMessage, cancellationToken);
30+
31+
// Process the response
32+
Result<String> result = await this.HandleResponseX(httpResponse, cancellationToken);
33+
34+
if (result.IsFailed)
35+
return ResultHelpers.CreateFailure(result);
36+
37+
return Result.Success();
38+
}
39+
40+
internal virtual async Task<Result> SendHttpDeleteRequest(String uri,
41+
String accessToken,
42+
CancellationToken cancellationToken) =>
43+
await this.SendHttpDeleteRequest(uri, accessToken,null, cancellationToken);
44+
45+
internal virtual async Task<Result> SendHttpDeleteRequest(String uri,
46+
List<(String header, String value)> additionalHeaders,
47+
CancellationToken cancellationToken) =>
48+
await this.SendHttpDeleteRequest(uri, null, additionalHeaders, cancellationToken);
49+
50+
internal virtual async Task<Result> SendHttpDeleteRequest(String uri,
51+
CancellationToken cancellationToken) =>
52+
await this.SendHttpDeleteRequest(uri, null, null, cancellationToken);
53+
}
54+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
using Newtonsoft.Json;
2+
using Shared.Results;
3+
using SimpleResults;
4+
using System;
5+
using System.Collections.Generic;
6+
using System.Linq;
7+
using System.Net.Http;
8+
using System.Net.Http.Headers;
9+
using System.Text;
10+
using System.Threading;
11+
using System.Threading.Tasks;
12+
13+
namespace ClientProxyBase
14+
{
15+
public abstract partial class ClientProxyBase
16+
{
17+
internal virtual async Task<Result<TResponse>> SendHttpGetRequest<TResponse>(String uri,
18+
String accessToken,
19+
List<(String header, String value)> additionalHeaders,
20+
CancellationToken cancellationToken)
21+
{
22+
HttpRequestMessage requestMessage = new(HttpMethod.Get, uri);
23+
if (String.IsNullOrEmpty(accessToken) == false)
24+
requestMessage.Headers.Authorization = new AuthenticationHeaderValue(AuthenticationSchemes.Bearer, accessToken);
25+
26+
AddAdditionalHeaders(requestMessage, additionalHeaders);
27+
28+
// Make the Http Call here
29+
HttpResponseMessage httpResponse = await this.HttpClient.SendAsync(requestMessage, cancellationToken);
30+
31+
// Process the response
32+
Result<String> result = await this.HandleResponseX(httpResponse, cancellationToken);
33+
34+
if (result.IsFailed)
35+
return ResultHelpers.CreateFailure(result);
36+
37+
TResponse responseData = JsonConvert.DeserializeObject<TResponse>(result.Data);
38+
39+
return Result.Success(responseData);
40+
}
41+
42+
internal virtual async Task<Result<TResponse>> SendHttpGetRequest<TResponse>(String uri,
43+
String accessToken,
44+
CancellationToken cancellationToken) =>
45+
await this.SendHttpGetRequest<TResponse>(uri, accessToken, null, cancellationToken);
46+
47+
internal virtual async Task<Result<TResponse>> SendHttpGetRequest<TResponse>(String uri,
48+
List<(String header, String value)> additionalHeaders,
49+
CancellationToken cancellationToken) =>
50+
await this.SendHttpGetRequest<TResponse>(uri, null, additionalHeaders, cancellationToken);
51+
52+
internal virtual async Task<Result<TResponse>> SendHttpGetRequest<TResponse>(String uri,
53+
CancellationToken cancellationToken) =>
54+
await this.SendHttpGetRequest<TResponse>(uri, null, null, cancellationToken);
55+
}
56+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
using Newtonsoft.Json;
2+
using Shared.Results;
3+
using SimpleResults;
4+
using System;
5+
using System.Collections.Generic;
6+
using System.Linq;
7+
using System.Net.Http;
8+
using System.Net.Http.Headers;
9+
using System.Text;
10+
using System.Threading;
11+
using System.Threading.Tasks;
12+
13+
namespace ClientProxyBase
14+
{
15+
public abstract partial class ClientProxyBase
16+
{
17+
internal virtual async Task<Result<TRequest>> SendHttpPatchRequest<TRequest>(String uri,
18+
TRequest request,
19+
String accessToken,
20+
List<(String header, String value)> additionalHeaders,
21+
CancellationToken cancellationToken)
22+
{
23+
HttpRequestMessage requestMessage = new(HttpMethod.Patch, uri);
24+
if (String.IsNullOrEmpty(accessToken) == false)
25+
requestMessage.Headers.Authorization = new AuthenticationHeaderValue(AuthenticationSchemes.Bearer, accessToken);
26+
27+
AddAdditionalHeaders(requestMessage, additionalHeaders);
28+
29+
if (request.GetType() == typeof(FormUrlEncodedContent))
30+
{
31+
// Treat this specially
32+
requestMessage.Content = request as FormUrlEncodedContent;
33+
}
34+
else
35+
{
36+
requestMessage.Content = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json");
37+
}
38+
39+
// Make the Http Call here
40+
HttpResponseMessage httpResponse = await this.HttpClient.SendAsync(requestMessage, cancellationToken);
41+
42+
// Process the response
43+
Result<String> result = await this.HandleResponseX(httpResponse, cancellationToken);
44+
45+
if (result.IsFailed)
46+
return ResultHelpers.CreateFailure(result);
47+
48+
return Result.Success();
49+
}
50+
51+
internal virtual async Task<Result<TRequest>> SendHttpPatchRequest<TRequest>(String uri,
52+
TRequest request,
53+
String accessToken,
54+
CancellationToken cancellationToken) =>
55+
await this.SendHttpPatchRequest(uri, request, accessToken, null, cancellationToken);
56+
57+
internal virtual async Task<Result<TRequest>> SendHttpPatchRequest<TRequest>(String uri,
58+
TRequest request,
59+
List<(String header, String value)> additionalHeaders,
60+
CancellationToken cancellationToken) =>
61+
await this.SendHttpPatchRequest(uri, request, null, additionalHeaders, cancellationToken);
62+
63+
internal virtual async Task<Result<TRequest>> SendHttpPatchRequest<TRequest>(String uri,
64+
TRequest request,
65+
CancellationToken cancellationToken) =>
66+
await this.SendHttpPatchRequest(uri, request, null, null, cancellationToken);
67+
68+
}
69+
}

0 commit comments

Comments
 (0)