Skip to content

Commit e3c4c1c

Browse files
committed
Cleanup http handler.
1 parent 3582c6f commit e3c4c1c

File tree

8 files changed

+57
-46
lines changed

8 files changed

+57
-46
lines changed

src/ZeroQL.Runtime/GraphQLClient.cs

Lines changed: 11 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ namespace ZeroQL;
1212

1313
public interface IGraphQLClient
1414
{
15-
HttpHandler HttpClient { get; }
15+
IHttpHandler HttpHandler { get; }
1616

1717
IGraphQLQueryPipeline QueryPipeline { get; }
1818

@@ -23,48 +23,23 @@ Task<GraphQLResult<TResult>> Execute<TVariables, TOperationType, TResult>(
2323
CancellationToken cancellationToken = default);
2424
}
2525

26-
public interface HttpHandler : IDisposable
27-
{
28-
public Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken);
29-
}
30-
31-
public class HttpClientHandler : HttpHandler
32-
{
33-
private HttpClient _client;
34-
35-
public HttpClientHandler(HttpClient client)
36-
{
37-
_client = client;
38-
}
39-
40-
public void Dispose()
41-
{
42-
_client.Dispose();
43-
}
44-
45-
public Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
46-
{
47-
return _client.SendAsync(request, cancellationToken);
48-
}
49-
}
50-
5126
public class ClientOperations
5227
{
5328
public ClientOperations(
5429
Dictionary<string, QueryInfo>? queries,
5530
Dictionary<string, QueryInfo>? mutations)
5631
{
57-
this.Queries = queries;
58-
this.Mutations = mutations;
32+
Queries = queries;
33+
Mutations = mutations;
5934
}
6035

6136
public Dictionary<string, QueryInfo>? Queries { get; }
6237
public Dictionary<string, QueryInfo>? Mutations { get; }
6338

6439
public void Deconstruct(out Dictionary<string, QueryInfo>? queries, out Dictionary<string, QueryInfo>? mutations)
6540
{
66-
queries = this.Queries;
67-
mutations = this.Mutations;
41+
queries = Queries;
42+
mutations = Mutations;
6843
}
6944
}
7045

@@ -77,17 +52,17 @@ public static ClientOperations GetBakedOperations()
7752

7853
public GraphQLClient(HttpClient httpClient, IGraphQLQueryPipeline? queryPipeline = null)
7954
{
80-
HttpClient = new HttpClientHandler(httpClient);
55+
HttpHandler = new HttpHandler(httpClient);
8156
QueryPipeline = queryPipeline ?? new FullQueryPipeline();
8257
}
83-
84-
public GraphQLClient(HttpHandler httpClient, IGraphQLQueryPipeline? queryPipeline = null)
58+
59+
public GraphQLClient(IHttpHandler httpClient, IGraphQLQueryPipeline? queryPipeline = null)
8560
{
86-
HttpClient = httpClient;
61+
HttpHandler = httpClient;
8762
QueryPipeline = queryPipeline ?? new FullQueryPipeline();
8863
}
8964

90-
public HttpHandler HttpClient { get; }
65+
public IHttpHandler HttpHandler { get; }
9166

9267
public IGraphQLQueryPipeline QueryPipeline { get; }
9368

@@ -122,6 +97,6 @@ public async Task<GraphQLResult<TResult>> Execute<TVariables, TOperationType, TR
12297

12398
public void Dispose()
12499
{
125-
HttpClient.Dispose();
100+
HttpHandler.Dispose();
126101
}
127102
}

src/ZeroQL.Runtime/HttpHandler.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
using System;
2+
using System.Net.Http;
3+
using System.Threading;
4+
using System.Threading.Tasks;
5+
6+
namespace ZeroQL;
7+
8+
public interface IHttpHandler : IDisposable
9+
{
10+
public Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken);
11+
}
12+
13+
public class HttpHandler : IHttpHandler
14+
{
15+
private readonly HttpClient client;
16+
private readonly bool disposeClient;
17+
18+
public HttpHandler(HttpClient client, bool disposeClient = false)
19+
{
20+
this.client = client;
21+
this.disposeClient = disposeClient;
22+
}
23+
24+
public void Dispose()
25+
{
26+
if (disposeClient)
27+
{
28+
client.Dispose();
29+
}
30+
}
31+
32+
public Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
33+
{
34+
return client.SendAsync(request, cancellationToken);
35+
}
36+
}

src/ZeroQL.Runtime/Pipelines/FullQueryPipeline.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ namespace ZeroQL.Pipelines;
1111

1212
public class FullQueryPipeline : IGraphQLQueryPipeline
1313
{
14-
public async Task<GraphQLResponse<TQuery>> ExecuteAsync<TQuery>(HttpHandler httpClient, string queryKey,
14+
public async Task<GraphQLResponse<TQuery>> ExecuteAsync<TQuery>(IHttpHandler httpHandler, string queryKey,
1515
object? variables, CancellationToken cancellationToken, Func<GraphQLRequest, HttpContent> contentCreator)
1616
{
1717
var queryInfo = GraphQLQueryStore<TQuery>.Query[queryKey];
@@ -25,7 +25,7 @@ public async Task<GraphQLResponse<TQuery>> ExecuteAsync<TQuery>(HttpHandler http
2525
var content = contentCreator(qlRequest);
2626
var request = new HttpRequestMessage(HttpMethod.Post, new Uri("", UriKind.Relative));
2727
request.Content = content;
28-
var response = await httpClient.SendAsync(request, cancellationToken);
28+
var response = await httpHandler.SendAsync(request, cancellationToken);
2929
#if DEBUG && !NETSTANDARD
3030
var responseJson = await response.Content.ReadAsStringAsync(cancellationToken);
3131
var qlResponse =

src/ZeroQL.Runtime/Pipelines/IGraphQLQueryPipeline.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ namespace ZeroQL.Pipelines;
88

99
public interface IGraphQLQueryPipeline
1010
{
11-
Task<GraphQLResponse<TQuery>> ExecuteAsync<TQuery>(HttpHandler httpClient, string queryKey, object? variables, CancellationToken cancellationToken, Func<GraphQLRequest, HttpContent> contentCreator);
11+
Task<GraphQLResponse<TQuery>> ExecuteAsync<TQuery>(IHttpHandler httpHandler, string queryKey, object? variables, CancellationToken cancellationToken, Func<GraphQLRequest, HttpContent> contentCreator);
1212
}

src/ZeroQL.Runtime/Pipelines/PersistedQueryPipeline.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public PersistedQueryPipeline(bool tryToAddPersistedQueryOnFail = true)
1919

2020
public bool TryToAddPersistedQueryOnFail { get; }
2121

22-
public async Task<GraphQLResponse<TQuery>> ExecuteAsync<TQuery>(HttpHandler httpClient, string queryKey, object? variables, CancellationToken cancellationToken, Func<GraphQLRequest, HttpContent> contentCreator)
22+
public async Task<GraphQLResponse<TQuery>> ExecuteAsync<TQuery>(IHttpHandler httpHandler, string queryKey, object? variables, CancellationToken cancellationToken, Func<GraphQLRequest, HttpContent> contentCreator)
2323
{
2424
var queryInfo = GraphQLQueryStore<TQuery>.Query[queryKey];
2525
var qlRequest = new GraphQLRequest
@@ -38,7 +38,7 @@ public async Task<GraphQLResponse<TQuery>> ExecuteAsync<TQuery>(HttpHandler http
3838
var content = contentCreator(qlRequest);
3939
var request = new HttpRequestMessage(HttpMethod.Post, new Uri("", UriKind.Relative));
4040
request.Content = content;
41-
var response = await httpClient.SendAsync(request, cancellationToken);
41+
var response = await httpHandler.SendAsync(request, cancellationToken);
4242
var qlResponse = await ReadResponse<TQuery>(response);
4343

4444
if (qlResponse.Errors is null)
@@ -60,7 +60,7 @@ public async Task<GraphQLResponse<TQuery>> ExecuteAsync<TQuery>(HttpHandler http
6060
content = contentCreator(qlRequest);
6161
request = new HttpRequestMessage(HttpMethod.Post, new Uri("", UriKind.Relative));
6262
request.Content = content;
63-
response = await httpClient.SendAsync(request, cancellationToken);
63+
response = await httpHandler.SendAsync(request, cancellationToken);
6464
qlResponse = await ReadResponse<TQuery>(response);
6565

6666
return qlResponse with { Query = FormatPersistedQuery(queryInfo) };

src/ZeroQL.SourceGenerators/Resolver/GraphQLSourceResolver.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public static void Init()
5151
{{
5252
var qlClient = context.Client;
5353
var variables = ({context.RequestExecutorInputSymbol.ToGlobalName()})context.Variables!;
54-
var qlResponse = await qlClient.QueryPipeline.ExecuteAsync<{context.QueryTypeName}>(qlClient.HttpClient, context.QueryKey, context.Variables, context.CancellationToken, queryRequest =>
54+
var qlResponse = await qlClient.QueryPipeline.ExecuteAsync<{context.QueryTypeName}>(qlClient.HttpHandler, context.QueryKey, context.Variables, context.CancellationToken, queryRequest =>
5555
{{
5656
{GraphQLUploadResolver.GenerateRequestPreparations(inputTypeName, context.ExecutionStrategy, typeInfo)}
5757
return content;

src/ZeroQL.Tests/SourceGeneration/FileUploadTests.UploadFileGenerates.verified.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ namespace ZeroQL.TestApp
3737
{
3838
var qlClient = context.Client;
3939
var variables = (object?)context.Variables!;
40-
var qlResponse = await qlClient.QueryPipeline.ExecuteAsync<global::GraphQL.TestServer.Mutation>(qlClient.HttpClient, context.QueryKey, context.Variables, context.CancellationToken, queryRequest =>
40+
var qlResponse = await qlClient.QueryPipeline.ExecuteAsync<global::GraphQL.TestServer.Mutation>(qlClient.HttpHandler, context.QueryKey, context.Variables, context.CancellationToken, queryRequest =>
4141
{
4242

4343
var context = new MultipartFormDataContentContext();

src/ZeroQL.Tests/SourceGeneration/QueryTests.LambdaModuleInitializerGenerated.verified.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
[
1+
[
22
// This file generated for ZeroQL.
33
// <auto-generated/>
44
using System;
@@ -37,7 +37,7 @@ namespace ZeroQL.TestApp
3737
{
3838
var qlClient = context.Client;
3939
var variables = (global::System.Collections.Generic.Dictionary<string, object>)context.Variables!;
40-
var qlResponse = await qlClient.QueryPipeline.ExecuteAsync<global::GraphQL.TestServer.Query>(qlClient.HttpClient, context.QueryKey, context.Variables, context.CancellationToken, queryRequest =>
40+
var qlResponse = await qlClient.QueryPipeline.ExecuteAsync<global::GraphQL.TestServer.Query>(qlClient.HttpHandler, context.QueryKey, context.Variables, context.CancellationToken, queryRequest =>
4141
{
4242

4343
var requestJson = JsonSerializer.Serialize(queryRequest, ZeroQLJsonOptions.Options);

0 commit comments

Comments
 (0)