public List <Flight> GetFlightsDepartingAfter(DateTime departureDatetime) { var flights = _flightBuilder.GetFlights(); var flightResults = new List <Flight>(); foreach (var flight in flights) { bool valid = true; foreach (var segment in flight.Segments) { if (segment.DepartureDate < departureDatetime) { valid = false; } } if (valid) { flightResults.Add(flight); } } return(flightResults); }
public void TestDepartBeforeCurrentTime() { //act List <Flight> finalFlights = flightBuilderOperations.GetFilteredFlights(flightBuilder.GetFlights().ToList()); //Assert foreach (var flight in finalFlights) { Assert.IsTrue(flight.Segments.Where(x => (x.DepartureDate > x.ArrivalDate)).Count() == 0); } }
public IActionResult FindFlights([FromBody] FilterRequestModel requestModel) { var validresult = IsFilterValid(requestModel); if (validresult.IsValid) { //fetch flight data var flights = _flightBuider.GetFlights(); //filter flights that have not already departed based on provided departure date, if null use now var query = flights.Where(x => !x.Segments.Any(x => x.DepartureDate < (requestModel.DepartureDateStart ?? DateTime.Now))); //fliter flights that have arrival before departed dates, I assume these are invalid flights so we always want to filter these out query = query.Where(x => !x.Segments.Any(x => x.ArrivalDate < x.DepartureDate)); //flights that have not grounded longer than combined grounded hours range provide, default to 2 if not provided query = query.Where(x => x.Segments.Count > 1 ? ( x.Segments.Select((i, index) => { return(new { hours = x.Segments.Skip(index + 1).FirstOrDefault()?.DepartureDate.Subtract(i.ArrivalDate).TotalHours }); }).Select(x => x.hours).Sum() <= (requestModel.GroundedHours ?? 2) ) : true); validresult.Result = query.ToList(); return(Ok(validresult)); } return(BadRequest(validresult)); }
public FlightService(IFlightBuilder flightBuilder) { _flightBuilder = flightBuilder; _flights = _flightBuilder.GetFlights()? .EnforceSegmentsOrderByDeparture() .RemoveEmptyFligths() .ToList(); }
public int RunWorker() { try { Console.WriteLine($"**********Программа фильтрации списка авиа перелетов**********{Environment.NewLine}"); Console.WriteLine($"Список авиа перелетов:{Environment.NewLine}"); var flights = _flightBuilder.GetFlights(); _filterHandler.Print(flights); Console.WriteLine($"Доступные фильтры для исключения из списка авиа перелетов:{Environment.NewLine}"); foreach (var item in _filterBuilder.GetFilters()) { Console.WriteLine($"{item.Key} - {item.Value}"); } Console.WriteLine(); var input = string.Empty; do { Console.WriteLine(@"Введите номер фильтрации или ""q"" для выхода из программы: "); input = Console.ReadLine(); if (int.TryParse(input, out int key)) { var filteredFlights = _filterHandler.GetFilteredValues(key, flights); if (filteredFlights != null) { _filterHandler.Print(filteredFlights); } } } while (!input.Equals("q", StringComparison.OrdinalIgnoreCase)); return(1); } catch (ArgumentNullException ax) { Console.WriteLine($"{ax.Message}"); return(-1); } catch (Exception ex) { Console.WriteLine($"{ex.Message}"); return(-1); } }
protected override Task ExecuteAsync(CancellationToken stoppingToken) { var filters = new Filter[] { new DepartsBeforeCurrentTimeFilter(), new ArrivalDateBeforeDepartureDateFilter(), new OverTwoHoursOnTheGroundFilter(), }; var flights = _filterService.Filter(_flightBuilder.GetFlights(), filters); foreach (var item in flights) { _log.LogInformation(item.Description); } return(Task.CompletedTask); }
public IList <Flight> GetFlights() { return(service.GetFlights()); }
//method returning the valid flights after the checks are done. public IList <Flight> GetValidFlights() { var flights = _flightBuilder.GetFlights(); return(flights.Where(f => IsValid(f)).ToList()); }