Fix proyeccion bancas

This commit is contained in:
2025-08-23 12:27:27 -03:00
parent 8bb8a5dede
commit 303a469c57
12 changed files with 457 additions and 36 deletions

View File

@@ -255,6 +255,13 @@ public class LowPriorityDataWorker : BackgroundService
/// </summary>
/// <param name="authToken">El token de autenticación válido para la sesión.</param>
/// <param name="stoppingToken">El token de cancelación para detener la operación.</param>
/// <summary>
/// Sondea la proyección de bancas a nivel Provincial y por Sección Electoral.
/// Esta versión guarda la CategoriaId junto con cada proyección para poder distinguir
/// entre diferentes elecciones (ej. Senadores vs. Diputados).
/// </summary>
/// <param name="authToken">El token de autenticación válido para la sesión.</param>
/// <param name="stoppingToken">El token de cancelación para detener la operación.</param>
private async Task SondearProyeccionBancasAsync(string authToken, CancellationToken stoppingToken)
{
try
@@ -305,34 +312,19 @@ public class LowPriorityDataWorker : BackgroundService
var repartoBancas = await _apiService.GetBancasAsync(authToken, provincia.DistritoId!, null, categoria.Id);
// --- Lógica de Verificación Explícita ---
if (repartoBancas == null)
if (repartoBancas?.RepartoBancas is { Count: > 0 } bancas)
{
// Esto ocurriría si GetBancasAsync devuelve null (ej. por un error 500 o un JsonException).
_logger.LogWarning("La respuesta para bancas provinciales (cat: {catId}) fue nula o inválida.", categoria.Id);
continue;
}
_logger.LogInformation("Se encontraron {count} registros de bancas a nivel provincial para la categoría {catId}.", bancas.Count, categoria.Id);
hasReceivedAnyNewData = true;
if (repartoBancas.RepartoBancas == null)
{
// Esto es por si la API devuelve un JSON válido pero sin la propiedad "repartoBancas".
_logger.LogWarning("La lista 'RepartoBancas' en la respuesta provincial (cat: {catId}) es nula.", categoria.Id);
continue;
}
if (repartoBancas.RepartoBancas.Count > 0)
{
// ¡Éxito! Hemos encontrado datos.
_logger.LogInformation("Se encontraron {count} registros de bancas a nivel provincial para la categoría {catId}.", repartoBancas.RepartoBancas.Count, categoria.Id);
hasReceivedAnyNewData = true; // Activamos la bandera.
foreach (var banca in repartoBancas.RepartoBancas)
foreach (var banca in bancas)
{
todasLasProyecciones.Add(new ProyeccionBanca
{
AmbitoGeograficoId = provincia.Id,
AgrupacionPoliticaId = banca.IdAgrupacion,
NroBancas = banca.NroBancas
NroBancas = banca.NroBancas,
CategoriaId = categoria.Id // <-- CORRECCIÓN: Se guarda la CategoriaId
});
}
}
@@ -347,16 +339,17 @@ public class LowPriorityDataWorker : BackgroundService
if (stoppingToken.IsCancellationRequested) break;
var repartoBancas = await _apiService.GetBancasAsync(authToken, seccion.DistritoId!, seccion.SeccionProvincialId!, categoria.Id);
if (repartoBancas?.RepartoBancas?.Count > 0)
if (repartoBancas?.RepartoBancas is { Count: > 0 } bancas)
{
hasReceivedAnyNewData = true;
foreach (var banca in repartoBancas.RepartoBancas)
foreach (var banca in bancas)
{
todasLasProyecciones.Add(new ProyeccionBanca
{
AmbitoGeograficoId = seccion.Id,
AgrupacionPoliticaId = banca.IdAgrupacion,
NroBancas = banca.NroBancas
NroBancas = banca.NroBancas,
CategoriaId = categoria.Id // <-- CORRECCIÓN: Se guarda la CategoriaId
});
}
}
@@ -491,9 +484,4 @@ public class LowPriorityDataWorker : BackgroundService
_logger.LogError(ex, "Ocurrió un error CRÍTICO en el sondeo de Telegramas.");
}
}
// Pega aquí los métodos:
// - SincronizarCatalogosMaestrosAsync
// - SondearProyeccionBancasAsync
// - SondearNuevosTelegramasAsync (la versión con goteo lento)
}