예제 #1
0
        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);
        }
예제 #2
0
        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);
            }
        }
예제 #3
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));
        }
예제 #4
0
 public FlightService(IFlightBuilder flightBuilder)
 {
     _flightBuilder = flightBuilder;
     _flights       = _flightBuilder.GetFlights()?
                      .EnforceSegmentsOrderByDeparture()
                      .RemoveEmptyFligths()
                      .ToList();
 }
예제 #5
0
        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);
            }
        }
예제 #6
0
        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);
        }
예제 #7
0
 public IList <Flight> GetFlights()
 {
     return(service.GetFlights());
 }
예제 #8
0
        //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());
        }