aboutsummaryrefslogtreecommitdiff
path: root/src/Costasdev.Busurbano.Backend/Controllers/ArrivalsController.cs
diff options
context:
space:
mode:
authorAriel Costas Guerrero <ariel@costas.dev>2025-12-22 14:13:45 +0100
committerAriel Costas Guerrero <ariel@costas.dev>2025-12-22 14:13:53 +0100
commit91f7d7dd5a4ca8453cfdbc9a3beeb216b6638ef7 (patch)
treef9d036a5b692aa10bb61b7a8ccc30c58f29a79f2 /src/Costasdev.Busurbano.Backend/Controllers/ArrivalsController.cs
parent4e583cc587f9b8cc159cedeb63af2f38d5451507 (diff)
Implement fetching scheduled arrivals for stop
Diffstat (limited to 'src/Costasdev.Busurbano.Backend/Controllers/ArrivalsController.cs')
-rw-r--r--src/Costasdev.Busurbano.Backend/Controllers/ArrivalsController.cs52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/Costasdev.Busurbano.Backend/Controllers/ArrivalsController.cs b/src/Costasdev.Busurbano.Backend/Controllers/ArrivalsController.cs
new file mode 100644
index 0000000..eb81784
--- /dev/null
+++ b/src/Costasdev.Busurbano.Backend/Controllers/ArrivalsController.cs
@@ -0,0 +1,52 @@
+using Costasdev.Busurbano.Backend.GraphClient;
+using Costasdev.Busurbano.Backend.GraphClient.App;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Caching.Memory;
+
+namespace Costasdev.Busurbano.Backend.Controllers;
+
+[ApiController]
+[Route("api")]
+public class ArrivalsController : ControllerBase
+{
+ private readonly ILogger<ArrivalsController> _logger;
+ private readonly IMemoryCache _cache;
+ private readonly HttpClient _httpClient;
+
+ public ArrivalsController(
+ ILogger<ArrivalsController> logger,
+ IMemoryCache cache,
+ HttpClient httpClient
+ )
+ {
+ _logger = logger;
+ _cache = cache;
+ _httpClient = httpClient;
+ }
+
+ [HttpGet("arrivals")]
+ public async Task<IActionResult> GetArrivals(string id)
+ {
+ var requestContent = ArrivalsAtStopContent.Query(id);
+ var request = new HttpRequestMessage(HttpMethod.Post, "http://100.67.54.115:3957/otp/gtfs/v1");
+ request.Content = JsonContent.Create(new GraphClientRequest
+ {
+ Query = requestContent
+ });
+
+ var response = await _httpClient.SendAsync(request);
+ var responseBody = await response.Content.ReadFromJsonAsync<GraphClientResponse<ArrivalsAtStopResponse>>();
+
+ if (responseBody is not { IsSuccess: true })
+ {
+ _logger.LogError(
+ "Error fetching stop data, received {StatusCode} {ResponseBody}",
+ response.StatusCode,
+ await response.Content.ReadAsStringAsync()
+ );
+ return StatusCode(500, "Error fetching stop data");
+ }
+
+ return Ok(responseBody.Data?.Stop);
+ }
+}