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 - - + +