public override async Task <OptionDashboardView> Handle(Query request, CancellationToken cancellationToken) { var view = await _storage.ViewModel <OptionDashboardView>(request.UserId); if (view == null) { view = await FromDb(request.UserId); } var prices = await _stockService.GetPrices( view.OpenOptions.Select(o => o.Ticker).ToList() ); return(prices.IsOk switch { false => view, true => EnrichWithStockPrice(view, prices.Success) });
public override async Task <object> Handle(Query query, CancellationToken cancellationToken) { var view = await _storage.ViewModel <StockDashboardView>(query.UserId); if (view == null) { view = await LoadFromDb(query.UserId); } var tickers = view.Owned.Select(o => o.Ticker).Distinct(); var tickerPrices = await _stocksService.GetPrices(tickers); return(tickerPrices.IsOk switch { false => view, true => EnrichWithStockPrice(view, tickerPrices.Success) });
public async Task <TradingEntryView[]> Handle(Query request, CancellationToken cancellationToken) { var stocks = await _portfolio.GetStocks(request.UserId); var tradingEntries = stocks.Where(s => s.State.Owned > 0 && s.State.Category == "shortterm") .Select(s => new TradingEntryView(s.State)) .ToArray(); var prices = await _stocks.GetPrices(tradingEntries.Select(s => s.Ticker).Distinct()); if (prices.IsOk) { foreach (var entry in tradingEntries) { prices.Success.TryGetValue(entry.Ticker, out var price); entry.ApplyPrice(price?.Price ?? 0); } } return(tradingEntries .OrderByDescending(s => s.Gain) .ToArray()); }