Files
probearbeit/api/Controllers/PersonController.cs
T
2026-08-31 15:27:07 +02:00

84 lines
2.4 KiB
C#

using Microsoft.AspNetCore.Mvc;
using api.Services;
using api.DTOs;
using Microsoft.EntityFrameworkCore;
using api.RabbitMQ;
namespace api.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class PersonController(IPersonService personService, IMessageProducer messagePublisher) : ControllerBase
{
private readonly IPersonService _personService = personService;
private readonly IMessageProducer _messagePublisher = messagePublisher;
[HttpGet]
public async Task<IActionResult> GetAll()
{
var persons = await _personService.GetAllPersonsAsync();
return Ok(persons);
}
[HttpGet("username/{username}")]
public async Task<IActionResult> GetByUsername(string username)
{
try
{
var person = await _personService.GetPersonByUsernameAsync(username);
return Ok(person);
}
catch (KeyNotFoundException)
{
return NotFound();
}
}
[HttpPost]
public async Task<IActionResult> Add(PersonDto personDto)
{
try
{
await _personService.AddPersonAsync(personDto);
_messagePublisher.SendMessage<PersonDto>(personDto);
return CreatedAtAction(nameof(GetByUsername), new { username = personDto.Username }, personDto);
}
catch (ArgumentException ex)
{
return BadRequest(ex.Message);
}
catch (DbUpdateException)
{
return Conflict("Username already exists");
}
}
[HttpPut("username/{username}")]
public async Task<IActionResult> Update(string username, PersonDto personDto)
{
try
{
await _personService.UpdatePersonAsync(username, personDto);
return NoContent();
}
catch (KeyNotFoundException)
{
return NotFound();
}
}
[HttpDelete("username/{username}")]
public async Task<IActionResult> Delete(string username)
{
try
{
await _personService.DeletePersonAsync(username);
return NoContent();
}
catch (KeyNotFoundException)
{
return NotFound();
}
}
}
}