private static QuoteCurrency CreateQuoteCurrencyFromGetLatestCryptocurrencyQuotesResponseJsonContent(
            string jsonText)
        {
            var jsonReader = new Utf8JsonReader(Encoding.UTF8.GetBytes(jsonText), isFinalBlock: true, state: default);

            CurrencyCode         currencyCode = null;
            CurrencyExchangeRate crossRate    = null;

            var currentPropertyName = string.Empty;

            while (jsonReader.Read())
            {
                switch (jsonReader.TokenType)
                {
                case JsonTokenType.PropertyName:
                    var previousPropertyName = currentPropertyName;
                    currentPropertyName = jsonReader.GetString();
                    TryParseQuoteCurrencyCode(previousPropertyName, currentPropertyName, ref currencyCode);
                    continue;

                case JsonTokenType.Number:
                    TryParseQuoteCurrencyCrossRate(jsonReader.GetDecimal(), currentPropertyName, ref crossRate);
                    break;

                default:
                    continue;
                }
            }

            return(QuoteCurrency.Of(currencyCode, crossRate));
        }
 private static void TryParseQuoteCurrencyCrossRate(
     decimal value, string currentPropertyName, ref CurrencyExchangeRate crossRate)
 {
     if (currentPropertyName == QuoteCurrencyCrossRatePropertyName)
     {
         crossRate = CurrencyExchangeRate.Of(value);
     }
 }
        public async Task <CurrencyExchangeRate> Update(CurrencyExchangeRate exchangeRate)
        {
            ModelValidator.ValidateModelAttributes(exchangeRate);

            Context.CurrencyExchangeRates.Update(exchangeRate);
            await Context.SaveChangesAsync();

            return(GetByKey(exchangeRate.Id));
        }
Exemple #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="model"></param>
        /// <returns></returns>
        public static CurrencyExchangeRate Update(this CurrencyExchangeRate entity, CurrencyExchangeRateModel model)
        {
            if (entity == null)
            {
                return(null);
            }

            entity.Rate = model.Rate > 0 ? model.Rate : entity.Rate;
            return(entity);
        }
Exemple #5
0
 private async Task InsertDataToDb(CurrencyExchageRateApiResponse source)
 {
     foreach (var item in source.Rates)
     {
         var newData = new CurrencyExchangeRate
         {
             SourceCurrency = item.Key,
             TargetCurrency = source.BaseCurrency,
             ExchangeRate   = item.Value,
             Date           = source.CreateTime
         };
         await _CurrencyExchangeRateRepository.InsertDataAsync(newData);
     }
 }
        public Task <CurrencyExchangeRate> Update(CurrencyExchangeRate exchangeRate)
        {
            var exchangeRateRepository = ContextProvider.GetRepository <ICurrencyExchangeRateRepository>();

            var targetExchangeRate = exchangeRateRepository.GetByKey(exchangeRate.Id);

            if (targetExchangeRate == null)
            {
                throw new CashSchedulerException("There is no such exchange rate");
            }

            var currencyRepository = ContextProvider.GetRepository <ICurrencyRepository>();

            if (!string.IsNullOrEmpty(exchangeRate.SourceCurrencyAbbreviation))
            {
                targetExchangeRate.SourceCurrency = currencyRepository.GetByKey(exchangeRate.SourceCurrencyAbbreviation);

                if (targetExchangeRate.SourceCurrency == null)
                {
                    throw new CashSchedulerException("There is no such currency", new[] { "sourceCurrencyAbbreviation" });
                }
            }

            if (!string.IsNullOrEmpty(exchangeRate.TargetCurrencyAbbreviation))
            {
                targetExchangeRate.TargetCurrency = currencyRepository.GetByKey(exchangeRate.TargetCurrencyAbbreviation);

                if (targetExchangeRate.TargetCurrency == null)
                {
                    throw new CashSchedulerException("There is no such currency", new[] { "targetCurrencyAbbreviation" });
                }
            }

            if (exchangeRate.ExchangeRate != default)
            {
                targetExchangeRate.ExchangeRate = exchangeRate.ExchangeRate;
            }

            if (exchangeRate.ValidFrom != default)
            {
                targetExchangeRate.ValidFrom = exchangeRate.ValidFrom;
            }

            if (exchangeRate.ValidTo != default)
            {
                targetExchangeRate.ValidTo = exchangeRate.ValidTo;
            }

            return(exchangeRateRepository.Update(targetExchangeRate));
        }
Exemple #7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public static CurrencyExchangeRateModel ToModel(this CurrencyExchangeRate entity)
        {
            if (entity == null)
            {
                return(null);
            }

            return(new CurrencyExchangeRateModel
            {
                Id = entity.Id,
                Rate = entity.Rate,
                Day = entity.From,
            });
        }
        public void AddCurrencyExchangeRate(string currency, double rate)
        {
            CurrencyExchangeRate currencyExchangeRate = new CurrencyExchangeRate {
                Currency = currency, Rate = rate
            };

            if (MasterBank.currentBank.CurrencyExchangeList.Contains(currencyExchangeRate))
            {
            }
            else
            {
                MasterBank.currentBank.CurrencyExchangeList.Add(currencyExchangeRate);
            }
            MasterBank.SaveCurrentState();
        }
        public async Task Create_ReturnsNewExchangeRate()
        {
            string usersJson = File.ReadAllText(TestConfiguration.MockDataFolderPath + @"Users.json");
            var    user      = JsonConvert.DeserializeObject <List <User> >(usersJson).First(u => u.Id == TESTING_USER_ID);

            string currenciesJson = File.ReadAllText(TestConfiguration.MockDataFolderPath + @"Currencies.json");
            var    currencies     = JsonConvert.DeserializeObject <List <Currency> >(currenciesJson);

            const string sourceCurrencyAbbreviation = "EUR";
            const string targetCurrencyAbbreviation = "USD";
            const float  exchangeRate = 1.12f;

            var sourceCurrency = currencies.First(c => c.Abbreviation == sourceCurrencyAbbreviation);
            var targetCurrency = currencies.First(c => c.Abbreviation == targetCurrencyAbbreviation);

            var newExchangeRate = new CurrencyExchangeRate
            {
                SourceCurrencyAbbreviation = sourceCurrencyAbbreviation,
                TargetCurrencyAbbreviation = targetCurrencyAbbreviation,
                ExchangeRate = exchangeRate,
                IsCustom     = true
            };

            UserRepository.Setup(u => u.GetByKey(TESTING_USER_ID)).Returns(user);

            CurrencyRepository.Setup(c => c.GetByKey(sourceCurrencyAbbreviation)).Returns(sourceCurrency);
            CurrencyRepository.Setup(c => c.GetByKey(targetCurrencyAbbreviation)).Returns(targetCurrency);

            CurrencyExchangeRateRepository.Setup(c => c.Create(newExchangeRate)).ReturnsAsync(newExchangeRate);


            var resultExchangeRate = await CurrencyExchangeRateService.Create(newExchangeRate);


            Assert.NotNull(resultExchangeRate);
            Assert.NotNull(resultExchangeRate.SourceCurrency);
            Assert.NotNull(resultExchangeRate.TargetCurrency);
            Assert.NotNull(resultExchangeRate.User);
            Assert.Equal(TESTING_USER_ID, resultExchangeRate.User.Id);
            Assert.Equal(sourceCurrencyAbbreviation, resultExchangeRate.SourceCurrency.Abbreviation);
            Assert.Equal(targetCurrencyAbbreviation, resultExchangeRate.TargetCurrency.Abbreviation);
            Assert.Equal(exchangeRate, resultExchangeRate.ExchangeRate);
            Assert.Equal(DateTime.Today, resultExchangeRate.ValidFrom);
            Assert.Equal(DateTime.Today, resultExchangeRate.ValidTo);
        }
        public async Task Delete_ThrowsException()
        {
            string currenciesJson = File.ReadAllText(TestConfiguration.MockDataFolderPath + @"Currencies.json");
            var    currencies     = JsonConvert.DeserializeObject <List <Currency> >(currenciesJson);

            const int    exchangeRateId             = 1;
            const string sourceCurrencyAbbreviation = "EUR";
            const string targetCurrencyAbbreviation = "USD";
            const float  exchangeRate = 1.12f;

            var sourceCurrency = currencies.First(c => c.Abbreviation == sourceCurrencyAbbreviation);
            var targetCurrency = currencies.First(c => c.Abbreviation == targetCurrencyAbbreviation);

            var currencyExchangeRate = new CurrencyExchangeRate
            {
                Id             = exchangeRateId,
                ExchangeRate   = exchangeRate,
                SourceCurrency = sourceCurrency,
                TargetCurrency = targetCurrency,
                IsCustom       = false,
                ValidFrom      = DateTime.Today,
                ValidTo        = DateTime.Today.AddDays(1)
            };

            CurrencyExchangeRateRepository
            .Setup(c => c.GetByKey(exchangeRateId))
            .Returns(currencyExchangeRate);

            CurrencyExchangeRateRepository
            .Setup(c => c.Delete(exchangeRateId))
            .ReturnsAsync(currencyExchangeRate);


            await Assert.ThrowsAsync <CashSchedulerException>(async() =>
            {
                await CurrencyExchangeRateService.Delete(exchangeRateId);
            });
        }
Exemple #11
0
        public async Task <CurrencyExchangeRate> RequestExchangeRateAsync(string fromCurrency, string toCurrency)
        {
            var args = new List <KeyValuePair <string, string> >();

            args.Add(new KeyValuePair <string, string>(FROM_CURRENCY_ARG, fromCurrency));
            args.Add(new KeyValuePair <string, string>(TO_CURRENCY_ARG, toCurrency));

            var url = GetUrl(CURRENCY_EXCHANGE_RATE_FUNC, args);

            var json = await Request(url);

            CurrencyExchangeRate rate = null;

            if (json is JObject)
            {
                rate = CurrencyExchangeRate.FromJson((JObject)json);
            }
            if (rate == null)
            {
                log.WarnFormat("Failed to parse the result of request {0}", url);
                log.WarnFormat("The JSON content is {0}", json);
            }
            return(rate);
        }
        public Task <CurrencyExchangeRate> Create(CurrencyExchangeRate exchangeRate)
        {
            var currencyRepository = ContextProvider.GetRepository <ICurrencyRepository>();

            exchangeRate.SourceCurrency ??= currencyRepository.GetByKey(exchangeRate.SourceCurrencyAbbreviation);
            exchangeRate.TargetCurrency ??= currencyRepository.GetByKey(exchangeRate.TargetCurrencyAbbreviation);

            if (exchangeRate.SourceCurrency == null)
            {
                throw new CashSchedulerException("There is no such currency", new[] { "sourceCurrencyAbbreviation" });
            }

            if (exchangeRate.TargetCurrency == null)
            {
                throw new CashSchedulerException("There is no such currency", new[] { "targetCurrencyAbbreviation" });
            }

            if (exchangeRate.IsCustom && exchangeRate.User == null)
            {
                exchangeRate.User = ContextProvider.GetRepository <IUserRepository>().GetByKey(UserId);
            }

            return(ContextProvider.GetRepository <ICurrencyExchangeRateRepository>().Create(exchangeRate));
        }
Exemple #13
0
 public async Task InsertDataAsync(CurrencyExchangeRate data)
 {
     await InsertAsync(data);
 }
        public async Task Update_ReturnsUpdatedExchangeRate()
        {
            string usersJson = File.ReadAllText(TestConfiguration.MockDataFolderPath + @"Users.json");
            var    user      = JsonConvert.DeserializeObject <List <User> >(usersJson).First(u => u.Id == TESTING_USER_ID);

            string currenciesJson = File.ReadAllText(TestConfiguration.MockDataFolderPath + @"Currencies.json");
            var    currencies     = JsonConvert.DeserializeObject <List <Currency> >(currenciesJson);

            const int    exchangeRateId             = 1;
            const string sourceCurrencyAbbreviation = "EUR";
            const string targetCurrencyAbbreviation = "USD";
            const float  exchangeRate = 1.12f;

            const string newTargetCurrencyAbbreviation = "RUB";
            const float  newExchangeRate = 1.66f;

            var sourceCurrency    = currencies.First(c => c.Abbreviation == sourceCurrencyAbbreviation);
            var targetCurrency    = currencies.First(c => c.Abbreviation == targetCurrencyAbbreviation);
            var newTargetCurrency = currencies.First(c => c.Abbreviation == newTargetCurrencyAbbreviation);

            var oldCurrencyExchangeRate = new CurrencyExchangeRate
            {
                Id             = exchangeRateId,
                ExchangeRate   = exchangeRate,
                SourceCurrency = sourceCurrency,
                TargetCurrency = targetCurrency,
                ValidFrom      = DateTime.Today,
                ValidTo        = DateTime.Today.AddDays(1)
            };

            var newCurrencyExchangeRate = new CurrencyExchangeRate
            {
                Id = exchangeRateId,
                TargetCurrencyAbbreviation = newTargetCurrencyAbbreviation,
                ExchangeRate = newExchangeRate,
                ValidTo      = DateTime.Today
            };

            UserRepository.Setup(u => u.GetByKey(TESTING_USER_ID)).Returns(user);

            CurrencyRepository.Setup(c => c.GetByKey(sourceCurrencyAbbreviation)).Returns(sourceCurrency);
            CurrencyRepository.Setup(c => c.GetByKey(targetCurrencyAbbreviation)).Returns(targetCurrency);
            CurrencyRepository.Setup(c => c.GetByKey(newTargetCurrencyAbbreviation)).Returns(newTargetCurrency);

            CurrencyExchangeRateRepository
            .Setup(c => c.GetByKey(exchangeRateId))
            .Returns(oldCurrencyExchangeRate);

            CurrencyExchangeRateRepository
            .Setup(c => c.Update(oldCurrencyExchangeRate))
            .ReturnsAsync(oldCurrencyExchangeRate);


            var resultExchangeRate = await CurrencyExchangeRateService.Update(newCurrencyExchangeRate);


            Assert.NotNull(resultExchangeRate);
            Assert.NotNull(resultExchangeRate.SourceCurrency);
            Assert.NotNull(resultExchangeRate.TargetCurrency);
            Assert.Equal(sourceCurrencyAbbreviation, resultExchangeRate.SourceCurrency.Abbreviation);
            Assert.Equal(newTargetCurrencyAbbreviation, resultExchangeRate.TargetCurrency.Abbreviation);
            Assert.Equal(newExchangeRate, resultExchangeRate.ExchangeRate);
            Assert.Equal(DateTime.Today, resultExchangeRate.ValidFrom);
            Assert.Equal(DateTime.Today, resultExchangeRate.ValidTo);
        }
Exemple #15
0
 static void PrintExchangeRate(CurrencyRequestType requestType, string fromCurr, string toCurr, CurrencyExchangeRate rate)
 {
     if (rate == null)
     {
         Console.WriteLine("Failed to get rate for {0} to {1}", fromCurr, toCurr);
         return;
     }
     Console.WriteLine(rate);
 }