From cfbc12c67ff7d70111b871e0da2e52dce9e8fcbb Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 13 Sep 2020 13:24:50 -0500 Subject: [PATCH] =?UTF-8?q?feat(directory):=20=E2=9C=A8=F0=9F=9A=A7=20add?= =?UTF-8?q?=20IDirectoryClient?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...FilterLists.Archival.Infrastructure.csproj | 4 --- .../BaseApiClient.cs | 25 +++++++++++++++++ .../ConfigurationExtensions.cs | 6 ++--- .../Directory/DirectoryApiApiClient.cs | 27 +++++++++++++++++++ .../Directory/IDirectoryApiClient.cs | 13 +++++++++ ...lterLists.SharedKernel.Apis.Clients.csproj | 4 +-- 6 files changed, 70 insertions(+), 9 deletions(-) create mode 100644 services/SharedKernel/FilterLists.SharedKernel.Apis.Clients/BaseApiClient.cs create mode 100644 services/SharedKernel/FilterLists.SharedKernel.Apis.Clients/Directory/DirectoryApiApiClient.cs create mode 100644 services/SharedKernel/FilterLists.SharedKernel.Apis.Clients/Directory/IDirectoryApiClient.cs diff --git a/services/Archival/FilterLists.Archival.Infrastructure/FilterLists.Archival.Infrastructure.csproj b/services/Archival/FilterLists.Archival.Infrastructure/FilterLists.Archival.Infrastructure.csproj index f7e211158..817b1e2c7 100644 --- a/services/Archival/FilterLists.Archival.Infrastructure/FilterLists.Archival.Infrastructure.csproj +++ b/services/Archival/FilterLists.Archival.Infrastructure/FilterLists.Archival.Infrastructure.csproj @@ -28,14 +28,10 @@ - all runtime; build; native; contentfiles; analyzers; buildtransitive - - - diff --git a/services/SharedKernel/FilterLists.SharedKernel.Apis.Clients/BaseApiClient.cs b/services/SharedKernel/FilterLists.SharedKernel.Apis.Clients/BaseApiClient.cs new file mode 100644 index 000000000..742972c39 --- /dev/null +++ b/services/SharedKernel/FilterLists.SharedKernel.Apis.Clients/BaseApiClient.cs @@ -0,0 +1,25 @@ +using System.Net.Http; +using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; + +namespace FilterLists.SharedKernel.Apis.Clients +{ + internal abstract class BaseApiClient + { + protected BaseApiClient(HttpClient httpClient) + { + Client = httpClient; + } + + protected HttpClient Client { get; } + + protected async Task GetAsync(string requestUri, CancellationToken cancellationToken = default) + { + var response = await Client.GetAsync(requestUri, cancellationToken); + response.EnsureSuccessStatusCode(); + await using var responseStream = await response.Content.ReadAsStreamAsync(); + return await JsonSerializer.DeserializeAsync(responseStream, cancellationToken: cancellationToken); + } + } +} \ No newline at end of file diff --git a/services/SharedKernel/FilterLists.SharedKernel.Apis.Clients/ConfigurationExtensions.cs b/services/SharedKernel/FilterLists.SharedKernel.Apis.Clients/ConfigurationExtensions.cs index d9a570253..809a47ad7 100644 --- a/services/SharedKernel/FilterLists.SharedKernel.Apis.Clients/ConfigurationExtensions.cs +++ b/services/SharedKernel/FilterLists.SharedKernel.Apis.Clients/ConfigurationExtensions.cs @@ -1,5 +1,5 @@ -using Microsoft.Extensions.DependencyInjection; -using RestSharp; +using FilterLists.SharedKernel.Apis.Clients.Directory; +using Microsoft.Extensions.DependencyInjection; namespace FilterLists.SharedKernel.Apis.Clients { @@ -7,7 +7,7 @@ public static class ConfigurationExtensions { public static void AddApiClients(this IServiceCollection services) { - services.AddTransient(); + services.AddHttpClient(); } } } \ No newline at end of file diff --git a/services/SharedKernel/FilterLists.SharedKernel.Apis.Clients/Directory/DirectoryApiApiClient.cs b/services/SharedKernel/FilterLists.SharedKernel.Apis.Clients/Directory/DirectoryApiApiClient.cs new file mode 100644 index 000000000..8e143ae3b --- /dev/null +++ b/services/SharedKernel/FilterLists.SharedKernel.Apis.Clients/Directory/DirectoryApiApiClient.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using FilterLists.SharedKernel.Apis.Contracts.Directory; + +namespace FilterLists.SharedKernel.Apis.Clients.Directory +{ + internal sealed class DirectoryApiApiClient : BaseApiClient, IDirectoryApiClient + { + public DirectoryApiApiClient(HttpClient httpClient, Uri directoryApiBaseUrl) : base(httpClient) + { + Client.BaseAddress = directoryApiBaseUrl; + } + + public async Task> GetListsAsync(CancellationToken cancellationToken = default) + { + return await GetAsync>("/lists", cancellationToken); + } + + public async Task GetListDetailsAsync(int id, CancellationToken cancellationToken = default) + { + return await GetAsync($"/lists/{id}", cancellationToken); + } + } +} \ No newline at end of file diff --git a/services/SharedKernel/FilterLists.SharedKernel.Apis.Clients/Directory/IDirectoryApiClient.cs b/services/SharedKernel/FilterLists.SharedKernel.Apis.Clients/Directory/IDirectoryApiClient.cs new file mode 100644 index 000000000..91267fea9 --- /dev/null +++ b/services/SharedKernel/FilterLists.SharedKernel.Apis.Clients/Directory/IDirectoryApiClient.cs @@ -0,0 +1,13 @@ +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using FilterLists.SharedKernel.Apis.Contracts.Directory; + +namespace FilterLists.SharedKernel.Apis.Clients.Directory +{ + public interface IDirectoryApiClient + { + Task> GetListsAsync(CancellationToken cancellationToken = default); + Task GetListDetailsAsync(int id, CancellationToken cancellationToken = default); + } +} \ No newline at end of file diff --git a/services/SharedKernel/FilterLists.SharedKernel.Apis.Clients/FilterLists.SharedKernel.Apis.Clients.csproj b/services/SharedKernel/FilterLists.SharedKernel.Apis.Clients/FilterLists.SharedKernel.Apis.Clients.csproj index c05a1a4fe..99527e959 100644 --- a/services/SharedKernel/FilterLists.SharedKernel.Apis.Clients/FilterLists.SharedKernel.Apis.Clients.csproj +++ b/services/SharedKernel/FilterLists.SharedKernel.Apis.Clients/FilterLists.SharedKernel.Apis.Clients.csproj @@ -29,8 +29,8 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - - + +