Fix Bancas

This commit is contained in:
2025-08-20 17:38:51 -03:00
parent a2bf221194
commit 43a967eac2

View File

@@ -277,21 +277,24 @@ public class LowPriorityDataWorker : BackgroundService
_logger.LogInformation("Iniciando sondeo de Bancas a nivel Provincial y para {count} Secciones Electorales...", seccionesElectorales.Count); _logger.LogInformation("Iniciando sondeo de Bancas a nivel Provincial y para {count} Secciones Electorales...", seccionesElectorales.Count);
// Creamos una lista para recolectar todas las proyecciones que encontremos. // --- LÓGICA CORREGIDA ---
var nuevasProyecciones = new List<ProyeccionBanca>(); bool hasReceivedAnyNewData = false;
var todasLasProyecciones = new List<ProyeccionBanca>();
// 1. Bucle para el nivel Provincial // 1. Bucle Provincial
foreach (var categoria in categoriasDeBancas) foreach (var categoria in categoriasDeBancas)
{ {
if (stoppingToken.IsCancellationRequested) break; if (stoppingToken.IsCancellationRequested) break;
var repartoBancas = await _apiService.GetBancasAsync(authToken, provincia.DistritoId!, null, categoria.Id); var repartoBancas = await _apiService.GetBancasAsync(authToken, provincia.DistritoId!, null, categoria.Id);
// Si la lista de bancas no es nula (incluso si está vacía), la procesamos. // Comprobamos si la respuesta no es nula y si la lista de bancas TIENE ELEMENTOS.
if (repartoBancas?.RepartoBancas != null) if (repartoBancas?.RepartoBancas is { Count: > 0 } bancas)
{ {
foreach (var banca in repartoBancas.RepartoBancas) // Si encontramos datos, activamos la bandera.
hasReceivedAnyNewData = true;
foreach (var banca in bancas)
{ {
nuevasProyecciones.Add(new ProyeccionBanca todasLasProyecciones.Add(new ProyeccionBanca
{ {
AmbitoGeograficoId = provincia.Id, AmbitoGeograficoId = provincia.Id,
AgrupacionPoliticaId = banca.IdAgrupacion, AgrupacionPoliticaId = banca.IdAgrupacion,
@@ -301,7 +304,7 @@ public class LowPriorityDataWorker : BackgroundService
} }
} }
// 2. Bucle para el nivel de Sección Electoral // 2. Bucle por Sección
foreach (var seccion in seccionesElectorales) foreach (var seccion in seccionesElectorales)
{ {
if (stoppingToken.IsCancellationRequested) break; if (stoppingToken.IsCancellationRequested) break;
@@ -310,11 +313,12 @@ public class LowPriorityDataWorker : BackgroundService
if (stoppingToken.IsCancellationRequested) break; if (stoppingToken.IsCancellationRequested) break;
var repartoBancas = await _apiService.GetBancasAsync(authToken, seccion.DistritoId!, seccion.SeccionProvincialId!, categoria.Id); var repartoBancas = await _apiService.GetBancasAsync(authToken, seccion.DistritoId!, seccion.SeccionProvincialId!, categoria.Id);
if (repartoBancas?.RepartoBancas != null) if (repartoBancas?.RepartoBancas is { Count: > 0 } bancas)
{ {
foreach (var banca in repartoBancas.RepartoBancas) hasReceivedAnyNewData = true;
foreach (var banca in bancas)
{ {
nuevasProyecciones.Add(new ProyeccionBanca todasLasProyecciones.Add(new ProyeccionBanca
{ {
AmbitoGeograficoId = seccion.Id, AmbitoGeograficoId = seccion.Id,
AgrupacionPoliticaId = banca.IdAgrupacion, AgrupacionPoliticaId = banca.IdAgrupacion,
@@ -326,15 +330,16 @@ public class LowPriorityDataWorker : BackgroundService
} }
// 3. Guardado Final // 3. Guardado Final
// Ahora la condición es simple: si nuestra lista recolectora tiene CUALQUIER COSA, actualizamos la BD. // La lógica de guardado ahora depende de la bandera.
if (nuevasProyecciones.Any()) if (hasReceivedAnyNewData)
{ {
_logger.LogInformation("Se recibieron {count} registros de proyección de bancas. Actualizando la tabla...", nuevasProyecciones.Count); _logger.LogInformation("Se recibieron {count} registros de proyección de bancas. Actualizando la tabla...", todasLasProyecciones.Count);
await using var transaction = await dbContext.Database.BeginTransactionAsync(stoppingToken); await using var transaction = await dbContext.Database.BeginTransactionAsync(stoppingToken);
await dbContext.Database.ExecuteSqlRawAsync("DELETE FROM ProyeccionesBancas", stoppingToken); await dbContext.Database.ExecuteSqlRawAsync("DELETE FROM ProyeccionesBancas", stoppingToken);
await dbContext.ProyeccionesBancas.AddRangeAsync(nuevasProyecciones, stoppingToken); // Guardamos la lista completa, incluso los que tienen 0 bancas.
await dbContext.ProyeccionesBancas.AddRangeAsync(todasLasProyecciones, stoppingToken);
await dbContext.SaveChangesAsync(stoppingToken); await dbContext.SaveChangesAsync(stoppingToken);
await transaction.CommitAsync(stoppingToken); await transaction.CommitAsync(stoppingToken);
@@ -342,8 +347,7 @@ public class LowPriorityDataWorker : BackgroundService
} }
else else
{ {
// Si después de todas las llamadas, la lista sigue vacía, no hacemos nada. _logger.LogInformation("Sondeo de Bancas completado. No se encontraron datos nuevos de proyección, la tabla no fue modificada.");
_logger.LogInformation("Sondeo de Bancas completado. No se encontraron datos de proyección, la tabla no fue modificada.");
} }
} }
catch (Exception ex) catch (Exception ex)