oop_NFS_Andreas/AirlineServer/AirlineServer/Helper/FindFlight.cs

69 lines
2.9 KiB
C#
Raw Normal View History

2018-08-19 14:31:58 +02:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using AirlineServer.Models;
namespace AirlineServer.Helper
{
public static class FindFlight
{
public static Dictionary<string, List<Flight>> Search(
List<Flight> flights,
2018-08-19 14:31:58 +02:00
DateTime startTime,
DateTime endTime,
string destination,
int numberOfSeats)
{
Dictionary<string, List<Flight>> free_flights =
new Dictionary<string, List<Flight>>();
2018-08-19 14:31:58 +02:00
var flightsWithSeats = FindFlight
.FlightsWithSeats(flights, numberOfSeats);
var flightsTo= FindFlight
.FlightsTo(flightsWithSeats, destination, startTime);
2018-08-19 14:31:58 +02:00
var flightsBack = FindFlight
.FlightsBack(flightsWithSeats, flightsTo, endTime);
2018-08-19 14:31:58 +02:00
free_flights.Add("To", flightsTo);
free_flights.Add("From", flightsBack);
2018-08-19 14:31:58 +02:00
return free_flights;
}
private static List<Flight> FlightsWithSeats(
List<Flight> raw_flights,
2018-08-19 14:31:58 +02:00
int numberOfSeats)
{
List<Flight> flights = new List<Flight>();
2018-08-19 14:31:58 +02:00
flights = raw_flights.Where(f => (f.MaxSeats - f.BookedSeats)
> numberOfSeats).ToList();
2018-08-19 14:31:58 +02:00
return flights;
}
private static List<Flight> FlightsTo(IEnumerable<Flight> raw_flights,
2018-08-19 14:31:58 +02:00
string destination,
DateTime startTime)
{
List<Flight> flights = new List<Flight>();
2018-08-19 14:31:58 +02:00
flights = raw_flights.Where(f =>
f.Destination.City.Name == destination
& f.StartTime == startTime).ToList();
2018-08-19 14:31:58 +02:00
return flights;
}
// Since this function searches for a flight back the arguments
// destination and origin get used in reverse.
private static List<Flight> FlightsBack(List<Flight> raw_flights,
List<Flight> flightsTo,
DateTime endTime)
2018-08-19 14:31:58 +02:00
{
List<Flight> flights = new List<Flight>();
foreach (var flight in flightsTo)
{
flights.AddRange(raw_flights.Where(f =>
f.Destination.City.Name == flight.Origin.City.Name
& f.Origin.City.Name == flight.Destination.City.Name
& f.StartTime == endTime).ToList());
}
2018-08-19 14:31:58 +02:00
return flights;
}
}
}