示例#1
0
 public Task <AsyncTaskResult> HandleAsync(SeatsReservationCancelled evnt)
 {
     return(_messagePublisher.PublishAsync(new SeatsReservationCancelledMessage
     {
         ConferenceId = evnt.AggregateRootId,
         ReservationId = evnt.ReservationId
     }));
 }
示例#2
0
        private void OnSeatsReservationCancelled(SeatsReservationCancelled e)
        {
            pendingReservations.Remove(e.ReservationId);

            foreach (var seat in e.AvailableSeatsChanged)
            {
                remainingSeats[seat.SeatType] = remainingSeats[seat.SeatType] + seat.Quantity;
            }
        }
示例#3
0
        private void OnReservationCancelled(SeatsReservationCancelled @event)
        {
            _pendingReservations.Remove(@event.ReservationId);

            foreach (var seat in @event.AvailableSeatsChanged)
            {
                _remainingSeats[seat.SeatType] += seat.Quantity;
            }
        }
示例#4
0
        public Task HandleAsync(SeatsReservationCancelled evnt)
        {
            return(TryTransactionAsync(async(connection, transaction) =>
            {
                var effectedRows = await connection.UpdateAsync(new
                {
                    Version = evnt.Version,
                    EventSequence = evnt.Sequence
                }, new
                {
                    Id = evnt.AggregateRootId,
                    Version = evnt.Version - 1
                }, ConfigSettings.ConferenceTable, transaction);

                if (effectedRows == 1)
                {
                    var tasks = new List <Task>();

                    //删除预定记录
                    tasks.Add(connection.DeleteAsync(new
                    {
                        ConferenceId = evnt.AggregateRootId,
                        ReservationId = evnt.ReservationId
                    }, ConfigSettings.ReservationItemsTable, transaction));

                    //更新位置的可用数量
                    foreach (var seatAvailableQuantity in evnt.SeatAvailableQuantities)
                    {
                        tasks.Add(connection.UpdateAsync(new
                        {
                            AvailableQuantity = seatAvailableQuantity.AvailableQuantity
                        }, new
                        {
                            ConferenceId = evnt.AggregateRootId,
                            Id = seatAvailableQuantity.SeatTypeId
                        }, ConfigSettings.SeatTypeTable, transaction));
                    }

                    await Task.WhenAll(tasks);
                }
            }));
        }
示例#5
0
 public void Handle(SeatsReservationCancelled @event)
 {
     UpdateAvailableQuantity(@event, @event.AvailableSeatsChanged);
 }