using Newsbot.Collector.Client.Domain.Dto; using Newtonsoft.Json; namespace Newsbot.Collector.Client; public interface IArticlesClient { public Task GetArticleAsync(Guid id); public ArticlesDto GetArticle(Guid id); public Task> ListArticlesAsync(); public List ListArticles(); public Task> ListBySourceAsync(Guid sourceId); public List ListBySource(Guid sourceId); } public class ArticlesClient : IArticlesClient { private HttpClient Client { get; set; } private string InstanceUri { get; set; } public ArticlesClient(HttpClient client, string instanceUri) { Client = client; InstanceUri = instanceUri; } public async Task GetArticleAsync(Guid id) { var res = await Client.GetAsync(new Uri($"{InstanceUri}/api/articles/{id}")); var content = await res.Content.ReadAsStringAsync(); var payload = JsonConvert.DeserializeObject(content); payload ??= new ArticlesDto(); return payload; } public ArticlesDto GetArticle(Guid id) { var res = GetArticleAsync(id); res.Wait(); return res.Result; } public async Task> ListArticlesAsync() { var res = await Client.GetAsync(new Uri($"{InstanceUri}/api/articles")); var content = await res.Content.ReadAsStringAsync(); var payload = JsonConvert.DeserializeObject>(content); payload ??= new List(); return payload; } public List ListArticles() { var res = ListArticlesAsync(); res.Wait(); return res.Result; } public async Task> ListBySourceAsync(Guid sourceId) { var res = await Client.GetAsync(new Uri($"{InstanceUri}/api/articles/by/{sourceId}")); var content = await res.Content.ReadAsStringAsync(); var payload = JsonConvert.DeserializeObject>(content); payload ??= new List(); return payload; } public List ListBySource(Guid id) { var res = ListBySourceAsync(id); res.Wait(); return res.Result; } }