API: Add StreetController

This commit is contained in:
Jonas Seiler 2025-04-03 11:08:23 +02:00
parent 2a68fa8257
commit 83fc5bdb1d

View File

@ -0,0 +1,88 @@
using Microsoft.AspNetCore.Mvc;
using NetTopologySuite.Geometries;
[ApiController]
[Route("api/streets")]
public class StreetController : ControllerBase
{
private readonly StreetService StreetService;
public StreetController(StreetService streetService, ILogger<StreetController> logger)
{
StreetService = streetService;
}
// POST /api/streets/
[HttpPost]
public async Task<IActionResult> CreateStreet([FromBody] CreateStreetDTO dto)
{
if (dto == null)
return BadRequest("Invalid request body.");
try
{
var geometry = StreetService.ToGeometry(dto.Geometry);
var street = new Street(dto.Name, dto.Capacity, geometry);
var createdStreet = await StreetService.CreateStreetAsync(street);
return Created();
}
catch (InvalidOperationException ex)
{
return Conflict(ex);
}
}
// GET /api/streets/{streetname}
[HttpGet("{streetname}")]
public async Task<IActionResult> GetStreet(string streetname)
{
try
{
var street = await StreetService.GetStreetAsync(streetname);
return Ok(street);
}
catch (KeyNotFoundException ex)
{
return NotFound(ex);
}
}
// DELETE /api/streets/{streetname}
[HttpDelete("{streetname}")]
public async Task<IActionResult> DeleteStreet(string streetname)
{
var deleted = await StreetService.DeleteStreetAsync(streetname);
if (!deleted)
return NotFound($"Street '{streetname}' not found.");
return NoContent();
}
// PATCH /api/streets/{streetname}
[HttpPatch("{streetname}")]
public async Task<IActionResult> AddPoint(string streetname, [FromBody] AddPointDTO dto)
{
if (dto == null)
return BadRequest("Invalid request body.");
try
{
await StreetService.AddPointAsync(streetname, StreetService.ToGeometryPoint(dto.Point), dto.usePostGIS);
return Ok();
}
catch (KeyNotFoundException ex)
{
return NotFound(ex);
}
catch (ArgumentException ex)
{
return BadRequest(ex);
}
catch
{
return Conflict("Concurrency conflict. Please retry your request.");
}
}
}