Esempio n. 1
0
            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)
                });
Esempio n. 2
0
            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)
                });
Esempio n. 3
0
            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());
            }