예제 #1
0
            public override async Task <object> Handle(Command cmd, CancellationToken cancellationToken)
            {
                var owned = await _storage.GetStocks(cmd.UserId);

                var alerts = await _alertsStorage.GetAlerts(cmd.UserId);

                foreach (var o in owned)
                {
                    if (o.State.Owned == 0)
                    {
                        continue;
                    }

                    var exists = alerts.Any(a => a.State.Ticker == o.State.Ticker);
                    if (!exists)
                    {
                        var a = new Alert(o.State.Ticker, cmd.UserId);

                        a.AddPricePoint("Migrated average cost", o.State.AverageCost);

                        await _alertsStorage.Save(a);
                    }
                }

                return(new object());
            }
예제 #2
0
            public async Task <object> Handle(Users.Query cmd, CancellationToken cancellationToken)
            {
                var users = await _storage.GetUserEmailIdPairs();

                var result = new List <UserView>();

                foreach (var(email, userId) in users)
                {
                    var guid = new System.Guid(userId);
                    var user = await _storage.GetUser(guid);

                    var options = await _portfolio.GetOwnedOptions(guid);

                    var notes = await _portfolio.GetNotes(guid);

                    var stocks = await _portfolio.GetStocks(guid);

                    var alerts = await _alerts.GetAlerts(guid);

                    var u = new UserView(user, stocks, options, notes, alerts);

                    result.Add(u);
                }

                return(result.OrderByDescending(u => u.LastLogin));
            }
예제 #3
0
            public override async Task <object> Handle(Query request, CancellationToken cancellationToken)
            {
                var alerts = await _alertsStorage.GetAlerts(request.UserId);

                var list = new List <object>();

                foreach (var a in alerts.OrderByDescending(a => a.PricePoints.Any(p => _container.HasTriggered(p))).ThenBy(a => a.Ticker))
                {
                    if (a.PricePoints.Count == 0)
                    {
                        continue;
                    }

                    var price = await _stock.GetPrice(a.Ticker);

                    list.Add(new {
                        currentPrice = price.Success.Amount,
                        ticker       = a.State.Ticker.Value,
                        points       = a.State.PricePoints.Select(pp => new {
                            pp.Id,
                            pp.Value,
                            pp.Description,
                            triggered = _container.HasTriggered(pp)
                        }),
                    });
                }

                return(list);
            }
예제 #4
0
            public override async Task <ExportResponse> Handle(Query request, CancellationToken cancellationToken)
            {
                var alerts = await _alertsStorage.GetAlerts(request.UserId);

                var filename = CSVExport.GenerateFilename("alerts");

                return(new ExportResponse(filename, CSVExport.Generate(alerts.Where(a => a.PricePoints.Count > 0))));
            }