diff --git a/src/FilterLists.Agent/CaptureLists.cs b/src/FilterLists.Agent/CaptureLists.cs index 9f38c1f09..095d3581b 100644 --- a/src/FilterLists.Agent/CaptureLists.cs +++ b/src/FilterLists.Agent/CaptureLists.cs @@ -1,4 +1,5 @@ -using System.Threading; +using System.Collections.Generic; +using System.Threading; using System.Threading.Tasks; using MediatR; using RestSharp; @@ -13,16 +14,14 @@ public class Command : IRequest public class Handler : AsyncRequestHandler { - private readonly IRestClient _restClient; + private readonly IFilterListsApiClient apiClient; - public Handler(IRestClient restClient) - { - _restClient = restClient; - } + public Handler(IFilterListsApiClient apiClient) => this.apiClient = apiClient; - protected override Task Handle(Command request, CancellationToken cancellationToken) + protected override async Task Handle(Command request, CancellationToken cancellationToken) { - return Task.CompletedTask; + var listsRequest = new RestRequest("lists"); + var restResponse = await apiClient.ExecuteAsync>(listsRequest); } } } diff --git a/src/FilterLists.Agent/FilterListDto.cs b/src/FilterLists.Agent/FilterListDto.cs new file mode 100644 index 000000000..e7d12dfac --- /dev/null +++ b/src/FilterLists.Agent/FilterListDto.cs @@ -0,0 +1,8 @@ +namespace FilterLists.Agent +{ + public class FilterListDto + { + public int Id { get; private set; } + public string ViewUrl { get; private set; } + } +} \ No newline at end of file diff --git a/src/FilterLists.Agent/FilterListsApiClient.cs b/src/FilterLists.Agent/FilterListsApiClient.cs new file mode 100644 index 000000000..d95931763 --- /dev/null +++ b/src/FilterLists.Agent/FilterListsApiClient.cs @@ -0,0 +1,28 @@ +using System; +using System.Threading.Tasks; +using RestSharp; + +namespace FilterLists.Agent +{ + public interface IFilterListsApiClient + { + Task ExecuteAsync(RestRequest request); + } + + public class FilterListsApiClient : IFilterListsApiClient + { + private const string FilterListsApiBaseUrl = "https://filterlists.com/api/v1"; + private const string ExceptionMessage = "Error retrieving response from FilterLists API."; + private readonly IRestClient restClient; + + public FilterListsApiClient() => restClient = new RestClient(FilterListsApiBaseUrl); + + public async Task ExecuteAsync(RestRequest request) + { + var response = await restClient.ExecuteTaskAsync(request); + if (response.ErrorException == null) + return response.Data; + throw new ApplicationException(ExceptionMessage, response.ErrorException); + } + } +} \ No newline at end of file diff --git a/src/FilterLists.Agent/Program.cs b/src/FilterLists.Agent/Program.cs index 646f6da85..aca04a3bc 100644 --- a/src/FilterLists.Agent/Program.cs +++ b/src/FilterLists.Agent/Program.cs @@ -4,7 +4,6 @@ using Autofac.Extensions.DependencyInjection; using MediatR; using Microsoft.Extensions.DependencyInjection; -using RestSharp; //TODO: get raw list urls and IDs //TODO: foreach list, download and persist raw list to disk with standardized name and overwriting the previous version @@ -16,7 +15,6 @@ namespace FilterLists.Agent { public static class Program { - private const string FilterListsApiBaseUrl = "https://filterlists.com/api/v1"; private static IServiceProvider _serviceProvider; public static async Task Main() @@ -35,8 +33,9 @@ private static void RegisterServices() var serviceCollection = new ServiceCollection(); var containerBuilder = new ContainerBuilder(); + // register Agent services serviceCollection.AddMediatR(typeof(Program).Assembly); - containerBuilder.Register(c => new RestClient(FilterListsApiBaseUrl)).SingleInstance(); + containerBuilder.RegisterType().AsImplementedInterfaces().SingleInstance(); containerBuilder.Populate(serviceCollection); var container = containerBuilder.Build();