Esempio n. 1
0
        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();
            }
        }