blob: c86c74b47003383b365603ff57bac7ef760bd575 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
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 only the estimates array, not the stop metadata
return new OkObjectResult(estimates);
}
catch (InvalidOperationException)
{
return BadRequest("Stop not found");
}
}
[HttpGet("GetStopTimetable")]
public async Task<IActionResult> GetStopTimetable()
{
throw new NotImplementedException();
}
}
|