diff options
Diffstat (limited to 'src/Costasdev.Busurbano.Backend')
| -rw-r--r-- | src/Costasdev.Busurbano.Backend/Controllers/ArrivalsController.cs | 28 | ||||
| -rw-r--r-- | src/Costasdev.Busurbano.Backend/GraphClient/App/ArrivalsAtStop.cs | 4 |
2 files changed, 16 insertions, 16 deletions
diff --git a/src/Costasdev.Busurbano.Backend/Controllers/ArrivalsController.cs b/src/Costasdev.Busurbano.Backend/Controllers/ArrivalsController.cs index 6b90f20..2ddbcd1 100644 --- a/src/Costasdev.Busurbano.Backend/Controllers/ArrivalsController.cs +++ b/src/Costasdev.Busurbano.Backend/Controllers/ArrivalsController.cs @@ -88,13 +88,6 @@ public partial class ArrivalsController : ControllerBase var minutesToArrive = (int)(departureTime - nowLocal).TotalMinutes; //var isRunning = departureTime < nowLocal; - // TODO: Handle this properly, since many times it's "tomorrow" but not handled properly - var threshold = ShouldFetchPastArrivals(id) ? ArrivalsAtStopContent.PastArrivalMinutesIncluded : 0; - if (minutesToArrive < threshold) - { - continue; - } - Arrival arrival = new() { TripId = item.Trip.GtfsId, @@ -132,6 +125,9 @@ public partial class ArrivalsController : ControllerBase var feedId = id.Split(':')[0]; + // Time after an arrival's time to still include it in the response. This is useful without real-time data, for delayed buses. + var timeThreshold = GetThresholdForFeed(id); + return Ok(new StopArrivalsResponse { StopCode = _feedService.NormalizeStopCode(feedId, stop.Code), @@ -141,7 +137,7 @@ public partial class ArrivalsController : ControllerBase Latitude = stop.Lat, Longitude = stop.Lon }, - Routes = stop.Routes + Routes = [.. stop.Routes .OrderBy( r => r.ShortName, Comparer<string?>.Create(SortingHelper.SortRouteShortNames) @@ -152,16 +148,22 @@ public partial class ArrivalsController : ControllerBase ShortName = _feedService.NormalizeRouteShortName(feedId, r.ShortName ?? ""), Colour = r.Color ?? "FFFFFF", TextColour = r.TextColor ?? "000000" - }) - .ToList(), - Arrivals = arrivals + })], + Arrivals = [.. arrivals.Where(a => a.Estimate.Minutes >= timeThreshold)] }); + } - private static bool ShouldFetchPastArrivals(string id) + private static int GetThresholdForFeed(string id) { string feedId = id.Split(':', 2)[0]; - return feedId == "xunta"; + + if (feedId == "vitrasa" || feedId == "coruna") + { + return 0; + } + + return -30; } [LoggerMessage(LogLevel.Error, "Error fetching stop data, received {statusCode} {responseBody}")] diff --git a/src/Costasdev.Busurbano.Backend/GraphClient/App/ArrivalsAtStop.cs b/src/Costasdev.Busurbano.Backend/GraphClient/App/ArrivalsAtStop.cs index a349f9a..10235de 100644 --- a/src/Costasdev.Busurbano.Backend/GraphClient/App/ArrivalsAtStop.cs +++ b/src/Costasdev.Busurbano.Backend/GraphClient/App/ArrivalsAtStop.cs @@ -5,13 +5,11 @@ namespace Costasdev.Busurbano.Backend.GraphClient.App; public class ArrivalsAtStopContent : IGraphRequest<ArrivalsAtStopContent.Args> { - public const int PastArrivalMinutesIncluded = -75; - public record Args(string Id, bool Reduced); public static string Query(Args args) { - var startTime = DateTimeOffset.UtcNow.AddMinutes(PastArrivalMinutesIncluded); + var startTime = DateTimeOffset.UtcNow.AddMinutes(-75); var startTimeUnix = startTime.ToUnixTimeSeconds(); var geometryField = args.Reduced ? "" : @"tripGeometry { points }"; |
