aboutsummaryrefslogtreecommitdiff
path: root/src/Enmarcha.Backend/Controllers/TransitController.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Enmarcha.Backend/Controllers/TransitController.cs')
-rw-r--r--src/Enmarcha.Backend/Controllers/TransitController.cs24
1 files changed, 22 insertions, 2 deletions
diff --git a/src/Enmarcha.Backend/Controllers/TransitController.cs b/src/Enmarcha.Backend/Controllers/TransitController.cs
index 4853e66..a0b8e39 100644
--- a/src/Enmarcha.Backend/Controllers/TransitController.cs
+++ b/src/Enmarcha.Backend/Controllers/TransitController.cs
@@ -7,6 +7,7 @@ using Enmarcha.Backend.Types.Transit;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Options;
+using System.Globalization;
namespace Enmarcha.Backend.Controllers;
@@ -83,12 +84,31 @@ public class TransitController : ControllerBase
}
[HttpGet("routes/{id}")]
- public async Task<ActionResult<RouteDetailsDto>> GetRouteDetails(string id)
+ public async Task<ActionResult<RouteDetailsDto>> GetRouteDetails(
+ string id,
+ [FromQuery] string? date
+ )
{
using var activity = Telemetry.Source.StartActivity("GetRouteDetails");
activity?.SetTag("route.id", id);
- var serviceDate = DateTime.Now.ToString("yyyy-MM-dd");
+ string serviceDate;
+ if (!string.IsNullOrWhiteSpace(date))
+ {
+ if (!DateOnly.TryParseExact(date, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out var parsedDate))
+ {
+ return BadRequest("Invalid date. Use yyyy-MM-dd.");
+ }
+
+ serviceDate = parsedDate.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);
+ }
+ else
+ {
+ var tz = TimeZoneInfo.FindSystemTimeZoneById("Europe/Madrid");
+ var nowLocal = TimeZoneInfo.ConvertTime(DateTime.UtcNow, tz);
+ serviceDate = nowLocal.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);
+ }
+
var cacheKey = $"route_details_{id}_{serviceDate}";
var cacheHit = _cache.TryGetValue(cacheKey, out RouteDetailsDto? cachedDetails);