aboutsummaryrefslogtreecommitdiff
path: root/src/Costasdev.Busurbano.Backend
diff options
context:
space:
mode:
Diffstat (limited to 'src/Costasdev.Busurbano.Backend')
-rw-r--r--src/Costasdev.Busurbano.Backend/Controllers/RoutePlannerController.cs2
-rw-r--r--src/Costasdev.Busurbano.Backend/Services/FareService.cs22
-rw-r--r--src/Costasdev.Busurbano.Backend/Services/OtpService.cs3
-rw-r--r--src/Costasdev.Busurbano.Backend/Types/Planner/PlannerResponse.cs3
4 files changed, 24 insertions, 6 deletions
diff --git a/src/Costasdev.Busurbano.Backend/Controllers/RoutePlannerController.cs b/src/Costasdev.Busurbano.Backend/Controllers/RoutePlannerController.cs
index 823cfa5..7d47383 100644
--- a/src/Costasdev.Busurbano.Backend/Controllers/RoutePlannerController.cs
+++ b/src/Costasdev.Busurbano.Backend/Controllers/RoutePlannerController.cs
@@ -78,8 +78,6 @@ public partial class RoutePlannerController : ControllerBase
var response = await _httpClient.SendAsync(request);
var responseBody = await response.Content.ReadFromJsonAsync<GraphClientResponse<PlanConnectionResponse>>();
- Console.WriteLine(responseBody);
-
if (responseBody is not { IsSuccess: true } || responseBody.Data?.PlanConnection.Edges.Length == 0)
{
LogErrorFetchingRoutes(response.StatusCode, await response.Content.ReadAsStringAsync());
diff --git a/src/Costasdev.Busurbano.Backend/Services/FareService.cs b/src/Costasdev.Busurbano.Backend/Services/FareService.cs
index 0e4fefc..9a11a56 100644
--- a/src/Costasdev.Busurbano.Backend/Services/FareService.cs
+++ b/src/Costasdev.Busurbano.Backend/Services/FareService.cs
@@ -20,23 +20,39 @@ public class FareService
var busLegs = legs.Where(l => l.Mode != null && l.Mode.ToUpper() != "WALK").ToList();
// Cash fare logic
- // TODO: In the future, this should depend on the operator/feed
- var cashFare = busLegs.Count * 1.63; // Defaulting to Vitrasa for now
+ double cashFare = 0;
+ foreach (var leg in busLegs)
+ {
+ // TODO: In the future, this should depend on the operator/feed
+ if (leg.FeedId == "vitrasa")
+ {
+ cashFare += 1.63;
+ }
+ else
+ {
+ cashFare += 1.63; // Default fallback
+ }
+ }
// Card fare logic (45-min transfer window)
int cardTicketsRequired = 0;
DateTime? lastTicketPurchased = null;
int tripsPaidWithTicket = 0;
+ string? lastFeedId = null;
foreach (var leg in busLegs)
{
+ // If no ticket purchased, ticket expired (no free transfers after 45 mins), or max trips with ticket reached
+ // Also check if we changed operator (assuming no free transfers between different operators for now)
if (lastTicketPurchased == null ||
(leg.StartTime - lastTicketPurchased.Value).TotalMinutes > 45 ||
- tripsPaidWithTicket >= 3)
+ tripsPaidWithTicket >= 3 ||
+ leg.FeedId != lastFeedId)
{
cardTicketsRequired++;
lastTicketPurchased = leg.StartTime;
tripsPaidWithTicket = 1;
+ lastFeedId = leg.FeedId;
}
else
{
diff --git a/src/Costasdev.Busurbano.Backend/Services/OtpService.cs b/src/Costasdev.Busurbano.Backend/Services/OtpService.cs
index 7eba590..8d47225 100644
--- a/src/Costasdev.Busurbano.Backend/Services/OtpService.cs
+++ b/src/Costasdev.Busurbano.Backend/Services/OtpService.cs
@@ -1,5 +1,4 @@
using System.Globalization;
-using System.Text;
using Costasdev.Busurbano.Backend.Configuration;
using Costasdev.Busurbano.Backend.Helpers;
using Costasdev.Busurbano.Backend.Types.Otp;
@@ -430,6 +429,8 @@ public class OtpService
return new Leg
{
Mode = leg.Mode,
+ FeedId = feedId,
+ RouteId = leg.Route?.GtfsId,
RouteName = leg.Route?.LongName,
RouteShortName = shortName,
RouteLongName = leg.Route?.LongName,
diff --git a/src/Costasdev.Busurbano.Backend/Types/Planner/PlannerResponse.cs b/src/Costasdev.Busurbano.Backend/Types/Planner/PlannerResponse.cs
index b2f4d6a..a4e54d7 100644
--- a/src/Costasdev.Busurbano.Backend/Types/Planner/PlannerResponse.cs
+++ b/src/Costasdev.Busurbano.Backend/Types/Planner/PlannerResponse.cs
@@ -23,6 +23,9 @@ public class Itinerary
public class Leg
{
public string? Mode { get; set; } // WALK, BUS, etc.
+ public string? FeedId { get; set; }
+ public string? RouteId { get; set; }
+ public string? TripId { get; set; }
public string? RouteName { get; set; }
public string? RouteShortName { get; set; }
public string? RouteLongName { get; set; }