private async Task <IEnumerable <Flight> > GetHotelsAsync(FlightsQuery searchQuery) { var flights = new List <Flight>(); // Filling the flights results manually just for demo purposes for (int i = 1; i <= 5; i++) { var random = new Random(i); Flight flight = new Flight() { Name = $"{searchQuery.Destination} Flight {i}", Source = searchQuery.FlyFrom, Destination = searchQuery.Destination, Rating = random.Next(1, 5), NumberOfReviews = random.Next(0, 5000), PriceStarting = random.Next(80, 450), Image = $"https://placeholdit.imgix.net/~text?txtsize=35&txt=Flights+{i}&w=500&h=260" }; flights.Add(flight); } flights.Sort((h1, h2) => h1.PriceStarting.CompareTo(h2.PriceStarting)); return(flights); }
/// TODO: Populate the credit cards from the JSON private async Task <(IEnumerable <Card> cards, float price)> GetCards(FlightsQuery searchQuery) { CardFinder cardFinder = new CardFinder(); cardFinder.PopulateAirports(); cardFinder.PopulateAirlines(); cardFinder.PopulateCards(); DateTime departureDate = searchQuery.DepartDate; DateTime returnDate = searchQuery.ReturnDate; Location origin = await cardFinder.GetPlace(searchQuery.Origin); Location destination = await cardFinder.GetPlace(searchQuery.Destination); float minPrice = await cardFinder.GetFlightPriceAsync(origin, destination, departureDate, returnDate); List <string> fromAirports = new List <string>(); List <string> toAirports = new List <string>(); cardFinder.AddAirports(fromAirports, origin, searchQuery.Origin); cardFinder.AddAirports(toAirports, destination, searchQuery.Destination); List <Card> creditCards = await cardFinder.GetAwardCreditCards(fromAirports, toAirports); if (minPrice > 0) { creditCards.AddRange(cardFinder.GetCashBackCreditCards(minPrice)); } // Where the recommendation engine comes into play. // Filter for the recommended credit cards. List <Card> recommendedCreditCards = GenerateRecommendations(creditCards); return(cards : recommendedCreditCards, price : minPrice); }
private async Task <IEnumerable <Flight> > GetFlightsAsync(FlightsQuery searchQuery) { var flights = new List <Flight>(); // Filling in the flight details manually for demo purposes... for (int i = 0; i < 5; i++) { var random = new Random(i); Flight flight = new Flight() { DepartureAirport = $"{searchQuery.DepartureCity}", DepartureDateTime = DateTime.Parse(searchQuery.DepartureDate), ReturnAirport = $"{searchQuery.ReturnCity}", ReturnDateTime = DateTime.Parse(searchQuery.ReturnDate), Price = random.Next(80, 450), Image = $"https://placeholdit.imgix.net/~text?txtsize=35&txt=Flight+{i + 1}&w=200&h=100" }; flights.Add(flight); } flights.Sort((f1, f2) => f1.Price.CompareTo(f2.Price)); return(flights); }
public async Task Search(IDialogContext context, IAwaitable <IMessageActivity> activity, LuisResult result) { var message = await activity; await context.PostAsync($"Welcome to the Flights finder! We are analyzing your message: '{message.Text}'..."); EntityRecommendation cityEntityRecommendation; var flightQuery = new FlightsQuery(); if (result.TryFindEntity(EntityGeographyCity, out cityEntityRecommendation)) { cityEntityRecommendation.Type = "Destination"; } var FlightFormsDialog = new FormDialog <FlightsQuery>(flightQuery, this.BuildFlightForm, FormOptions.PromptInStart, result.Entities); context.Call(FlightFormsDialog, this.ResumeAfterFlightFormDialog); }
public async Task SearchFlights(IDialogContext context, IAwaitable <IMessageActivity> activity, LuisResult result) { var message = await activity; var flightsQuery = new FlightsQuery(); EntityRecommendation departureCityEntityRecommendation; if (result.TryFindEntity(EntityDepartureCity, out departureCityEntityRecommendation)) { departureCityEntityRecommendation.Type = "DepartureCity"; } EntityRecommendation arrivalCityEntityRecommendation; if (result.TryFindEntity(EntityArrivalCity, out arrivalCityEntityRecommendation)) { arrivalCityEntityRecommendation.Type = "ReturnCity"; } EntityRecommendation departureDateEntityRecommendation; if (result.TryFindEntity(EntityDepartureDate, out departureDateEntityRecommendation)) { departureDateEntityRecommendation.Type = "DepartureDate"; } EntityRecommendation returnDateEntityRecommendation; if (result.TryFindEntity(EntityReturnDate, out returnDateEntityRecommendation)) { returnDateEntityRecommendation.Type = "ReturnDate"; } var searchFlightsFormDialog = new FormDialog <FlightsQuery>(flightsQuery, this.BuildSearchFlightsForm, FormOptions.PromptInStart, result.Entities); context.Call(searchFlightsFormDialog, this.ResumeAfterSearchFlightsFormDialog); }
public async Task StartAsync(IDialogContext context) { this.flightsQuery = new FlightsQuery(); PromptDialog.Text(context, this.AfterPromptDepartureCity, "Where are you flying from?", "I'm sorry, I don't understand. Please try again.", 3); }