示例#1
0
        public async Task <List <DailyCurrencyModel> > GetDailyCurrencies()
        {
            var    url               = "https://www.cbr-xml-daily.ru/daily_json.js";
            string responseText      = null;
            DailyCurrencyReport data = null;

            try
            {
                await _retryPolicy.ExecuteAsync(async() =>
                {
                    using var response = await _httpClient.GetAsync(url);
                    responseText       = await response.Content.ReadAsStringAsync();
                });

                data = JsonConvert.DeserializeObject <DailyCurrencyReport>(responseText);
            }
            catch (HttpRequestException e)
            {
                _logger.LogError(e, $"Send request error to {url}");
            }
            catch (JsonException e)
            {
                _logger.LogError(e, $"Deserialization error {nameof(DailyCurrencyReport)}.");
            }
            catch (Exception e)
            {
                _logger.LogError(e, "GetDailyCurrencies error.");
            }

            return(MapCurrencies(data));
        }
示例#2
0
        private List <DailyCurrencyModel> MapCurrencies(DailyCurrencyReport dailyCurrencyReport)
        {
            if (dailyCurrencyReport is null)
            {
                throw new ArgumentNullException(nameof(dailyCurrencyReport));
            }
            if (dailyCurrencyReport.Currencies is null)
            {
                throw new ArgumentNullException(nameof(dailyCurrencyReport.Currencies));
            }

            var currencies = new List <SberCurrency>();

            currencies.Add(dailyCurrencyReport.Currencies.AMD);
            currencies.Add(dailyCurrencyReport.Currencies.AUD);
            currencies.Add(dailyCurrencyReport.Currencies.AZN);
            currencies.Add(dailyCurrencyReport.Currencies.BGN);
            currencies.Add(dailyCurrencyReport.Currencies.BRL);
            currencies.Add(dailyCurrencyReport.Currencies.BYN);
            currencies.Add(dailyCurrencyReport.Currencies.CAD);
            currencies.Add(dailyCurrencyReport.Currencies.CHF);
            currencies.Add(dailyCurrencyReport.Currencies.CNY);
            currencies.Add(dailyCurrencyReport.Currencies.CZK);
            currencies.Add(dailyCurrencyReport.Currencies.DKK);
            currencies.Add(dailyCurrencyReport.Currencies.EUR);
            currencies.Add(dailyCurrencyReport.Currencies.GBP);
            currencies.Add(dailyCurrencyReport.Currencies.HKD);
            currencies.Add(dailyCurrencyReport.Currencies.HUF);
            currencies.Add(dailyCurrencyReport.Currencies.INR);
            currencies.Add(dailyCurrencyReport.Currencies.JPY);
            currencies.Add(dailyCurrencyReport.Currencies.KGS);
            currencies.Add(dailyCurrencyReport.Currencies.KRW);
            currencies.Add(dailyCurrencyReport.Currencies.KZT);
            currencies.Add(dailyCurrencyReport.Currencies.MDL);
            currencies.Add(dailyCurrencyReport.Currencies.NOK);
            currencies.Add(dailyCurrencyReport.Currencies.PLN);
            currencies.Add(dailyCurrencyReport.Currencies.RON);
            currencies.Add(dailyCurrencyReport.Currencies.SEK);
            currencies.Add(dailyCurrencyReport.Currencies.SGD);
            currencies.Add(dailyCurrencyReport.Currencies.TJS);
            currencies.Add(dailyCurrencyReport.Currencies.TMT);
            currencies.Add(dailyCurrencyReport.Currencies.TRY);
            currencies.Add(dailyCurrencyReport.Currencies.UAH);
            currencies.Add(dailyCurrencyReport.Currencies.USD);
            currencies.Add(dailyCurrencyReport.Currencies.UZS);
            currencies.Add(dailyCurrencyReport.Currencies.XDR);
            currencies.Add(dailyCurrencyReport.Currencies.ZAR);

            var dailyCurrencyModels = new List <DailyCurrencyModel>();

            foreach (var currency in currencies.Where(s => s != null))
            {
                dailyCurrencyModels.Add(new DailyCurrencyModel
                {
                    Date          = dailyCurrencyReport.Date,
                    Nominal       = currency.Nominal,
                    Value         = currency.Value,
                    Carrency      = _mapper.Map <Domain.Currency>(currency),
                    PreviousValue = currency.Previous
                });
            }

            return(dailyCurrencyModels);
        }