2025-10-28 11:33:28 -03:00
|
|
|
// backend/src/Titulares.Api/Controllers/TitularesController.cs
|
|
|
|
|
|
|
|
|
|
using Microsoft.AspNetCore.Mvc;
|
2025-10-28 12:26:49 -03:00
|
|
|
using Microsoft.AspNetCore.SignalR;
|
2025-10-28 11:33:28 -03:00
|
|
|
using Titulares.Api.Data;
|
2025-10-28 12:26:49 -03:00
|
|
|
using Titulares.Api.Hubs;
|
2025-10-28 11:33:28 -03:00
|
|
|
using Titulares.Api.Models;
|
|
|
|
|
|
|
|
|
|
namespace Titulares.Api.Controllers;
|
|
|
|
|
|
|
|
|
|
[ApiController]
|
|
|
|
|
[Route("api/[controller]")]
|
|
|
|
|
public class TitularesController : ControllerBase
|
|
|
|
|
{
|
|
|
|
|
private readonly TitularRepositorio _repositorio;
|
2025-10-28 12:26:49 -03:00
|
|
|
private readonly IHubContext<TitularesHub> _hubContext;
|
2025-10-28 11:33:28 -03:00
|
|
|
|
2025-10-28 12:26:49 -03:00
|
|
|
public TitularesController(TitularRepositorio repositorio, IHubContext<TitularesHub> hubContext)
|
2025-10-28 11:33:28 -03:00
|
|
|
{
|
|
|
|
|
_repositorio = repositorio;
|
2025-10-28 12:26:49 -03:00
|
|
|
_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);
|
2025-10-28 11:33:28 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[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);
|
2025-10-28 12:26:49 -03:00
|
|
|
await NotificarCambios(); // Notificamos después de crear
|
2025-10-28 11:33:28 -03:00
|
|
|
return CreatedAtAction(nameof(ObtenerTodos), new { id = nuevoId }, null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[HttpPut("{id}")]
|
|
|
|
|
public async Task<IActionResult> Actualizar(int id, [FromBody] ActualizarTitularDto titularDto)
|
|
|
|
|
{
|
|
|
|
|
var resultado = await _repositorio.ActualizarTextoAsync(id, titularDto);
|
2025-10-28 12:26:49 -03:00
|
|
|
if (!resultado) return NotFound();
|
|
|
|
|
await NotificarCambios(); // Notificamos después de actualizar
|
|
|
|
|
return NoContent();
|
2025-10-28 11:33:28 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[HttpPut("reordenar")]
|
|
|
|
|
public async Task<IActionResult> Reordenar([FromBody] List<ReordenarTitularDto> ordenes)
|
|
|
|
|
{
|
|
|
|
|
var resultado = await _repositorio.ActualizarOrdenAsync(ordenes);
|
2025-10-28 12:26:49 -03:00
|
|
|
if (!resultado) return StatusCode(500, "Error al actualizar el orden.");
|
|
|
|
|
await NotificarCambios(); // Notificamos después de reordenar
|
|
|
|
|
return Ok();
|
2025-10-28 11:33:28 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[HttpDelete("{id}")]
|
|
|
|
|
public async Task<IActionResult> Eliminar(int id)
|
|
|
|
|
{
|
|
|
|
|
var resultado = await _repositorio.EliminarAsync(id);
|
2025-10-28 12:26:49 -03:00
|
|
|
if (!resultado) return NotFound();
|
|
|
|
|
await NotificarCambios(); // Notificamos después de eliminar
|
|
|
|
|
return NoContent();
|
2025-10-28 11:33:28 -03:00
|
|
|
}
|
|
|
|
|
}
|