public when_reservation_confirmation_is_received() { var makeReservationCommand = sut.Commands.Select(e => e.Body).OfType <MakeSeatReservation>().Single(); this.reservationId = makeReservationCommand.ReservationId; var reservationAccepted = new ReservationAccepted { ReservationId = makeReservationCommand.ReservationId, ConferenceId = makeReservationCommand.ConferenceId, }; sut.Handle(reservationAccepted); }
public void Handle(ReservationAccepted @event) { var repo = this.repositoryFactory.Invoke(); using (repo as IDisposable) { lock (lockObject) { var saga = repo.Find <RegistrationProcessSaga>(@event.ReservationId); saga.Handle(@event); repo.Save(saga); } } }
public void Handle(ReservationAccepted @event) { var repo = this.repositoryFactory.Invoke(); using (repo as IDisposable) { lock (lockObject) { var saga = repo.Query <RegistrationProcessSaga>().FirstOrDefault(x => x.ReservationId == @event.ReservationId); if (saga != null) { saga.Handle(@event); repo.Save(saga); } } } }
public void Handle(ReservationAccepted message) { if (this.State == SagaState.AwaitingReservationConfirmation) { this.State = SagaState.AwaitingPayment; this.AddCommand(new MarkOrderAsBooked { OrderId = this.OrderId }); this.commands.Add( new Envelope <ICommand>(new ExpireOrder { OrderId = this.OrderId, ConferenceId = message.ConferenceId }) { Delay = TimeSpan.FromMinutes(15), }); } else { throw new InvalidOperationException(); } }