aboutsummaryrefslogtreecommitdiff
path: root/src/Costasdev.Busurbano.Backend/Services/FareService.cs
diff options
context:
space:
mode:
authorAriel Costas Guerrero <ariel@costas.dev>2025-12-28 15:59:32 +0100
committerAriel Costas Guerrero <ariel@costas.dev>2025-12-28 15:59:50 +0100
commit4fb2fe683b75464917dec4b1a0aaee63830f3b9a (patch)
tree40b48d9717061db2bc3434b5db085eeeaae6cd76 /src/Costasdev.Busurbano.Backend/Services/FareService.cs
parent1fd17d4d07d25a810816e4e38ddc31ae72b8c91a (diff)
feat: Refactor NavBar and Planner components; update geocoding services
- Removed unused Navigation2 icon from NavBar. - Updated usePlanner hook to manage route history and improve local storage handling. - Enhanced PlannerApi with new fare properties and improved itinerary handling. - Added recent routes feature in StopList with navigation to planner. - Implemented NominatimGeocodingService for autocomplete and reverse geocoding. - Updated UI components for better user experience and accessibility. - Added translations for recent routes in multiple languages. - Improved CSS styles for map controls and overall layout.
Diffstat (limited to 'src/Costasdev.Busurbano.Backend/Services/FareService.cs')
-rw-r--r--src/Costasdev.Busurbano.Backend/Services/FareService.cs34
1 files changed, 22 insertions, 12 deletions
diff --git a/src/Costasdev.Busurbano.Backend/Services/FareService.cs b/src/Costasdev.Busurbano.Backend/Services/FareService.cs
index d0423e6..c08d1d5 100644
--- a/src/Costasdev.Busurbano.Backend/Services/FareService.cs
+++ b/src/Costasdev.Busurbano.Backend/Services/FareService.cs
@@ -5,7 +5,7 @@ using Microsoft.Extensions.Options;
namespace Costasdev.Busurbano.Backend.Services;
-public record FareResult(decimal CashFareEuro, decimal CardFareEuro);
+public record FareResult(decimal CashFareEuro, bool CashFareIsTotal, decimal CardFareEuro, bool CardFareIsTotal);
public class FareService
{
@@ -41,18 +41,23 @@ public class FareService
if (!transitLegs.Any())
{
- return new FareResult(0, 0);
+ return new FareResult(0, true, 0, true);
}
+ var cashResult = CalculateCashTotal(transitLegs);
+ var cardResult = CalculateCardTotal(transitLegs);
+
return new FareResult(
- CalculateCashTotal(transitLegs),
- CalculateCardTotal(transitLegs)
+ cashResult.Item1, cashResult.Item2,
+ cardResult.Item1, cardResult.Item2
);
}
- private decimal CalculateCashTotal(IEnumerable<Leg> legs)
+ private (decimal, bool) CalculateCashTotal(IEnumerable<Leg> legs)
{
decimal total = 0L;
+ bool allLegsProcessed = true;
+
foreach (var leg in legs)
{
switch (leg.FeedId)
@@ -80,21 +85,25 @@ public class FareService
total += _xuntaFareProvider.GetPrice(leg.From!.ZoneId!, leg.To!.ZoneId!)!.PriceCash;
break;
+ default:
+ allLegsProcessed = false;
+ _logger.LogWarning("Unknown FeedId: {FeedId}", leg.FeedId);
+ break;
}
}
- return total;
+ return (total, allLegsProcessed);
}
- private decimal CalculateCardTotal(IEnumerable<Leg> legs)
+ private (decimal, bool) CalculateCardTotal(IEnumerable<Leg> legs)
{
List<TicketPurchased> wallet = [];
decimal totalCost = 0;
+ bool allLegsProcessed = true;
+
foreach (var leg in legs)
{
- _logger.LogDebug("Processing leg {leg}", leg);
-
int maxMinutes;
int maxUsages;
string? metroArea = null;
@@ -138,6 +147,7 @@ public class FareService
break;
default:
_logger.LogWarning("Unknown FeedId: {FeedId}", leg.FeedId);
+ allLegsProcessed = false;
continue;
}
@@ -193,17 +203,17 @@ public class FareService
}
}
- return totalCost;
+ return (totalCost, allLegsProcessed);
}
}
public class TicketPurchased
{
- public string FeedId { get; set; }
+ public required string FeedId { get; set; }
public DateTime PurchasedAt { get; set; }
public string? MetroArea { get; set; }
- public string StartZone { get; set; }
+ public required string StartZone { get; set; }
public int UsedTimes = 1;
public decimal TotalPaid { get; set; }