public IEnumerable <Flight> GetFlights(FlightSearchParams flightSearchParam, FlightSerachFilter flightSerachFilter)
        {
            IEnumerable <Flight> flightsResponse = null;

            try
            {
                FlightApiSearchParams flightApiSearchParam = new FlightApiSearchParams();
                flightApiSearchParam.DestinationPlace = flightSearchParam.DestinationPlace;
                flightApiSearchParam.InboundDate      = flightSearchParam.InboundDate;
                flightApiSearchParam.OutboundDate     = flightSearchParam.OutboundDate;
                FlightsRetriever flightsRetriever = new FlightsRetriever();
                List <Flight>    flights          = flightsRetriever.GetFlightsBySearchParams(flightSearchParam.DestinationPlace, flightSearchParam.InboundDate, flightSearchParam.OutboundDate).ToList();
                // check if flights exist in db
                if (flights.Any() == false)
                {
                    log.Info(string.Format("Flights with params : {0},{1},{2} not exist in db ", flightSearchParam.DestinationPlace, flightSearchParam.OutboundDate.ToString("dd/MM/yyyy"), flightSearchParam.InboundDate.ToString("dd/MM/yyyy")));
                    string            sessionId         = this.CreateSession(flightApiSearchParam);
                    FlightApiResponse flightApiResponse = this.PullSessionResult(sessionId);
                    flights = this.ConvertFlightApiResponseToFlight(flightApiResponse, flightSearchParam.DestinationPlace, flightSearchParam.InboundDate, flightSearchParam.OutboundDate).ToList();
                    // store flight in db
                    flightsRetriever.InsertFlights(flights);
                }
                else
                {
                    log.Info(string.Format("Flights with params : {0},{1},{2} found in db ", flightSearchParam.DestinationPlace, flightSearchParam.OutboundDate.ToString("dd/MM/yyyy"), flightSearchParam.InboundDate.ToString("dd/MM/yyyy")));
                }
                FlightFilterProcessor flightFilterProcessor = new FlightFilterProcessor();
                flightsResponse = flightFilterProcessor.FilterFlights(flights, flightSerachFilter);
            }
            catch (Exception e)
            {
                log.Info(string.Format("GetFlights error with params : {0},{1},{2}   ", flightSearchParam.DestinationPlace, flightSearchParam.InboundDate.ToString("dd/MM/yyyy"), flightSearchParam.OutboundDate.ToString("dd/MM/yyyy")));
                log.Error(string.Format("Error is : {0} stack trace is : {1} ", e.Message, e.StackTrace));
            }
            return(flightsResponse);
        }
 public IEnumerable <Flight> FilterFlights(IEnumerable <Flight> flight, FlightSerachFilter FlightSerachFilter)
 {
     return(flight.OrderBy(f => f.Price).Take(3));
 }