simplify RestSharp/FilterListsApi org

This commit is contained in:
Collin M. Barrett 2019-07-08 15:27:05 -05:00
parent 53ea4c9973
commit b9d39be154
4 changed files with 25 additions and 51 deletions

View file

@ -4,7 +4,6 @@
using CommandLine;
using FilterLists.Agent.AppSettings;
using FilterLists.Agent.Core.Interfaces.Repositories;
using FilterLists.Agent.Infrastructure.Clients;
using FilterLists.Agent.Infrastructure.Repositories;
using LibGit2Sharp;
using MediatR;
@ -14,6 +13,7 @@
using Microsoft.Extensions.Options;
using Octokit;
using Polly;
using RestSharp;
using Credentials = Octokit.Credentials;
using Repository = LibGit2Sharp.Repository;
@ -28,7 +28,7 @@ public static void RegisterAgentServices(this IServiceCollection services)
services.AddLocalization();
services.AddTransient<Parser>();
services.AddMediatR(AppDomain.CurrentDomain.GetAssemblies());
services.AddSingleton<IFilterListsApiClient, FilterListsApiClient>();
services.AddApiClient();
services.AddGitHubClient();
services.AddUrlRepository();
services.AddListRepository();
@ -71,6 +71,15 @@ private static void AddLoggingCustom(this IServiceCollection services)
});
}
private static void AddApiClient(this IServiceCollection services)
{
services.AddSingleton<IRestClient>(b =>
{
var filterListsApiSettings = b.GetService<IOptions<FilterListsApiSettings>>().Value;
return new RestClient(filterListsApiSettings.BaseUrl) {UserAgent = "FilterLists.Agent"};
});
}
private static void AddGitHubClient(this IServiceCollection services)
{
services.AddSingleton<IGitHubClient, GitHubClient>(s =>

View file

@ -1,34 +0,0 @@
using System.Threading;
using System.Threading.Tasks;
using FilterLists.Agent.AppSettings;
using Microsoft.Extensions.Localization;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using RestSharp;
namespace FilterLists.Agent.Infrastructure.Clients
{
public class FilterListsApiClient : IFilterListsApiClient
{
private readonly IStringLocalizer<FilterListsApiClient> _localizer;
private readonly ILogger<FilterListsApiClient> _logger;
private readonly IRestClient _restClient;
public FilterListsApiClient(IStringLocalizer<FilterListsApiClient> stringLocalizer,
ILogger<FilterListsApiClient> logger, IOptions<FilterListsApiSettings> filterListsApiOptions)
{
_localizer = stringLocalizer;
_logger = logger;
_restClient = new RestClient(filterListsApiOptions.Value.BaseUrl) {UserAgent = "FilterLists.Agent"};
}
public async Task<TResponse> ExecuteAsync<TResponse>(IRestRequest request, CancellationToken cancellationToken)
{
var response = await _restClient.ExecuteTaskAsync<TResponse>(request, cancellationToken);
if (response.ErrorException == null)
_logger.LogError(response.ErrorException,
_localizer["Error retrieving response from the FilterLists API."]);
return response.Data;
}
}
}

View file

@ -1,11 +0,0 @@
using System.Threading;
using System.Threading.Tasks;
using RestSharp;
namespace FilterLists.Agent.Infrastructure.Clients
{
public interface IFilterListsApiClient
{
Task<TResponse> ExecuteAsync<TResponse>(IRestRequest request, CancellationToken cancellationToken);
}
}

View file

@ -3,24 +3,34 @@
using System.Threading.Tasks;
using FilterLists.Agent.Core.Entities;
using FilterLists.Agent.Core.Interfaces.Repositories;
using FilterLists.Agent.Infrastructure.Clients;
using Microsoft.Extensions.Localization;
using Microsoft.Extensions.Logging;
using RestSharp;
namespace FilterLists.Agent.Infrastructure.Repositories
{
public class ListInfoRepository : IListInfoRepository
{
private readonly IFilterListsApiClient _apiClient;
private readonly IRestClient _apiClient;
private readonly IStringLocalizer<ListInfoRepository> _localizer;
private readonly ILogger<ListInfoRepository> _logger;
public ListInfoRepository(IFilterListsApiClient apiClient)
public ListInfoRepository(IRestClient apiClient, IStringLocalizer<ListInfoRepository> stringLocalizer,
ILogger<ListInfoRepository> logger)
{
_apiClient = apiClient;
_localizer = stringLocalizer;
_logger = logger;
}
public async Task<IEnumerable<ListInfo>> GetAllAsync(CancellationToken cancellationToken)
{
var listsRequest = new RestRequest("lists");
return await _apiClient.ExecuteAsync<IEnumerable<ListInfo>>(listsRequest, cancellationToken);
var response = await _apiClient.ExecuteTaskAsync<IEnumerable<ListInfo>>(listsRequest, cancellationToken);
if (response.ErrorException != null)
_logger.LogError(response.ErrorException,
_localizer["Error retrieving response from the FilterLists API."]);
return response.Data;
}
}
}