diff options
| author | Ariel Costas Guerrero <ariel@costas.dev> | 2025-12-22 14:13:45 +0100 |
|---|---|---|
| committer | Ariel Costas Guerrero <ariel@costas.dev> | 2025-12-22 14:13:53 +0100 |
| commit | 91f7d7dd5a4ca8453cfdbc9a3beeb216b6638ef7 (patch) | |
| tree | f9d036a5b692aa10bb61b7a8ccc30c58f29a79f2 /src/Costasdev.Busurbano.Backend/Controllers/ArrivalsController.cs | |
| parent | 4e583cc587f9b8cc159cedeb63af2f38d5451507 (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.cs | 52 |
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); + } +} |
