aboutsummaryrefslogtreecommitdiff
path: root/src/Costasdev.Busurbano.Backend/Controllers/RoutePlannerController.cs
blob: efddf8249e6ae79266f5616cd020449069632fb9 (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
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.");
        }
    }
}