aboutsummaryrefslogtreecommitdiff
path: root/src/Enmarcha.Backend/Controllers
diff options
context:
space:
mode:
authorAriel Costas Guerrero <ariel@costas.dev>2026-01-02 01:08:41 +0100
committerAriel Costas Guerrero <ariel@costas.dev>2026-01-02 01:08:41 +0100
commita3eb2d0441ae18f75604a4bee64db18391469837 (patch)
tree8994c1987afdd9436ba0699236439d3eb6c3f04d /src/Enmarcha.Backend/Controllers
parentdd544d713a2af4713c61ae0d2050f2861cc0892a (diff)
feat: Integrate Geoapify geocoding service and update configuration
Diffstat (limited to 'src/Enmarcha.Backend/Controllers')
-rw-r--r--src/Enmarcha.Backend/Controllers/ArrivalsController.cs7
-rw-r--r--src/Enmarcha.Backend/Controllers/RoutePlannerController.cs13
-rw-r--r--src/Enmarcha.Backend/Controllers/TransitController.cs1
-rw-r--r--src/Enmarcha.Backend/Controllers/VigoController.cs69
4 files changed, 8 insertions, 82 deletions
diff --git a/src/Enmarcha.Backend/Controllers/ArrivalsController.cs b/src/Enmarcha.Backend/Controllers/ArrivalsController.cs
index 7260fb4..a23c69c 100644
--- a/src/Enmarcha.Backend/Controllers/ArrivalsController.cs
+++ b/src/Enmarcha.Backend/Controllers/ArrivalsController.cs
@@ -1,4 +1,4 @@
-using System.Net;
+using System.Net;
using Enmarcha.Sources.OpenTripPlannerGql;
using Enmarcha.Sources.OpenTripPlannerGql.Queries;
using Enmarcha.Backend.Configuration;
@@ -87,11 +87,6 @@ public partial class ArrivalsController : ControllerBase
continue;
}
- if (item.Trip.Geometry?.Points != null)
- {
- _logger.LogDebug("Trip {TripId} has geometry", item.Trip.GtfsId);
- }
-
// Calculate departure time using the service day in the feed's timezone (Europe/Madrid)
// This ensures we treat ScheduledDepartureSeconds as relative to the local midnight of the service day
var serviceDayLocal = TimeZoneInfo.ConvertTime(DateTimeOffset.FromUnixTimeSeconds(item.ServiceDay), tz);
diff --git a/src/Enmarcha.Backend/Controllers/RoutePlannerController.cs b/src/Enmarcha.Backend/Controllers/RoutePlannerController.cs
index 7a03a24..89f6c59 100644
--- a/src/Enmarcha.Backend/Controllers/RoutePlannerController.cs
+++ b/src/Enmarcha.Backend/Controllers/RoutePlannerController.cs
@@ -3,6 +3,7 @@ using Enmarcha.Sources.OpenTripPlannerGql;
using Enmarcha.Sources.OpenTripPlannerGql.Queries;
using Enmarcha.Backend.Configuration;
using Enmarcha.Backend.Services;
+using Enmarcha.Backend.Services.Geocoding;
using Enmarcha.Backend.Types.Planner;
using FuzzySharp;
using Microsoft.AspNetCore.Mvc;
@@ -57,7 +58,7 @@ public partial class RoutePlannerController : ControllerBase
await Task.WhenAll(nominatimTask, stopsTask);
- var nominatimResults = await nominatimTask;
+ var geocodingResults = await nominatimTask;
var allStops = await stopsTask;
// Fuzzy search stops
@@ -65,14 +66,14 @@ public partial class RoutePlannerController : ControllerBase
query,
allStops.Select(s => s.Name ?? string.Empty),
cutoff: 60
- ).Take(5).Select(r => allStops[r.Index]).ToList();
+ ).Take(4).Select(r => allStops[r.Index]).ToList();
- // Merge results: stops first, then nominatim, deduplicating by coordinates (approx)
- var finalResults = new List<PlannerSearchResult>(fuzzyResults);
+ // Merge results: geocoding first, then stops, deduplicating by coordinates (approx)
+ var finalResults = new List<PlannerSearchResult>(geocodingResults);
- foreach (var res in nominatimResults)
+ foreach (var res in fuzzyResults)
{
- if (!finalResults.Any(f => Math.Abs(f.Lat - res.Lat) < 0.0001 && Math.Abs(f.Lon - res.Lon) < 0.0001))
+ if (!finalResults.Any(f => Math.Abs(f.Lat - res.Lat) < 0.00001 && Math.Abs(f.Lon - res.Lon) < 0.00001))
{
finalResults.Add(res);
}
diff --git a/src/Enmarcha.Backend/Controllers/TransitController.cs b/src/Enmarcha.Backend/Controllers/TransitController.cs
index 62b3725..00e5fb7 100644
--- a/src/Enmarcha.Backend/Controllers/TransitController.cs
+++ b/src/Enmarcha.Backend/Controllers/TransitController.cs
@@ -62,7 +62,6 @@ public class TransitController : ControllerBase
var routes = response.Data.Routes
.Select(_otpService.MapRoute)
- .Where(r => r.TripCount > 0)
.OrderBy(r => r.ShortName, Comparer<string?>.Create(SortingHelper.SortRouteShortNames))
.ToList();
diff --git a/src/Enmarcha.Backend/Controllers/VigoController.cs b/src/Enmarcha.Backend/Controllers/VigoController.cs
deleted file mode 100644
index 4199251..0000000
--- a/src/Enmarcha.Backend/Controllers/VigoController.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-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);
- }
-}