コード例 #1
0
        public List <Seat> GetAvailableSeats(SeatsRequested seatsRequested)
        {
            if (ExceedCapacity(seatsRequested))
            {
                return(new List <Seat>());
            }

            return(GetReserveSeats(seatsRequested).ToList());
        }
コード例 #2
0
ファイル: Train.cs プロジェクト: yhan/TrainTrain-Kata-v2
        public ReservationAttempt BuildReservationAttempt(SeatsRequested seatsRequested)
        {
            foreach (var coach in Coaches.Values)
            {
                var reservationAttenpt = new ReservationAttempt(TrainId, seatsRequested, coach.GetAvailableSeats(seatsRequested));
                if (reservationAttenpt.IsFulFilled())
                {
                    return(reservationAttenpt);
                }
            }

            return(new ReservationAttempt(TrainId, seatsRequested, GetReservableSeats().Take(seatsRequested.Value).ToList()));
        }
コード例 #3
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));
        }
コード例 #4
0
 public ReservationAttempt(TrainId trainId, SeatsRequested seatsRequested, List <Seat> seats)
 {
     TrainId        = trainId;
     SeatsRequested = seatsRequested;
     Seats          = seats;
 }
コード例 #5
0
        private bool ExceedCapacity(SeatsRequested seatsRequested)
        {
            var numberOfReservedSeats = Seats.Count(x => !x.IsSeatNotReserved());

            return(seatsRequested.Value + numberOfReservedSeats > Seats.Count() * 0.7);
        }
コード例 #6
0
 private IEnumerable <Seat> GetReserveSeats(SeatsRequested seatsRequested)
 {
     return(Seats.Where(x => x.IsSeatNotReserved()).Take(seatsRequested.Value));
 }
コード例 #7
0
ファイル: Train.cs プロジェクト: yhan/TrainTrain-Kata-v2
 public bool MustNotExceedTrainCapacity(SeatsRequested seatsRequested)
 {
     return(ReservedSeats + seatsRequested.Value <= Math.Floor(ThreasholdManager.GetMaxRes() * GetMaxSeat()));
 }