Fix Overrides Candidatos

This commit is contained in:
2025-09-05 12:58:52 -03:00
parent d78a02a0eb
commit 12acd61f2b
12 changed files with 105 additions and 61 deletions

View File

@@ -252,11 +252,10 @@ public class AdminController : ControllerBase
/// Guarda (actualiza o crea) una lista de overrides de candidatos.
/// </summary>
[HttpPut("candidatos")]
public async Task<IActionResult> UpdateCandidatos([FromBody] List<CandidatoOverride> candidatos)
public async Task<IActionResult> UpdateCandidatos([FromBody] List<UpdateCandidatoDto> 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 &&
@@ -265,18 +264,24 @@ public class AdminController : ControllerBase
if (candidatoExistente != null)
{
// Si existe y el nombre es diferente, lo actualizamos.
if (candidatoExistente.NombreCandidato != candidatoDto.NombreCandidato)
// El registro ya existe
if (string.IsNullOrWhiteSpace(candidatoDto.NombreCandidato))
{
// El usuario envió un nombre vacío -> Eliminar el registro
_dbContext.CandidatosOverrides.Remove(candidatoExistente);
}
else
{
// El usuario envió un nombre válido -> Actualizar
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.
// El registro no existe
if (!string.IsNullOrWhiteSpace(candidatoDto.NombreCandidato))
{
// El usuario envió un nombre válido -> Crear nuevo registro
_dbContext.CandidatosOverrides.Add(new CandidatoOverride
{
AgrupacionPoliticaId = candidatoDto.AgrupacionPoliticaId,
@@ -285,27 +290,11 @@ public class AdminController : ControllerBase
NombreCandidato = candidatoDto.NombreCandidato
});
}
// Si no existe y el nombre está vacío, no hacemos nada.
}
}
// 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
return NoContent();
}
}