Files
TitularesApp/backend/src/Titulares.Api/Controllers/TitularesController.cs

77 lines
2.4 KiB
C#

// backend/src/Titulares.Api/Controllers/TitularesController.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;
using Titulares.Api.Data;
using Titulares.Api.Hubs;
using Titulares.Api.Models;
namespace Titulares.Api.Controllers;
[ApiController]
[Route("api/[controller]")]
public class TitularesController : ControllerBase
{
private readonly TitularRepositorio _repositorio;
private readonly IHubContext<TitularesHub> _hubContext;
public TitularesController(TitularRepositorio repositorio, IHubContext<TitularesHub> hubContext)
{
_repositorio = repositorio;
_hubContext = hubContext;
}
private async Task NotificarCambios()
{
var titularesActualizados = await _repositorio.ObtenerTodosAsync();
// Enviamos un mensaje llamado "TitularesActualizados" a TODOS los clientes conectados
// y les pasamos la lista completa y actualizada.
await _hubContext.Clients.All.SendAsync("TitularesActualizados", titularesActualizados);
}
[HttpGet]
public async Task<IActionResult> ObtenerTodos()
{
var titulares = await _repositorio.ObtenerTodosAsync();
return Ok(titulares);
}
[HttpPost]
public async Task<IActionResult> CrearManual([FromBody] CrearTitularDto titularDto)
{
var nuevoId = await _repositorio.CrearManualAsync(titularDto);
await NotificarCambios(); // Notificamos después de crear
return CreatedAtAction(nameof(ObtenerTodos), new { id = nuevoId }, null);
}
[HttpPut("{id}")]
public async Task<IActionResult> Actualizar(int id, [FromBody] ActualizarTitularDto titularDto)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var resultado = await _repositorio.ActualizarTitularAsync(id, titularDto);
if (!resultado) return NotFound();
await NotificarCambios();
return NoContent();
}
[HttpPut("reordenar")]
public async Task<IActionResult> Reordenar([FromBody] List<ReordenarTitularDto> ordenes)
{
var resultado = await _repositorio.ActualizarOrdenAsync(ordenes);
if (!resultado) return StatusCode(500, "Error al actualizar el orden.");
await NotificarCambios(); // Notificamos después de reordenar
return Ok();
}
[HttpDelete("{id}")]
public async Task<IActionResult> Eliminar(int id)
{
var resultado = await _repositorio.EliminarAsync(id);
if (!resultado) return NotFound();
await NotificarCambios(); // Notificamos después de eliminar
return NoContent();
}
}