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
|
using Costasdev.Busurbano.Backend.Services;
using Costasdev.Busurbano.Backend.Types.Planner;
using Microsoft.AspNetCore.Mvc;
namespace Costasdev.Busurbano.Backend.Controllers;
[ApiController]
[Route("api/planner")]
public class RoutePlannerController : ControllerBase
{
private readonly OtpService _otpService;
public RoutePlannerController(OtpService otpService)
{
_otpService = otpService;
}
[HttpGet("autocomplete")]
public async Task<ActionResult<List<PlannerSearchResult>>> Autocomplete([FromQuery] string query)
{
if (string.IsNullOrWhiteSpace(query))
{
return BadRequest("Query cannot be empty");
}
var results = await _otpService.GetAutocompleteAsync(query);
return Ok(results);
}
[HttpGet("reverse")]
public async Task<ActionResult<PlannerSearchResult>> Reverse([FromQuery] double lat, [FromQuery] double lon)
{
var result = await _otpService.GetReverseGeocodeAsync(lat, lon);
if (result == null)
{
return NotFound();
}
return Ok(result);
}
[HttpGet("plan")]
public async Task<ActionResult<RoutePlan>> Plan(
[FromQuery] double fromLat,
[FromQuery] double fromLon,
[FromQuery] double toLat,
[FromQuery] double toLon,
[FromQuery] DateTime? time = null,
[FromQuery] bool arriveBy = false)
{
try
{
var plan = await _otpService.GetRoutePlanAsync(fromLat, fromLon, toLat, toLon, time, arriveBy);
return Ok(plan);
}
catch (Exception)
{
// Log error
return StatusCode(500, "An error occurred while planning the route.");
}
}
}
|