Пример #1
0
            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));
            }
Пример #2
0
        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);
            }
        }
Пример #3
0
            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());
            }
Пример #4
0
            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));
            }
Пример #5
0
            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));
            }
Пример #6
0
            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));
            }