diff options
Diffstat (limited to 'src/Enmarcha.Backend')
| -rw-r--r-- | src/Enmarcha.Backend/Enmarcha.Backend.csproj | 2 | ||||
| -rw-r--r-- | src/Enmarcha.Backend/Program.cs | 6 | ||||
| -rw-r--r-- | src/Enmarcha.Backend/Services/FeedService.cs | 1 | ||||
| -rw-r--r-- | src/Enmarcha.Backend/Services/Processors/RenfeRealTimeProcessor.cs | 72 | ||||
| -rw-r--r-- | src/Enmarcha.Backend/Services/Processors/TussaRealTimeProcessor.cs (renamed from src/Enmarcha.Backend/Services/Processors/SantiagoRealTimeProcessor.cs) | 8 | ||||
| -rw-r--r-- | src/Enmarcha.Backend/Services/Processors/VitrasaUsageProcessor.cs (renamed from src/Enmarcha.Backend/Services/Processors/VigoUsageProcessor.cs) | 8 |
6 files changed, 86 insertions, 11 deletions
diff --git a/src/Enmarcha.Backend/Enmarcha.Backend.csproj b/src/Enmarcha.Backend/Enmarcha.Backend.csproj index 3ce20ad..d2c5a28 100644 --- a/src/Enmarcha.Backend/Enmarcha.Backend.csproj +++ b/src/Enmarcha.Backend/Enmarcha.Backend.csproj @@ -12,7 +12,6 @@ <ItemGroup> <PackageReference Include="Costasdev.VigoTransitApi" /> - <PackageReference Include="Google.Protobuf" /> <PackageReference Include="ProjNet" /> <PackageReference Include="NetTopologySuite" /> @@ -33,6 +32,7 @@ <ProjectReference Include="..\Enmarcha.Sources.OpenTripPlannerGql\Enmarcha.Sources.OpenTripPlannerGql.csproj" /> <ProjectReference Include="..\Enmarcha.Sources.TranviasCoruna\Enmarcha.Sources.TranviasCoruna.csproj" /> <ProjectReference Include="..\Enmarcha.Sources.Tussa\Enmarcha.Sources.Tussa.csproj" /> + <ProjectReference Include="..\Enmarcha.Sources.GtfsRealtime\Enmarcha.Sources.GtfsRealtime.csproj" /> </ItemGroup> <ItemGroup> diff --git a/src/Enmarcha.Backend/Program.cs b/src/Enmarcha.Backend/Program.cs index e8a7968..46383b0 100644 --- a/src/Enmarcha.Backend/Program.cs +++ b/src/Enmarcha.Backend/Program.cs @@ -126,9 +126,10 @@ builder.Services.AddSingleton<FareService>(); builder.Services.AddScoped<IArrivalsProcessor, VitrasaRealTimeProcessor>(); builder.Services.AddScoped<IArrivalsProcessor, CorunaRealTimeProcessor>(); -builder.Services.AddScoped<IArrivalsProcessor, SantiagoRealTimeProcessor>(); +builder.Services.AddScoped<IArrivalsProcessor, TussaRealTimeProcessor>(); builder.Services.AddScoped<IArrivalsProcessor, CtagShuttleRealTimeProcessor>(); -builder.Services.AddScoped<IArrivalsProcessor, VigoUsageProcessor>(); +builder.Services.AddScoped<IArrivalsProcessor, VitrasaUsageProcessor>(); +builder.Services.AddScoped<IArrivalsProcessor, RenfeRealTimeProcessor>(); builder.Services.AddScoped<IArrivalsProcessor, FilterAndSortProcessor>(); builder.Services.AddScoped<IArrivalsProcessor, NextStopsProcessor>(); @@ -143,6 +144,7 @@ builder.Services.AddHttpClient<OtpService>(); builder.Services.AddHttpClient<Enmarcha.Sources.TranviasCoruna.CorunaRealtimeEstimatesProvider>(); builder.Services.AddHttpClient<Enmarcha.Sources.Tussa.SantiagoRealtimeEstimatesProvider>(); builder.Services.AddHttpClient<Enmarcha.Sources.CtagShuttle.CtagShuttleRealtimeEstimatesProvider>(); +builder.Services.AddHttpClient<Enmarcha.Sources.GtfsRealtime.GtfsRealtimeEstimatesProvider>(); builder.Services.AddHttpClient<Costasdev.VigoTransitApi.VigoTransitApiClient>(); var app = builder.Build(); diff --git a/src/Enmarcha.Backend/Services/FeedService.cs b/src/Enmarcha.Backend/Services/FeedService.cs index 34bc522..dc016b4 100644 --- a/src/Enmarcha.Backend/Services/FeedService.cs +++ b/src/Enmarcha.Backend/Services/FeedService.cs @@ -207,6 +207,7 @@ public class FeedService return feedId switch { "xunta" => string.Join(" > ", nextStops), + "renfe" => string.Join(" - ", nextStops), _ => string.Join(", ", nextStops.Take(4)) }; } diff --git a/src/Enmarcha.Backend/Services/Processors/RenfeRealTimeProcessor.cs b/src/Enmarcha.Backend/Services/Processors/RenfeRealTimeProcessor.cs new file mode 100644 index 0000000..dcddd5d --- /dev/null +++ b/src/Enmarcha.Backend/Services/Processors/RenfeRealTimeProcessor.cs @@ -0,0 +1,72 @@ +using Enmarcha.Backend.Types; +using Enmarcha.Backend.Types.Arrivals; +using Enmarcha.Sources.GtfsRealtime; +using Arrival = Enmarcha.Backend.Types.Arrivals.Arrival; + +namespace Enmarcha.Backend.Services.Processors; + +public class RenfeRealTimeProcessor : AbstractRealTimeProcessor +{ + private readonly GtfsRealtimeEstimatesProvider _realtime; + private readonly ILogger<RenfeRealTimeProcessor> _logger; + + public RenfeRealTimeProcessor( + GtfsRealtimeEstimatesProvider realtime, + ILogger<RenfeRealTimeProcessor> logger + ) + { + _realtime = realtime; + _logger = logger; + } + + public override async Task ProcessAsync(ArrivalsContext context) + { + if (!context.StopId.StartsWith("renfe:")) return; + + try + { + var delays = await _realtime.GetRenfeDelays(); + var positions = await _realtime.GetRenfePositions(); + System.Diagnostics.Activity.Current?.SetTag("realtime.count", delays.Count); + + foreach (Arrival contextArrival in context.Arrivals) + { + var trainNumber = contextArrival.TripId.Split(":")[1][..5]; + + contextArrival.Headsign.Destination = trainNumber + " - " + contextArrival.Headsign.Destination; + + if (delays.TryGetValue(trainNumber, out var delay)) + { + if (delay is null) + { + // TODO: Indicate train got cancelled + continue; + } + + var delayMinutes = delay.Value / 60; + contextArrival.Delay = new DelayBadge() + { + Minutes = delayMinutes + }; + + contextArrival.Estimate.Minutes += delayMinutes; + contextArrival.Estimate.Precision = ArrivalPrecision.Confident; + } + + if (positions.TryGetValue(trainNumber, out var position)) + { + contextArrival.CurrentPosition = new Position + { + Latitude = position.Latitude, + Longitude = position.Longitude, + OrientationDegrees = 0 // TODO: Set the proper degrees + }; + } + } + } + catch (Exception ex) + { + _logger.LogError(ex, "Error fetching Renfe real-time data"); + } + } +} diff --git a/src/Enmarcha.Backend/Services/Processors/SantiagoRealTimeProcessor.cs b/src/Enmarcha.Backend/Services/Processors/TussaRealTimeProcessor.cs index a4f7d5b..7808a3f 100644 --- a/src/Enmarcha.Backend/Services/Processors/SantiagoRealTimeProcessor.cs +++ b/src/Enmarcha.Backend/Services/Processors/TussaRealTimeProcessor.cs @@ -5,16 +5,16 @@ using Arrival = Enmarcha.Backend.Types.Arrivals.Arrival; namespace Enmarcha.Backend.Services.Processors; -public class SantiagoRealTimeProcessor : AbstractRealTimeProcessor +public class TussaRealTimeProcessor : AbstractRealTimeProcessor { private readonly SantiagoRealtimeEstimatesProvider _realtime; private readonly FeedService _feedService; - private readonly ILogger<SantiagoRealTimeProcessor> _logger; + private readonly ILogger<TussaRealTimeProcessor> _logger; - public SantiagoRealTimeProcessor( + public TussaRealTimeProcessor( SantiagoRealtimeEstimatesProvider realtime, FeedService feedService, - ILogger<SantiagoRealTimeProcessor> logger) + ILogger<TussaRealTimeProcessor> logger) { _realtime = realtime; _feedService = feedService; diff --git a/src/Enmarcha.Backend/Services/Processors/VigoUsageProcessor.cs b/src/Enmarcha.Backend/Services/Processors/VitrasaUsageProcessor.cs index 52218d9..a2f90d3 100644 --- a/src/Enmarcha.Backend/Services/Processors/VigoUsageProcessor.cs +++ b/src/Enmarcha.Backend/Services/Processors/VitrasaUsageProcessor.cs @@ -4,17 +4,17 @@ using Microsoft.Extensions.Caching.Memory; namespace Enmarcha.Backend.Services.Processors; -public class VigoUsageProcessor : IArrivalsProcessor +public class VitrasaUsageProcessor : IArrivalsProcessor { private readonly HttpClient _httpClient; private readonly IMemoryCache _cache; - private readonly ILogger<VigoUsageProcessor> _logger; + private readonly ILogger<VitrasaUsageProcessor> _logger; private readonly FeedService _feedService; - public VigoUsageProcessor( + public VitrasaUsageProcessor( HttpClient httpClient, IMemoryCache cache, - ILogger<VigoUsageProcessor> logger, + ILogger<VitrasaUsageProcessor> logger, FeedService feedService) { _httpClient = httpClient; |
