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)); }
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)); }
public ReservationAttempt(TrainId trainId, SeatsRequested seatsRequested, List <Seat> seats) { TrainId = trainId; SeatsRequested = seatsRequested; Seats = seats; }
public ReservationFailure(TrainId trainId) : base(trainId, string.Empty, new List <Seat>()) { }
public Reservation(TrainId trainId, string bookingReference, List <Seat> seats) { TrainId = trainId; BookingReference = bookingReference; Seats = seats; }