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); } }
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()); }