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))); }
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>()); }
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); }
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; } }