Ejemplo n.º 1
0
        public Train(TrainId trainId, List <Seat> seats)
        {
            TrainId = trainId;
            Seats   = seats;

            Coaches = seats.GroupBy(x => x.CoachName).ToDictionary(x => x.Key, x => new Coach(x));
        }
Ejemplo n.º 2
0
        public async Task <Reservation> ReserveAsync(TrainId trainId, SeatsRequested seatsRequested)
        {
            // get the train
            var train = await _trainDataService.GetTrain(trainId);

            if (train.MustNotExceedTrainCapacity(seatsRequested))
            {
                var reservationAttenpt = train.BuildReservationAttempt(seatsRequested);

                if (reservationAttenpt.IsFulFilled())
                {
                    var bookingRef = await _bookingReference.GetBookingReference();

                    reservationAttenpt.AssignBookingReference(bookingRef);

                    await _trainDataService.ReserveAsync(reservationAttenpt);

                    return(reservationAttenpt.Confirm());
                }
            }

            return(new ReservationFailure(train.TrainId));
        }
Ejemplo n.º 3
0
 public ReservationAttempt(TrainId trainId, SeatsRequested seatsRequested, List <Seat> seats)
 {
     TrainId        = trainId;
     SeatsRequested = seatsRequested;
     Seats          = seats;
 }
Ejemplo n.º 4
0
 public ReservationFailure(TrainId trainId)
     : base(trainId, string.Empty, new List <Seat>())
 {
 }
Ejemplo n.º 5
0
 public Reservation(TrainId trainId, string bookingReference, List <Seat> seats)
 {
     TrainId          = trainId;
     BookingReference = bookingReference;
     Seats            = seats;
 }