public Task <AsyncTaskResult> HandleAsync(SeatsReservationCancelled evnt) { return(_messagePublisher.PublishAsync(new SeatsReservationCancelledMessage { ConferenceId = evnt.AggregateRootId, ReservationId = evnt.ReservationId })); }
private void OnSeatsReservationCancelled(SeatsReservationCancelled e) { pendingReservations.Remove(e.ReservationId); foreach (var seat in e.AvailableSeatsChanged) { remainingSeats[seat.SeatType] = remainingSeats[seat.SeatType] + seat.Quantity; } }
private void OnReservationCancelled(SeatsReservationCancelled @event) { _pendingReservations.Remove(@event.ReservationId); foreach (var seat in @event.AvailableSeatsChanged) { _remainingSeats[seat.SeatType] += seat.Quantity; } }
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); } })); }
public void Handle(SeatsReservationCancelled @event) { UpdateAvailableQuantity(@event, @event.AvailableSeatsChanged); }