2024-12-18 02:14:21 +04:00

86 lines
2.4 KiB
C#

using Contracts;
using Microsoft.AspNetCore.Mvc;
using Services.Abstractions;
namespace Web.Controllers
{
[ApiController]
[Route("api/streets")]
public class StreetController : ControllerBase
{
private readonly IStreetService _streetService;
public StreetController(IStreetService streetService)
{
_streetService = streetService;
}
[HttpGet]
public async Task<IActionResult> GetAllAsync()
{
var steets = await _streetService.GetAllAsync();
return Ok(steets);
}
[HttpGet("{id:guid}")]
public async Task<IActionResult> GetByIdAsync(Guid id)
{
var street = await _streetService.GetByIdAsync(id);
if (street == null)
{
return NotFound("Город не найден.");
}
return Ok(street);
}
[HttpPost]
public async Task<IActionResult> CreateAsync([FromBody] StreetDtoForCreate streetDto)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var newStreet = await _streetService.CreateAsync(streetDto);
return Ok(newStreet);
}
[HttpPut("{id:guid}")]
public async Task<IActionResult> UpdateAsync(Guid id, [FromBody] StreetDtoForUpdate streetDto)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
try
{
await _streetService.UpdateAsync(id, streetDto);
}
catch (KeyNotFoundException)
{
return NotFound("Город не найден.");
}
return NoContent();
}
[HttpDelete("{id:guid}")]
public async Task<IActionResult> DeleteAsync(Guid id)
{
try
{
await _streetService.DeleteAsync(id);
}
catch (KeyNotFoundException)
{
return NotFound("Город не найден.");
}
return NoContent();
}
[HttpGet("search")]
public async Task<IActionResult> SearchStreet([FromQuery] string query)
{
var streets = await _streetService.SearchAsync(query);
return Ok(streets);
}
}
}