Пример #1
0
        public async Task <IEnumerable <CurrencyRateViewModel> > ImportRatesAsync(int CurrencyId, DateTime fromDate, DateTime toDate)
        {
            var result   = new List <Task <CurrencyRate> >();
            var currency = currRepository.FindById(CurrencyId);
            var dates    = (toDate - fromDate).TotalDays;

            for (var i = 0; i < dates; i++)
            {
                var date = fromDate.AddDays(i);
                var rate = bankService.LoadRate(currency.Id, currency.ShortCode, date);
                result.Add(rate);
            }
            var rates = await Task.WhenAll(result);

            try
            {
                unitOfWork.BeginTransaction();
                currRateRepository.AddRange(rates);
                unitOfWork.Commit();
            }
            catch (Exception)
            {
                unitOfWork.Rollback();
                throw;
            }
            return(rates.Select(p => CurrencyRateViewModel.MapFromData(p)));
        }
Пример #2
0
        public IEnumerable <CurrencyRateViewModel> GetRatesByCurrency(int code)
        {
            var spec  = new RateByCurrencySpec(code);
            var rates = currRateRepository.FindOrdered(spec, x => x.Date, true, 0, 10, x => x.Currency)
                        .Select(p => CurrencyRateViewModel.MapFromData(p)).ToList();

            return(rates ?? new List <CurrencyRateViewModel>());
        }
Пример #3
0
        public CurrencyRateViewModel GetRateByCurrencyAndDateAsync(int code, DateTime date)
        {
            var spec = new RateByCurrencyAndDateSpec(code, date);
            var rate = currRateRepository.FindOrdered(spec, x => x.Date, true)
                       .Select(p => CurrencyRateViewModel.MapFromData(p))
                       .FirstOrDefault();

            if (rate == null)
            {
                throw new KeyNotFoundException("Rate not found");
            }
            return(rate);
        }
Пример #4
0
        public void AddRate(CurrencyRateViewModel rate)
        {
            var currency = currRepository.FindById(rate.CurrencyId);

            if (currency == null)
            {
                throw new ValidationException($"Currency {rate.CurrencyId} not found.");
            }

            var currRate = CurrencyRate.CreateRate(rate.CurrencyId, rate.Date, rate.Koef, rate.Rate);

            try
            {
                unitOfWork.BeginTransaction();
                currRateRepository.Add(currRate);
                unitOfWork.Commit();
            }
            catch (Exception)
            {
                unitOfWork.Rollback();
                throw;
            }
        }