Fase 3: Refactorizado SignalR a un hook reutilizable (useSignalR) y conectado al Dashboard.
This commit is contained in:
		| @@ -1,7 +1,9 @@ | ||||
| // 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; | ||||
| @@ -11,10 +13,20 @@ namespace Titulares.Api.Controllers; | ||||
| public class TitularesController : ControllerBase | ||||
| { | ||||
|   private readonly TitularRepositorio _repositorio; | ||||
|   private readonly IHubContext<TitularesHub> _hubContext; | ||||
|  | ||||
|   public TitularesController(TitularRepositorio repositorio) | ||||
|   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] | ||||
| @@ -27,40 +39,35 @@ public class TitularesController : ControllerBase | ||||
|   [HttpPost] | ||||
|   public async Task<IActionResult> CrearManual([FromBody] CrearTitularDto titularDto) | ||||
|   { | ||||
|     if (!ModelState.IsValid) | ||||
|     { | ||||
|       return BadRequest(ModelState); | ||||
|     } | ||||
|     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.ActualizarTextoAsync(id, titularDto); | ||||
|     return resultado ? NoContent() : NotFound(); | ||||
|     if (!resultado) return NotFound(); | ||||
|     await NotificarCambios(); // Notificamos después de actualizar | ||||
|     return NoContent(); | ||||
|   } | ||||
|  | ||||
|   [HttpPut("reordenar")] | ||||
|   public async Task<IActionResult> Reordenar([FromBody] List<ReordenarTitularDto> ordenes) | ||||
|   { | ||||
|     if (ordenes == null || !ordenes.Any()) | ||||
|     { | ||||
|       return BadRequest("La lista de órdenes no puede estar vacía."); | ||||
|     } | ||||
|     var resultado = await _repositorio.ActualizarOrdenAsync(ordenes); | ||||
|     return resultado ? Ok() : StatusCode(500, "Error al actualizar el orden."); | ||||
|     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); | ||||
|     return resultado ? NoContent() : NotFound(); | ||||
|     if (!resultado) return NotFound(); | ||||
|     await NotificarCambios(); // Notificamos después de eliminar | ||||
|     return NoContent(); | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user