public IActionResult CreateFlight([FromBody] FlightDto flight)
        {
            if (flight == null)
            {
                return(BadRequest());
            }

            // custom validation to make sure duplicate flights don't get created
            if (_flightInfoRepository.GetFlightByFlightNumber(flight.FlightNumber) != null)
            {
                _logger.LogCritical("Flight Already Exists");
                ModelState.AddModelError("Flight", "Flight Already Exists.");
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var flightEntity = AutoMapper.Mapper.Map <Flight>(flight);

            _flightInfoRepository.AddFlight(flightEntity);

            if (!_flightInfoRepository.Save())
            {
                _logger.LogCritical($"An Error Occured While saving flight with flight number: {flightEntity.FlightNumber}");
                return(StatusCode(500, "An Error Occured While Handing Your Request."));
            }

            var newFlight = AutoMapper.Mapper.Map <FlightDto>(flightEntity);

            return(CreatedAtRoute("GetFlightByFlightNumber", new { flightNumber = newFlight.FlightNumber }, newFlight));
        }
        public IActionResult MakeBooking([FromBody] MakeBookingDto booking)
        {
            try
            {
                if (booking == null)
                {
                    return(BadRequest());
                }

                //if (_flightInfoRepository.GetFlightByFlightNumber(booking.FlightNumber) == null)
                if (_flightInfoRepository.GetFlightByFlightNumber(booking.FlightNumber) == null)
                {
                    ModelState.AddModelError("Flight", "Flight does not Exists.");
                    //_logger.LogCritical($"Flight does not Exists for flight Number : {0}", booking.FlightNumber);
                    _logger.LogCritical($"Flight does not Exists for flight Number : {0}", booking.FlightNumber);
                }

                if (_flightInfoRepository.GetPassengersByNameAndMobile(booking.Passenger.Name, booking.Passenger.Mobile) == null)
                {
                    ModelState.AddModelError("Passenge", "Passenger does not Exists.");
                    _logger.LogCritical($"Passenge does not Exists for Passenge Name: {0} and Mobile: {1}", booking.Passenger.Name, booking.Passenger.Mobile);
                }

                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }

                var      flightBookingEntity = AutoMapper.Mapper.Map <FlightBooking>(booking);
                DateTime bookingDate         = new DateTime(booking.Date.Year, booking.Date.Month, booking.Date.Day, 0, 0, 0);
                flightBookingEntity.Date = bookingDate;

                flightBookingEntity.Flight = new Flight();
                //flightBookingEntity.Flight.Id = _flightInfoRepository.GetFlightByFlightNumber(booking.FlightNumber).Id;
                flightBookingEntity.Flight.Id = _flightInfoRepository.GetFlightByFlightNumber(booking.FlightNumber).Id;

                flightBookingEntity.Passenger    = new Passenger();
                flightBookingEntity.Passenger.Id = _flightInfoRepository.GetPassengersByNameAndMobile(booking.Passenger.Name, booking.Passenger.Mobile).Id;

                _flightInfoRepository.MakeBooking(flightBookingEntity);

                if (!_flightInfoRepository.Save())
                {
                    _logger.LogCritical("An Error Occured While Handing Your Request.");
                    return(StatusCode(500, "An Error Occured While Handing Your Request."));
                }

                var newBooking = AutoMapper.Mapper.Map <MakeBookingDto>(flightBookingEntity);
                return(CreatedAtRoute("GetBookingById", new { bookingId = flightBookingEntity.Id }, newBooking));
            }
            catch (Exception ex)
            {
                _logger.LogCritical("An Error Occured in MakeBooking: {0} ", ex.ToString());
                return(StatusCode(500, "An Error Occured While Handing Your Request."));
            }
        }
        public IActionResult CreatePassenger([FromBody] PassengerDto passenger)
        {
            try
            {
                if (passenger == null)
                {
                    return(BadRequest());
                }

                // custom validation to make sure duplicate passengers don't get created
                if (_flightInfoRepository.GetPassengersByNameAndMobile(passenger.Name, passenger.Mobile) != null)
                {
                    ModelState.AddModelError("Passenger", "Passenger Already Exists.");
                    _logger.LogCritical($"Passenger Already Exists with Name: {passenger.Name}, mobile: {passenger.Mobile}");
                }

                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }

                var passengerEntity = AutoMapper.Mapper.Map <Passenger>(passenger);
                _flightInfoRepository.AddPassenger(passengerEntity);

                if (!_flightInfoRepository.Save())
                {
                    _logger.LogCritical("An Error Occured While Handing Your Request.");
                    return(StatusCode(500, "An Error Occured While Handing Your Request."));
                }

                var newPassenger = AutoMapper.Mapper.Map <PassengerDto>(passengerEntity);
                return(CreatedAtRoute("GetPassengerById", new { id = passengerEntity.Id }, newPassenger));
            }
            catch (Exception ex)
            {
                _logger.LogCritical("An Error Occured While Handing Your Request. {0}", ex.ToString());
                return(StatusCode(500, "An Error Occured While Handing Your Request."));
            }
        }