Feat Widgets

Se añade la tabla CandidatosOverrides
Se añade el Overrides de Candidatos al panel de administrador
Se Añade el nombre de los candidatos a los Widgets de categorias por municipio
This commit is contained in:
2025-09-05 11:38:25 -03:00
parent 479c2c60f2
commit d78a02a0eb
23 changed files with 1033 additions and 38 deletions

View File

@@ -235,4 +235,77 @@ public class AdminController : ControllerBase
return Ok(municipios);
}
/// <summary>
/// Obtiene todos los overrides de candidatos configurados.
/// </summary>
[HttpGet("candidatos")]
public async Task<IActionResult> GetCandidatos()
{
var candidatos = await _dbContext.CandidatosOverrides
.AsNoTracking()
.ToListAsync();
return Ok(candidatos);
}
/// <summary>
/// Guarda (actualiza o crea) una lista de overrides de candidatos.
/// </summary>
[HttpPut("candidatos")]
public async Task<IActionResult> UpdateCandidatos([FromBody] List<CandidatoOverride> candidatos)
{
foreach (var candidatoDto in candidatos)
{
// Buscamos un override existente basado en la combinación única
var candidatoExistente = await _dbContext.CandidatosOverrides
.FirstOrDefaultAsync(c =>
c.AgrupacionPoliticaId == candidatoDto.AgrupacionPoliticaId &&
c.CategoriaId == candidatoDto.CategoriaId &&
c.AmbitoGeograficoId == candidatoDto.AmbitoGeograficoId);
if (candidatoExistente != null)
{
// Si existe y el nombre es diferente, lo actualizamos.
if (candidatoExistente.NombreCandidato != candidatoDto.NombreCandidato)
{
candidatoExistente.NombreCandidato = candidatoDto.NombreCandidato;
}
}
else
{
// Si no se encontró un registro exacto, lo añadimos a la base de datos,
// pero solo si el nombre del candidato no está vacío.
if (!string.IsNullOrWhiteSpace(candidatoDto.NombreCandidato))
{
_dbContext.CandidatosOverrides.Add(new CandidatoOverride
{
AgrupacionPoliticaId = candidatoDto.AgrupacionPoliticaId,
CategoriaId = candidatoDto.CategoriaId,
AmbitoGeograficoId = candidatoDto.AmbitoGeograficoId,
NombreCandidato = candidatoDto.NombreCandidato
});
}
}
}
// También necesitamos manejar los casos donde se borra un nombre (se envía un string vacío)
var overridesAEliminar = await _dbContext.CandidatosOverrides
.Where(c => candidatos.Any(dto =>
dto.AgrupacionPoliticaId == c.AgrupacionPoliticaId &&
dto.CategoriaId == c.CategoriaId &&
dto.AmbitoGeograficoId == c.AmbitoGeograficoId &&
string.IsNullOrWhiteSpace(dto.NombreCandidato)
))
.ToListAsync();
if (overridesAEliminar.Any())
{
_dbContext.CandidatosOverrides.RemoveRange(overridesAEliminar);
}
await _dbContext.SaveChangesAsync();
_logger.LogInformation("Se procesaron {Count} overrides de candidatos.", candidatos.Count);
return NoContent(); // Respuesta estándar para un PUT exitoso
}
}