IReadOnlyDictionary <CurrencyCode, SumState> CalculateAssetSums( AssetISIN isin, IReadOnlyCollection <VirtualAsset> allAssets, DateTimeOffset date) { var assets = allAssets .Where(a => a.Isin == isin) .ToArray(); if (assets.Length == 0) { return(new Dictionary <CurrencyCode, SumState>()); } var baseCurrency = assets[0].Currency; var baseRealSum = assets.Sum(a => a.RealSum); var baseVirtualSum = assets.Sum(a => a.VirtualSum); return(_currencyConfig.GetAll() .ToDictionary( c => c, c => { if (c == baseCurrency) { return new SumState(baseRealSum, baseVirtualSum); } var realSum = _exchangeManager.Exchange(baseCurrency, c, baseRealSum, date); var virtualSum = _exchangeManager.Exchange(baseCurrency, c, baseRealSum, date); return new SumState(realSum, virtualSum); } )); }
public IActionResult Get([Required] DateTimeOffset date) { var userId = new UserId(User.Identity?.Name ?? string.Empty); _logger.LogInformation($"Retrieve state for user '{userId}' at {date}"); var state = _readUseCase.Handle(date, userId); var brokers = state.Brokers .Select(b => new BrokerDto( b.Id, b.DisplayName, b.Accounts .Select(a => new AccountDto(a.Id, a.Currency, a.DisplayName, a.Balance)) .ToArray(), b.Inventory .Select(a => new AssetDto(a.Id, a.Isin, a.Count)) .ToArray())) .ToArray(); var currencies = _currencyConfig.GetAll() .Select(c => new CurrencyDto(c, _currencyConfig.GetFormat(c))) .ToArray(); var dto = new StateDto(brokers, currencies); return(new JsonResult(dto)); }