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); } }
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); }