Esempio n. 1
0
        private void ValidateCanLoadBaggage(PassengerBaggage baggage)
        {
            var baggageWeight = baggage.Bags.Sum(b => b.Weight);
            var cargoWeight   = cargo.Sum(c => c.Weight);

            if (cargoWeight + baggageWeight > Aircraft.MaxCargoWeight)
            {
                throw new AircraftBaggageOverweightException(this, baggage.PassengerId);
            }
        }
Esempio n. 2
0
        public void CheckIn(PassengerBaggage baggage)
        {
            ValidateCanLoadBaggage(baggage);

            foreach (var bag in baggage.Bags)
            {
                var cargoItem = new CargoItem(bag);
                cargo.Add(cargoItem);
            }
        }
        public Guid Execute(long flightId, StartPassengerRegistrationRequest passengerRequest)
        {
            var flight = flightRepository.GetById(flightId)
                         ?? throw new FlightNotFoundException(flightId);

            var passengerId = passengerRequest.Passenger.Id;
            var passenger   = passengerRepository.GetById(passengerId)
                              ?? throw new PassengerNotFoundException(passengerId);

            var baggageLimits = baggageLimitsRepository.GetByServiceClass(flight.FlightNumber, passenger.ServiceClass);
            //TODO: consider creating in Flight / factory
            //TODO: can be used to implement baggage reservation
            var emptyBaggage = new PassengerBaggage(flight, passenger, baggageLimits);

            var boardingPassGuid = flight.CheckIn(passenger);

            //Transactional
            flightRepository.Save(flight);
            baggageRepository.Save(emptyBaggage);

            return(boardingPassGuid);
        }