public async Task <CommandResponse <Note> > Handle(Command cmd, CancellationToken cancellationToken) { var user = await _accounts.GetUser(cmd.UserId); if (user == null) { return(CommandResponse <Note> .Failed( "Unable to find user account for notes operation")); } if (user.State.Verified == null) { return(CommandResponse <Note> .Failed( "Please verify your email first before you can start creating notes")); } var note = new Note( cmd.UserId, cmd.Note, cmd.Ticker, cmd.Created ?? DateTimeOffset.UtcNow); await _storage.Save(note, cmd.UserId); return(CommandResponse <Note> .Success(note)); }
public async Task Handle(NoteCreated e, CancellationToken cancellationToken) { var n = await _storage.GetNote(e.UserId, e.AggregateId); if (n == null) { return; } var age = System.DateTimeOffset.UtcNow.Subtract(e.When).TotalDays; if (age > 2) { return; } var d = await _stocks.GetAdvancedStats(n.State.RelatedToTicker); var p = await _stocks.GetPrice(n.State.RelatedToTicker); if (d.IsOk && p.IsOk) { n.Enrich(p.Success, d.Success); await _storage.Save(n, n.State.UserId); } }
public async Task <Unit> Handle(Command request, CancellationToken cancellationToken) { var note = await _storage.GetNote(request.UserId, request.Id); if (note == null) { return(new Unit()); } note.Update(request.Note); await _storage.Save(note, request.UserId); return(new Unit()); }
public async Task <CommandResponse <OwnedStock> > Handle(Command cmd, CancellationToken cancellationToken) { var stock = await _storage.GetStock(cmd.Id, cmd.UserId); if (stock == null) { return(CommandResponse <OwnedStock> .Failed("Trying to delete not owned stock")); } stock.Delete(); await _storage.Save(stock, cmd.UserId); return(CommandResponse <OwnedStock> .Success(stock)); }
public async Task <CommandResponse <OwnedOption> > Handle(Command cmd, CancellationToken cancellationToken) { var option = await _storage.GetOwnedOption(cmd.Id.Value, cmd.UserId); if (option == null) { return(CommandResponse <OwnedOption> .Failed("Trying to expire not owned option")); } option.Expire(cmd.Assigned.Value); await _storage.Save(option, cmd.UserId); return(CommandResponse <OwnedOption> .Success(option)); }
public async Task <CommandResponse <OwnedOption> > Handle(Command cmd, CancellationToken cancellationToken) { var user = await _accountStorage.GetUser(cmd.UserId); if (user == null) { return(CommandResponse <OwnedOption> .Failed( "Unable to find user account for options operation")); } if (user.State.Verified == null) { return(CommandResponse <OwnedOption> .Failed( "Please verify your email first before you can record option transaction")); } var optionType = (OptionType)Enum.Parse(typeof(OptionType), cmd.OptionType, ignoreCase: true); var options = await _storage.GetOwnedOptions(cmd.UserId); var option = options.SingleOrDefault(o => o.IsMatch(cmd.Ticker, cmd.StrikePrice, optionType, cmd.ExpirationDate.Value)); if (option == null) { option = new OwnedOption( cmd.Ticker, cmd.StrikePrice, optionType, cmd.ExpirationDate.Value, cmd.UserId); } option.Buy(cmd.NumberOfContracts, cmd.Premium, cmd.Filled.Value, cmd.Notes); await _storage.Save(option, cmd.UserId); return(CommandResponse <OwnedOption> .Success(option)); }