private Response ProceedRequest(JsonRequest request)
        {
            // Each slice has its own flights solutions
            var slices = new List<IEnumerable<IInDirectFlight>>();

            var maxSolutionsCount = request.Request.Solutions;
            foreach (var slice in request.Request.Slice)
            {
                var passengerCount = PassengerHelper.TotalPassengersCount(request);
                var dt = DateTime.Parse(slice.Date);

                var inDirectFlights = _flightRepository.
                    GetInDirectTheCheapestByDate(slice.Origin, slice.Destination,
                        dt, passengerCount)
                    .ToList(); // Avoid multiple enumeration = multiple database query

                slices.Add(inDirectFlights);
            }

            // Get passengers information

            // Single slices

            // Multiple slices
            return QpxConverter.MultipleSlicesToResponse(slices, request.Request.Passengers, maxSolutionsCount);
        }
        public HttpResponseMessage PostRequest()
        {
            var requestContent = Request.Content;
            var jsonContent = requestContent.ReadAsStringAsync().Result;
            var request = new JsonRequest(jsonContent);
            var response = ProceedRequest(request);

            var jsonResponse = this.Request.CreateResponse(HttpStatusCode.OK);
            jsonResponse.Content = new StringContent(LowercaseJsonSerializer.SerializeObject(response), Encoding.UTF8, "application/json");
            return jsonResponse;
        }
        public static int TotalPassengersCount(JsonRequest request)
        {
            int passengersCount = 0;

            if (request.Request.Passengers.AdultCount != null)
                passengersCount += (int)request.Request.Passengers.AdultCount;

            if (request.Request.Passengers.ChildCount != null)
                passengersCount += (int)request.Request.Passengers.ChildCount;

            if (request.Request.Passengers.InfantInLapCount != null)
                passengersCount += (int)request.Request.Passengers.InfantInLapCount;

            if (request.Request.Passengers.InfantInSeatCount != null)
                passengersCount += (int)request.Request.Passengers.InfantInSeatCount;

            if (request.Request.Passengers.SeniorCount != null)
                passengersCount += (int)request.Request.Passengers.SeniorCount;

            return passengersCount;
        }