Esempio n. 1
0
        public async Task <IActionResult> LocationAsync([FromQuery] string stationOperator = "", [FromQuery] string[] toc = null)
        {
            try
            {
                var tocFilter = new TocFilter(toc);
                if (tocFilter.HasInvalidTocs)
                {
                    _logger.Information("Invalid tocs provided in request {t}", tocFilter.Tocs);
                    return(await Task.FromResult(
                               BadRequest(new ReferenceError($"Invalid tocs provided in request {tocFilter.Tocs}"))));
                }

                var locations = _data.Locations.Locations.Values;
                locations = string.IsNullOrEmpty(stationOperator)
                    ? locations
                    : locations.Where(s => s.StationOperator.Equals(stationOperator));
                locations = tocFilter.NoFilter
                    ? locations
                    : locations.Where(s => s.TocServices.Any(t => tocFilter.IsValid(t)));
                var model = _mapper.Map <IEnumerable <Timetable.Station>, Model.Station[]>(locations);
                if (model.Any())
                {
                    return(await Task.FromResult(Ok(model)));
                }

                return(await Task.FromResult(
                           NotFound(new ReferenceError($"No stations found. Station Operator: {stationOperator} Toc filter: {tocFilter.Tocs}"))));
            }
            catch (Exception e)
            {
                _logger.Error(e, "Error getting locations");
                return(await Task.FromResult(StatusCode(500, new ReferenceError("Server error"))));
            }
        }
Esempio n. 2
0
        public void SetTocGatherFilter(TocFilter filter, bool addedFilter)
        {
            var noFilter     = Factory.NoFilter;
            var gatherFilter = Factory.ProvidedByToc(filter, noFilter);

            if (addedFilter)
            {
                Assert.NotSame(noFilter, gatherFilter);
            }
            else
            {
                Assert.Same(noFilter, gatherFilter);
            }
        }
Esempio n. 3
0
        public void FilterTocs(TocFilter tocFilter, int expected)
        {
            var source = ComesFromSource;

            ((CifSchedule)source[0].Service.Details).Operator = new Toc("GR");
            ((CifSchedule)source[1].Service.Details).Operator = new Toc("VT");
            ((CifSchedule)source[2].Service.Details).Operator = new Toc("VT");
            ((CifSchedule)source[3].Service.Details).Operator = new Toc("SW");

            var filter = Factory.ProvidedByToc(tocFilter, Factory.NoFilter);

            var results = filter(source).ToArray();

            Assert.Equal(expected, results.Length);
        }
Esempio n. 4
0
        public async Task <IActionResult> Departures(string location, DateTime at, [FromQuery] string to = "",
                                                     [FromQuery] ushort before = 1, [FromQuery] ushort after                    = 5,
                                                     [FromQuery] bool fullDay  = false, [FromQuery] string dayBoundary          = "00:00", [FromQuery] bool includeStops = false,
                                                     [FromQuery] string[] toc  = null, [FromQuery] bool returnCancelledServices = false)
        {
            var tocFilter = new TocFilter(toc);

            if (fullDay)
            {
                return(await FullDayDepartures(location, at.Date, to, includeStops, tocFilter, returnCancelledServices, dayBoundary));
            }

            var request = CreateRequest(location, at, to, before, after, SearchRequest.DEPARTURES, tocFilter);

            return(await Process(request, tocFilter, async() =>
            {
                var config = CreateGatherConfig(request, tocFilter);
                var result = _timetable.FindDepartures(request.Location, at, config);
                return await Task.FromResult(result);
            }, includeStops, returnCancelledServices));
        }
Esempio n. 5
0
        private async Task <IActionResult> FullDayDepartures(string location, DateTime onDate, string to, bool includeStops, TocFilter tocFilter, bool returnCancelledServices, string dayBoundary)
        {
            var request = CreateFullDayRequest(location, onDate, to, SearchRequest.DEPARTURES, tocFilter, dayBoundary);

            return(await Process(request, tocFilter, async() =>
            {
                var boundary = Time.Parse(dayBoundary);
                var filter = CreateFilter(request, tocFilter);
                var result = _timetable.AllDepartures(request.Location, onDate, filter, boundary);
                return await Task.FromResult(result);
            }, includeStops, returnCancelledServices));
        }
Esempio n. 6
0
 protected async Task <IActionResult> Process(SearchRequest request, TocFilter tocFilter, Func <Task <(FindStatus status, ResolvedServiceStop[] services)> > find, bool includeStops, bool returnCancelled)
Esempio n. 7
0
 protected SearchRequest CreateRequest(string location, DateTime at, string toFrom, ushort before, ushort after, string requestType, TocFilter tocs, bool fullDay, string dayBoundary)
 {
     return(new SearchRequest()
     {
         Location = location,
         At = new Window()
         {
             At = at,
             Before = before,
             After = after,
             FullDay = fullDay,
             DayBoundary = dayBoundary
         },
         TocFilter = tocs.Tocs,
         ComingFromGoingTo = toFrom,
         Type = requestType
     });
 }
Esempio n. 8
0
 protected SearchRequest CreateFullDayRequest(string location, DateTime at, string toFrom, string requestType, TocFilter tocs, string dayBoundary)
 {
     return(CreateRequest(location, at, toFrom, 0, 0, requestType, tocs, true, dayBoundary));
 }
Esempio n. 9
0
 protected SearchRequest CreateRequest(string location, DateTime at, string toFrom, ushort before, ushort after, string requestType, TocFilter tocs)
 {
     return(CreateRequest(location, at, toFrom, before, after, requestType, tocs, false, ""));
 }
Esempio n. 10
0
        public void TocFilterGuardValidation(string[] tocs, bool expected)
        {
            var filter = new TocFilter(tocs);

            Assert.Equal(expected, filter.HasInvalidTocs);
        }
Esempio n. 11
0
        public void IsValid(string[] tocs, Toc testToc, bool expected)
        {
            var filter = new TocFilter(tocs);

            Assert.Equal(expected, filter.IsValid(testToc));
        }
Esempio n. 12
0
        public void NoFilter(string[] tocs, bool expected)
        {
            var filter = new TocFilter(tocs);

            Assert.Equal(expected, filter.NoFilter);
        }
Esempio n. 13
0
        public void TocsToFilterString(string[] tocs, string expected)
        {
            var filter = new TocFilter(tocs);

            Assert.Equal(expected, filter.Tocs);
        }