public async Task <MarketValue> Calculate(int portfolioId, DateTime asOf)
        {
            var holdings = await lotsApi.GetLotsForPortfolio(portfolioId, asOf);

            float cumMktValue = 0;

            foreach (var holding in holdings)
            {
                var ticker = holding.Ric.Split('.');

                logger.Information($"Getting market price for {ticker[0]}");
                var price = await marketDataClient.GetMarketPriceAsync(ticker[0], asOf);

                cumMktValue += (float)(price) * holding.Qty;
            }

            logger.Information($"Fetching cash information for portfolio id {portfolioId}");

            var cashValue = await cashApi.GetCashForPortfolio(portfolioId, asOf);

            logger.Information($"Finished calculating market value for portfolioId:{portfolioId}");

            return(new MarketValue()
            {
                Date = asOf,
                MktValue = cumMktValue + (cashValue == null? 0 : cashValue.Amount),
                PortfolioId = portfolioId
            });
        }
        public async Task Consume(ConsumeContext <ICashValueAggregator> context)
        {
            var startDate = context.Message.Date;

            foreach (var portfolioId in context.Message.PortfolioIds)
            {
                logger.Information($"Calculating cash value for {portfolioId}");

                var cash = await cashApi.GetCashForPortfolio(portfolioId, startDate);

                var rows = await cashHistoryRepo.InsertAsync(new CashValue()
                {
                    Date = startDate, Cash = cash.Amount, PortfolioId = portfolioId
                });
            }
        }