public async Task <List <BalanceTotalChangeModel> > GetUserBalanceChangesAsync(Guid userId, int count) { IEnumerable <DateTime> effectivateDates = await _balanceRepository.GetOrderedEffectiveDatesAsync(userId); IEnumerable <DateTime> filterEffectiveDates = effectivateDates.Take(count); IEnumerable <UserCurrency> userCurrencies = await _userCurrencyRepository.GetByUserIdAsync(userId); string primaryCurrency = userCurrencies.Where(uc => uc.IsPrimary).Select(uc => uc.Currency).FirstOrDefault(); IEnumerable <Balance> balances = await _balanceRepository.GetAllAsync(userId); List <Balance> balancesToDate = balances.Where(b => b.EffectiveDate <= filterEffectiveDates.Last()).ToList(); List <BalanceTotalChangeModel> result = new List <BalanceTotalChangeModel>(); foreach (var currency in userCurrencies) { List <BalanceTotalModel> values = new List <BalanceTotalModel>(); foreach (var effectiveDate in filterEffectiveDates) { var effectiveBalances = balances.Where(b => b.EffectiveDate == effectiveDate).ToList(); BalanceTotalModel balanceTotal = await _balanceTotalCalculator .CalculateAsync(userId, effectiveBalances, currency.Currency, primaryCurrency, effectiveDate); values.Add(balanceTotal); } result.Add(new BalanceTotalChangeModel(currency.Currency, values)); } return(result); }
public async Task <List <UserCurrencyModel> > GetUserCurrenciesAsync(Guid userId) { IEnumerable <UserCurrency> userCurrencies = await _userCurrencyRepository.GetByUserIdAsync(userId); List <UserCurrencyModel> result = userCurrencies?.Select(uc => new UserCurrencyModel(uc.Currency, uc.IsPrimary)).ToList(); return(result); }