Fix TimeOut Api
This commit is contained in:
@@ -34,15 +34,12 @@ public class Worker : BackgroundService
|
|||||||
{
|
{
|
||||||
_logger.LogInformation("Elecciones Worker iniciado a las: {time}", DateTimeOffset.Now);
|
_logger.LogInformation("Elecciones Worker iniciado a las: {time}", DateTimeOffset.Now);
|
||||||
|
|
||||||
// 1. SINCRONIZACIÓN INICIAL: Se ejecuta una vez al iniciar el worker para
|
|
||||||
// asegurar que la base de datos local tenga todos los catálogos maestros.
|
|
||||||
await SincronizarCatalogosMaestrosAsync(stoppingToken);
|
await SincronizarCatalogosMaestrosAsync(stoppingToken);
|
||||||
|
|
||||||
_logger.LogInformation("-------------------------------------------------");
|
_logger.LogInformation("-------------------------------------------------");
|
||||||
_logger.LogInformation("Iniciando sondeo periódico de resultados...");
|
_logger.LogInformation("Iniciando sondeo periódico de resultados...");
|
||||||
_logger.LogInformation("-------------------------------------------------");
|
_logger.LogInformation("-------------------------------------------------");
|
||||||
|
|
||||||
// 2. BUCLE DE SONDEO: Se ejecuta continuamente hasta que se detenga la aplicación.
|
|
||||||
while (!stoppingToken.IsCancellationRequested)
|
while (!stoppingToken.IsCancellationRequested)
|
||||||
{
|
{
|
||||||
var authToken = await _apiService.GetAuthTokenAsync();
|
var authToken = await _apiService.GetAuthTokenAsync();
|
||||||
@@ -53,13 +50,23 @@ public class Worker : BackgroundService
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
await Task.WhenAll(
|
// --- CAMBIO CLAVE: DE PARALELO A SECUENCIAL ---
|
||||||
SondearResultadosMunicipalesAsync(authToken, stoppingToken),
|
// Se elimina Task.WhenAll y se ejecutan las tareas una después de la otra.
|
||||||
SondearProyeccionBancasAsync(authToken, stoppingToken),
|
// Esto previene los errores de Gateway Timeout (504).
|
||||||
SondearNuevosTelegramasAsync(authToken, stoppingToken),
|
_logger.LogInformation("--- Iniciando sondeo de Resultados Municipales ---");
|
||||||
SondearResumenProvincialAsync(authToken, stoppingToken),
|
await SondearResultadosMunicipalesAsync(authToken, stoppingToken);
|
||||||
SondearEstadoRecuentoGeneralAsync(authToken, stoppingToken)
|
|
||||||
);
|
_logger.LogInformation("--- Iniciando sondeo de Proyección de Bancas ---");
|
||||||
|
await SondearProyeccionBancasAsync(authToken, stoppingToken);
|
||||||
|
|
||||||
|
_logger.LogInformation("--- Iniciando sondeo de Nuevos Telegramas ---");
|
||||||
|
await SondearNuevosTelegramasAsync(authToken, stoppingToken);
|
||||||
|
|
||||||
|
_logger.LogInformation("--- Iniciando sondeo de Resumen Provincial ---");
|
||||||
|
await SondearResumenProvincialAsync(authToken, stoppingToken);
|
||||||
|
|
||||||
|
_logger.LogInformation("--- Iniciando sondeo de Estado de Recuento General ---");
|
||||||
|
await SondearEstadoRecuentoGeneralAsync(authToken, stoppingToken);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -117,13 +124,18 @@ public class Worker : BackgroundService
|
|||||||
|
|
||||||
// --- 2. SINCRONIZAR ÁMBITOS Y AGRUPACIONES POR CADA CATEGORÍA ---
|
// --- 2. SINCRONIZAR ÁMBITOS Y AGRUPACIONES POR CADA CATEGORÍA ---
|
||||||
|
|
||||||
// CORRECCIÓN: La siguiente línea faltaba por completo, causando el error CS0103.
|
var ambitosEnDb = new Dictionary<string, AmbitoGeografico>();
|
||||||
// Carga todos los ámbitos existentes en un diccionario para una verificación rápida.
|
var todosLosAmbitos = await dbContext.AmbitosGeograficos.ToListAsync(stoppingToken);
|
||||||
var ambitosEnDb = await dbContext.AmbitosGeograficos.ToDictionaryAsync(
|
|
||||||
a => (a.DistritoId, a.SeccionId, a.MunicipioId, a.CircuitoId, a.EstablecimientoId),
|
foreach (var ambito in todosLosAmbitos)
|
||||||
a => a,
|
{
|
||||||
stoppingToken
|
// Creamos una clave única que SIEMPRE funciona, incluso con nulos.
|
||||||
);
|
string clave = $"{ambito.NivelId}|{ambito.DistritoId}|{ambito.SeccionProvincialId}|{ambito.SeccionId}|{ambito.MunicipioId}|{ambito.CircuitoId}|{ambito.EstablecimientoId}|{ambito.MesaId}";
|
||||||
|
if (!ambitosEnDb.ContainsKey(clave))
|
||||||
|
{
|
||||||
|
ambitosEnDb.Add(clave, ambito);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var agrupacionesEnDb = await dbContext.AgrupacionesPoliticas.ToDictionaryAsync(a => a.Id, a => a, stoppingToken);
|
var agrupacionesEnDb = await dbContext.AgrupacionesPoliticas.ToDictionaryAsync(a => a.Id, a => a, stoppingToken);
|
||||||
|
|
||||||
@@ -135,18 +147,11 @@ public class Worker : BackgroundService
|
|||||||
var catalogoDto = await _apiService.GetCatalogoAmbitosAsync(authToken, categoria.CategoriaId);
|
var catalogoDto = await _apiService.GetCatalogoAmbitosAsync(authToken, categoria.CategoriaId);
|
||||||
if (catalogoDto != null)
|
if (catalogoDto != null)
|
||||||
{
|
{
|
||||||
// SINCRONIZAR ÁMBITOS
|
|
||||||
foreach (var ambitoDto in catalogoDto.Ambitos)
|
foreach (var ambitoDto in catalogoDto.Ambitos)
|
||||||
{
|
{
|
||||||
var claveUnica = (
|
// Volvemos a generar la misma clave única para la comparación
|
||||||
ambitoDto.CodigoAmbitos.DistritoId,
|
string claveUnica = $"{ambitoDto.NivelId}|{ambitoDto.CodigoAmbitos.DistritoId}|{ambitoDto.CodigoAmbitos.SeccionProvincialId}|{ambitoDto.CodigoAmbitos.SeccionId}|{ambitoDto.CodigoAmbitos.MunicipioId}|{ambitoDto.CodigoAmbitos.CircuitoId}|{ambitoDto.CodigoAmbitos.EstablecimientoId}|{ambitoDto.CodigoAmbitos.MesaId}";
|
||||||
ambitoDto.CodigoAmbitos.SeccionId,
|
|
||||||
ambitoDto.CodigoAmbitos.MunicipioId,
|
|
||||||
ambitoDto.CodigoAmbitos.CircuitoId,
|
|
||||||
ambitoDto.CodigoAmbitos.EstablecimientoId
|
|
||||||
);
|
|
||||||
|
|
||||||
// Aquí se usaba 'ambitosEnDb' sin haberlo declarado. Ahora funciona.
|
|
||||||
if (!ambitosEnDb.ContainsKey(claveUnica))
|
if (!ambitosEnDb.ContainsKey(claveUnica))
|
||||||
{
|
{
|
||||||
var nuevoAmbito = new AmbitoGeografico
|
var nuevoAmbito = new AmbitoGeografico
|
||||||
@@ -154,14 +159,14 @@ public class Worker : BackgroundService
|
|||||||
Nombre = ambitoDto.Nombre,
|
Nombre = ambitoDto.Nombre,
|
||||||
NivelId = ambitoDto.NivelId,
|
NivelId = ambitoDto.NivelId,
|
||||||
DistritoId = ambitoDto.CodigoAmbitos.DistritoId,
|
DistritoId = ambitoDto.CodigoAmbitos.DistritoId,
|
||||||
|
SeccionProvincialId = ambitoDto.CodigoAmbitos.SeccionProvincialId,
|
||||||
SeccionId = ambitoDto.CodigoAmbitos.SeccionId,
|
SeccionId = ambitoDto.CodigoAmbitos.SeccionId,
|
||||||
MunicipioId = ambitoDto.CodigoAmbitos.MunicipioId,
|
MunicipioId = ambitoDto.CodigoAmbitos.MunicipioId,
|
||||||
CircuitoId = ambitoDto.CodigoAmbitos.CircuitoId,
|
CircuitoId = ambitoDto.CodigoAmbitos.CircuitoId,
|
||||||
EstablecimientoId = ambitoDto.CodigoAmbitos.EstablecimientoId,
|
EstablecimientoId = ambitoDto.CodigoAmbitos.EstablecimientoId,
|
||||||
SeccionProvincialId = ambitoDto.CodigoAmbitos.SeccionProvincialId
|
MesaId = ambitoDto.CodigoAmbitos.MesaId,
|
||||||
};
|
};
|
||||||
dbContext.AmbitosGeograficos.Add(nuevoAmbito);
|
dbContext.AmbitosGeograficos.Add(nuevoAmbito);
|
||||||
// Se añade al diccionario en memoria para evitar duplicados en el mismo ciclo.
|
|
||||||
ambitosEnDb.Add(claveUnica, nuevoAmbito);
|
ambitosEnDb.Add(claveUnica, nuevoAmbito);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user