aboutsummaryrefslogtreecommitdiff
path: root/src/Costasdev.Busurbano.Backend
diff options
context:
space:
mode:
authorAriel Costas Guerrero <ariel@costas.dev>2025-11-06 18:14:09 +0100
committerAriel Costas Guerrero <ariel@costas.dev>2025-11-06 18:14:09 +0100
commitaae873518de96f9fd0acfd8c03d921dabf02a84a (patch)
treed8b61a46209131ddbe99c2b33f095a22de26024a /src/Costasdev.Busurbano.Backend
parent66758ffaa4238191010ccc3dde7e5cdc6445f315 (diff)
Refactor VigoController to improve real-time and scheduled circulation handling; remove Confidence property from RealTimeData
Diffstat (limited to 'src/Costasdev.Busurbano.Backend')
-rw-r--r--src/Costasdev.Busurbano.Backend/Controllers/VigoController.cs65
-rw-r--r--src/Costasdev.Busurbano.Backend/Types/ConsolidatedCirculation.cs8
2 files changed, 56 insertions, 17 deletions
diff --git a/src/Costasdev.Busurbano.Backend/Controllers/VigoController.cs b/src/Costasdev.Busurbano.Backend/Controllers/VigoController.cs
index 01558b6..3bb1ba0 100644
--- a/src/Costasdev.Busurbano.Backend/Controllers/VigoController.cs
+++ b/src/Costasdev.Busurbano.Backend/Controllers/VigoController.cs
@@ -102,9 +102,10 @@ public class VigoController : ControllerBase
var timetable = timetableTask.Result;
var now = DateTime.Now.AddSeconds(60 - DateTime.Now.Second);
- var endOfScope = now.AddMinutes(
- realTimeEstimates.OrderByDescending(e => e.Minutes).First().Minutes + 10
- );
+ // Define the scope end as the time of the last realtime arrival (no extra buffer)
+ var scopeEnd = realTimeEstimates.Count > 0
+ ? now.AddMinutes(realTimeEstimates.Max(e => e.Minutes))
+ : now;
List<ConsolidatedCirculation> consolidatedCirculations = [];
@@ -161,11 +162,24 @@ public class VigoController : ControllerBase
if (closestCirculation == null)
{
- _logger.LogError("No stop arrival merged for line {Line} towards {Route} in {Minutes} minutes", estimate.Line, estimate.Route, estimate.Minutes);
+ // No scheduled match: include realtime-only entry
+ _logger.LogWarning("No schedule match for realtime line {Line} towards {Route} in {Minutes} minutes", estimate.Line, estimate.Route, estimate.Minutes);
+ consolidatedCirculations.Add(new ConsolidatedCirculation
+ {
+ Line = estimate.Line,
+ Route = estimate.Route,
+ Schedule = null,
+ RealTime = new RealTimeData
+ {
+ Minutes = estimate.Minutes,
+ Distance = estimate.Meters
+ }
+ });
+
+ // Also capture details in debug buffer for diagnostics
outputBuffer.AppendLine("**No circulation matched. List of all of them:**");
foreach (var circulation in possibleCirculations)
{
- // Circulation A 03LP000_008003_16 stopping at 05/11/2025 22:06:00 (diff: -03:29:59.2644092)
outputBuffer.AppendLine(
$"Circulation {circulation.TripId} stopping at {circulation.CallingDateTime()} (diff: {estimatedArrivalTime - circulation.CallingDateTime():HH:mm})");
}
@@ -189,14 +203,47 @@ public class VigoController : ControllerBase
RealTime = new RealTimeData
{
Minutes = estimate.Minutes,
- Distance = estimate.Meters,
- Confidence = closestCirculation.StartingDateTime() <= now
- ? RealTimeConfidence.High
- : RealTimeConfidence.Low
+ Distance = estimate.Meters
}
});
}
+ // Add scheduled-only circulations between now and the last realtime arrival
+ if (scopeEnd > now)
+ {
+ var matchedTripIds = new HashSet<string>(
+ consolidatedCirculations
+ .Where(c => c.Schedule != null)
+ .Select(c => c.Schedule!.TripId)
+ );
+
+ var scheduledWindow = timetable
+ .Where(c => c.CallingDateTime() >= now && c.CallingDateTime() <= scopeEnd)
+ .OrderBy(c => c.CallingDateTime());
+
+ foreach (var sched in scheduledWindow)
+ {
+ if (matchedTripIds.Contains(sched.TripId))
+ {
+ continue; // already represented via a matched realtime
+ }
+
+ consolidatedCirculations.Add(new ConsolidatedCirculation
+ {
+ Line = sched.Line,
+ Route = sched.Route,
+ Schedule = new ScheduleData
+ {
+ Running = sched.StartingDateTime() <= now,
+ Minutes = (int)(sched.CallingDateTime() - now).TotalMinutes,
+ TripId = sched.TripId,
+ ServiceId = sched.ServiceId,
+ },
+ RealTime = null
+ });
+ }
+ }
+
return Ok(consolidatedCirculations);
}
diff --git a/src/Costasdev.Busurbano.Backend/Types/ConsolidatedCirculation.cs b/src/Costasdev.Busurbano.Backend/Types/ConsolidatedCirculation.cs
index d65da61..ed2374f 100644
--- a/src/Costasdev.Busurbano.Backend/Types/ConsolidatedCirculation.cs
+++ b/src/Costasdev.Busurbano.Backend/Types/ConsolidatedCirculation.cs
@@ -13,7 +13,6 @@ public class RealTimeData
{
public required int Minutes { get; set; }
public required int Distance { get; set; }
- public required RealTimeConfidence Confidence { get; set; }
}
public class ScheduleData
@@ -23,10 +22,3 @@ public class ScheduleData
public required string ServiceId { get; set; }
public required string TripId { get; set; }
}
-
-public enum RealTimeConfidence
-{
- NotApplicable = 0,
- Low = 1,
- High = 2
-}