public void Start()
        {
            // Get all the active bets
            var bets = this._portfolioDataProvider.GetCurrentBets();

            // Determine which ones need to be closed
            var potentialCandidates = this._exitDecider.GetExitDescisions(bets);

            // Update final stock price for bet from live data feed#
            this._priceUpdate.Update(potentialCandidates);

            // Rerun process for potential candiadtes only
            var candidates = this._exitDecider.GetExitDescisions(potentialCandidates);

            foreach (var bet in candidates)
            {
                // Create a command to represent an update to the domain
                var command = new CloseBetCommand
                {
                    BetId = bet.Id,
                };

                // Send the command for processing
                this._commandBus.Send(command);
            }
        }
Exemple #2
0
        public async Task ShouldCloseBet()
        {
            var      betId                = Guid.NewGuid();
            var      memberId             = new MemberId(Guid.Parse("1311e8c9-d993-4346-94c1-1907e3ce65d3"));
            var      creator              = new Member(memberId, "name", 300);
            BetState betState             = GenerateBet(betId, creator);
            var      domainEventsListener = new DomainEventsAccessor();
            var      repository           = new InMemoryBetRepository(domainEventsListener, betState);
            var      command              = new CloseBetCommand(betId, true);
            var      dateTimeClosed       = new DateTime(2021, 4, 1);
            var      dateTimeProvider     = new FakeDateTimeProvider(dateTimeClosed);
            var      handler              = new CloseBetCommandHandler(repository, dateTimeProvider, new InMemoryAuthenticationGateway(true, memberId.Value));

            await handler.Handle(command, default);

            var bet = await repository.GetByIdAsync(new(betId));

            Assert.True(bet.State.IsSuccess);
            Assert.Equal(dateTimeClosed, bet.State.CloseDate);
            var betClosedEvent = domainEventsListener.GetDomainEvents()
                                 .SingleOrDefault(x => x.GetType() == typeof(BetClosed)) as BetClosed;
            var betUpdatedEvent = domainEventsListener.GetDomainEvents()
                                  .SingleOrDefault(x => x.GetType() == typeof(BetUpdated)) as BetUpdated;

            Assert.NotNull(betClosedEvent);
            Assert.NotNull(betUpdatedEvent);
            Assert.Equal(betId, betClosedEvent.BetId);
            Assert.True(betClosedEvent.IsSuccess);
            Assert.Equal(betId, betUpdatedEvent.BetId);
        }
        public async Task <IActionResult> CloseBet([FromRoute] Guid betId, [FromBody] bool isSuccess)
        {
            var command = new CloseBetCommand(betId,
                                              isSuccess);
            await _module.ExecuteCommandAsync(command);

            return(Ok());
        }