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:
@@ -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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user