using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Net.Http.Json; using System.Threading.Tasks; using Microsoft.eShopWeb.ApplicationCore.Interfaces; namespace Microsoft.eShopWeb.ApplicationCore.Services; public class ExchangeRateClient : IExchangeRateClient { private readonly HttpClient _httpClient; public ExchangeRateClient(HttpClient httpClient) { _httpClient = httpClient; } public async Task<decimal> Latest(Currency baseCurrency, Currency toCurrency) { var result = await _httpClient.GetFromJsonAsync<JsonResponse>($"https://data.fixer.io/api/latest?base={baseCurrency}&symbols={toCurrency}"); if (result == null) { throw new InvalidOperationException("Not a valid JSON response."); } return result.Rates.Single(x => x.Key == toCurrency.ToString()).Value; } private class JsonResponse { public Dictionary<string, decimal> Rates { get; set; } } }