aboutsummaryrefslogtreecommitdiff
path: root/src/Enmarcha.Backend/Controllers/VigoController.cs
diff options
context:
space:
mode:
authorAriel Costas Guerrero <ariel@costas.dev>2025-12-29 00:41:52 +0100
committerAriel Costas Guerrero <ariel@costas.dev>2025-12-29 00:41:52 +0100
commita304c24b32c0327436bbd8c2853e60668e161b42 (patch)
tree08f65c05daca134cf4d2e4f779bd15d98fd66370 /src/Enmarcha.Backend/Controllers/VigoController.cs
parent120a3c6bddd0fb8d9fa05df4763596956554c025 (diff)
Rename a lot of stuff, add Santiago real time
Diffstat (limited to 'src/Enmarcha.Backend/Controllers/VigoController.cs')
-rw-r--r--src/Enmarcha.Backend/Controllers/VigoController.cs69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/Enmarcha.Backend/Controllers/VigoController.cs b/src/Enmarcha.Backend/Controllers/VigoController.cs
new file mode 100644
index 0000000..4199251
--- /dev/null
+++ b/src/Enmarcha.Backend/Controllers/VigoController.cs
@@ -0,0 +1,69 @@
+using Costasdev.VigoTransitApi;
+using Enmarcha.Backend.Configuration;
+using Enmarcha.Backend.Services;
+using Enmarcha.Backend.Services.Providers;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Options;
+
+namespace Enmarcha.Backend.Controllers;
+
+[ApiController]
+[Route("api/vigo")]
+public partial class VigoController : ControllerBase
+{
+ private readonly ILogger<VigoController> _logger;
+ private readonly VigoTransitApiClient _api;
+ private readonly AppConfiguration _configuration;
+ private readonly ShapeTraversalService _shapeService;
+ private readonly VitrasaTransitProvider _vitrasaProvider;
+ private readonly RenfeTransitProvider _renfeProvider;
+
+ public VigoController(
+ HttpClient http,
+ IOptions<AppConfiguration> options,
+ ILogger<VigoController> logger,
+ ShapeTraversalService shapeService,
+ VitrasaTransitProvider vitrasaProvider,
+ RenfeTransitProvider renfeProvider)
+ {
+ _logger = logger;
+ _api = new VigoTransitApiClient(http);
+ _configuration = options.Value;
+ _shapeService = shapeService;
+ _vitrasaProvider = vitrasaProvider;
+ _renfeProvider = renfeProvider;
+ }
+
+ [HttpGet("GetConsolidatedCirculations")]
+ public async Task<IActionResult> GetConsolidatedCirculations(
+ [FromQuery] string stopId
+ )
+ {
+ // Use Europe/Madrid timezone consistently to avoid UTC/local skew
+ var tz = TimeZoneInfo.FindSystemTimeZoneById("Europe/Madrid");
+ var nowLocal = TimeZoneInfo.ConvertTime(DateTime.UtcNow, tz);
+
+ ITransitProvider provider;
+ string effectiveStopId;
+
+ if (stopId.StartsWith("renfe:"))
+ {
+ provider = _renfeProvider;
+ effectiveStopId = stopId.Substring("renfe:".Length);
+ }
+ else if (stopId.StartsWith("vitrasa:"))
+ {
+ provider = _vitrasaProvider;
+ effectiveStopId = stopId.Substring("vitrasa:".Length);
+ }
+ else
+ {
+ // Legacy/Default
+ provider = _vitrasaProvider;
+ effectiveStopId = stopId;
+ }
+
+ var result = await provider.GetCirculationsAsync(effectiveStopId, nowLocal);
+ return Ok(result);
+ }
+}