public static FlightSearchResponseDto SearchFlights(string origin, string destination) { //container for search results FlightSearchResponseDto response = new FlightSearchResponseDto(); try { //handle same airoprt search - client may not be checking if (origin.Equals(destination, StringComparison.OrdinalIgnoreCase)) { response.Flights = new List <FlightDto>(); response.Airports = new List <AirportDto>(); response.Airlines = new List <AirlineDto>(); response.UserMessage = "Origin and destination are the same airport."; return(response); } using (DBEntities dbConn = new DBEntities()) { //get flights with matching origin and destination var matchingFlights = FlightProxy.FindFlights(dbConn, origin, destination); //no matching flights if (matchingFlights.Count == 0) { response.Flights = new List <FlightDto>(); response.Airports = new List <AirportDto>(); response.Airlines = new List <AirlineDto>(); response.UserMessage = "No available flights"; return(response); } //return data response.Flights = GetShortestFlightsByDistance(matchingFlights); response.UserMessage = string.Format("{0} flights.", response.Flights.Count); var iataCodes = response.Flights.SelectMany(q => q.Routes.Select(r => r.Destination)).Union(response.Flights.SelectMany(q => q.Routes.Select(r => r.Origin))); var airlinesCodes = response.Flights.SelectMany(q => q.Routes.Select(r => r.Airline)); response.Airports = FlightProxy.GetAirports(dbConn, iataCodes); response.Airlines = FlightProxy.GetAirlines(dbConn, airlinesCodes); } return(response); } catch (Exception ex) { //log ex throw new Exception("Unexpected Error"); } }
public async Task <Result <FlightSearchResponseDto> > SearchAsync(FlightSearchRequestDto request, CancellationToken cancellationToken) { if (request == null) { return(Result.ObjectValidationFail <FlightSearchResponseDto>("Invaid Request")); } if (!request.IsValid()) { return(Result.ObjectValidationFail <FlightSearchResponseDto>(request.Validate())); } var flightSearchEngine = new FlightSearchEngine("skyscanner"); var origin = request.OriginLocation; var destination = request.DestinationLocation; cancellationToken.ThrowIfCancellationRequested(); var result = await flightSearchEngine.SearchAsync( Settings.Skyscanner.APIKey, request.Markets, request.Currency, request.Locale, origin, destination, request.OutboundDate, request.InboundDate, int.Parse(request.Adults.GetEnumDescription()), int.Parse(request.Children.GetEnumDescription()), int.Parse(request.Infants.GetEnumDescription()), request.PriceMinFilter, request.PriceMaxFilter, request.MaxStopsFilter, request.FlightClass.GetEnumDescription(), request.SortType.GetEnumDescription(), request.SortOrder.GetEnumDescription(), request.OutboundDepartureTimeFromFilter, request.OutboundDepartureTimeToFilter, request.OutboundArrivalTimeFromFilter, request.OutboundArrivalTimeToFilter, request.InboundDepartureTimeFromFilter, request.InboundDepartureTimeToFilter, request.InboundArrivalTimeFromFilter, request.InboundArrivalTimeToFilter, cancellationToken).ConfigureAwait(false); var ItineraryDtos = new List <ItineraryDto>(); foreach (Itinerary i in result.FilteredItineraries) { var itinerary = new ItineraryDto().CopyFrom(i); ItineraryDtos.Add(itinerary); } var response = new FlightSearchResponseDto(ItineraryDtos, request.Skip ?? 0, request.Take ?? 10, result.TotalResults); response.Request = request; return(Result.Ok(response)); }