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/SantiagoController.cs81
-rw-r--r--src/Costasdev.Busurbano.Backend/VigoController.cs (renamed from src/Costasdev.Busurbano.Backend/GetStopEstimates.cs)6
2 files changed, 84 insertions, 3 deletions
diff --git a/src/Costasdev.Busurbano.Backend/SantiagoController.cs b/src/Costasdev.Busurbano.Backend/SantiagoController.cs
new file mode 100644
index 0000000..51a76c6
--- /dev/null
+++ b/src/Costasdev.Busurbano.Backend/SantiagoController.cs
@@ -0,0 +1,81 @@
+using System.Text.Json;
+using Costasdev.VigoTransitApi.Types;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Caching.Memory;
+
+namespace Costasdev.Busurbano.Backend;
+
+[ApiController]
+[Route("api/santiago")]
+public class SantiagoController : ControllerBase
+{
+ private readonly IMemoryCache _cache;
+ private readonly HttpClient _httpClient;
+
+ public SantiagoController(HttpClient http, IMemoryCache cache)
+ {
+ _cache = cache;
+ _httpClient = http;
+ }
+
+ [HttpGet("GetStopEstimates")]
+ public async Task<IActionResult> Run()
+ {
+ var argumentAvailable = Request.Query.TryGetValue("id", out var requestedStopIdString);
+ if (!argumentAvailable)
+ {
+ return BadRequest("Please provide a stop id as a query parameter with the name 'id'.");
+ }
+
+ var argumentNumber = int.TryParse(requestedStopIdString, out var requestedStopId);
+ if (!argumentNumber)
+ {
+ return BadRequest("The provided stop id is not a valid number.");
+ }
+
+ try
+ {
+ var obj = await _httpClient.GetFromJsonAsync<JsonDocument>(
+ $"https://app.tussa.org/tussa/api/paradas/{requestedStopId}");
+
+ if (obj is null)
+ {
+ return BadRequest("No response returned from the API, or whatever");
+ }
+
+ var root = obj.RootElement;
+
+ List<StopEstimate> estimates = root
+ .GetProperty("lineas")
+ .EnumerateArray()
+ .Select(el => new StopEstimate(
+ el.GetProperty("sinoptico").GetString() ?? string.Empty,
+ el.GetProperty("nombre").GetString() ?? string.Empty,
+ el.GetProperty("minutosProximoPaso").GetInt32(),
+ 0
+ )).ToList();
+
+ return new OkObjectResult(new StopEstimateResponse
+ {
+ Stop = new StopEstimateResponse.StopInfo
+ {
+ Name = root.GetProperty("nombre").GetString() ?? string.Empty,
+ Id = root.GetProperty("id").GetInt32(),
+ Latitude = root.GetProperty("coordenadas").GetProperty("latitud").GetDecimal(),
+ Longitude = root.GetProperty("coordenadas").GetProperty("longitud").GetDecimal()
+ },
+ Estimates = estimates
+ });
+ }
+ catch (InvalidOperationException)
+ {
+ return new BadRequestObjectResult("Stop not found");
+ }
+ }
+
+ [HttpGet("GetStopTimetable")]
+ public async Task<IActionResult> GetStopTimetable()
+ {
+ throw new NotImplementedException();
+ }
+}
diff --git a/src/Costasdev.Busurbano.Backend/GetStopEstimates.cs b/src/Costasdev.Busurbano.Backend/VigoController.cs
index 8fcdd8e..41a8765 100644
--- a/src/Costasdev.Busurbano.Backend/GetStopEstimates.cs
+++ b/src/Costasdev.Busurbano.Backend/VigoController.cs
@@ -6,14 +6,14 @@ using System.Text.Json;
namespace Costasdev.Busurbano.Backend;
[ApiController]
-[Route("api")]
-public class ApiController : ControllerBase
+[Route("api/vigo")]
+public class VigoController : ControllerBase
{
private readonly VigoTransitApiClient _api;
private readonly IMemoryCache _cache;
private readonly HttpClient _httpClient;
- public ApiController(HttpClient http, IMemoryCache cache)
+ public VigoController(HttpClient http, IMemoryCache cache)
{
_api = new VigoTransitApiClient(http);
_cache = cache;