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")))); } }
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); } }
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); }
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)); }
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)); }
protected async Task <IActionResult> Process(SearchRequest request, TocFilter tocFilter, Func <Task <(FindStatus status, ResolvedServiceStop[] services)> > find, bool includeStops, bool returnCancelled)
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 }); }
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)); }
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, "")); }
public void TocFilterGuardValidation(string[] tocs, bool expected) { var filter = new TocFilter(tocs); Assert.Equal(expected, filter.HasInvalidTocs); }
public void IsValid(string[] tocs, Toc testToc, bool expected) { var filter = new TocFilter(tocs); Assert.Equal(expected, filter.IsValid(testToc)); }
public void NoFilter(string[] tocs, bool expected) { var filter = new TocFilter(tocs); Assert.Equal(expected, filter.NoFilter); }
public void TocsToFilterString(string[] tocs, string expected) { var filter = new TocFilter(tocs); Assert.Equal(expected, filter.Tocs); }