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); | ||||
|  | ||||
|         // 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); | ||||
|  | ||||
|         _logger.LogInformation("-------------------------------------------------"); | ||||
|         _logger.LogInformation("Iniciando sondeo periódico de resultados..."); | ||||
|         _logger.LogInformation("-------------------------------------------------"); | ||||
|  | ||||
|         // 2. BUCLE DE SONDEO: Se ejecuta continuamente hasta que se detenga la aplicación. | ||||
|         while (!stoppingToken.IsCancellationRequested) | ||||
|         { | ||||
|             var authToken = await _apiService.GetAuthTokenAsync(); | ||||
| @@ -53,13 +50,23 @@ public class Worker : BackgroundService | ||||
|                 continue; | ||||
|             } | ||||
|  | ||||
|             await Task.WhenAll( | ||||
|                 SondearResultadosMunicipalesAsync(authToken, stoppingToken), | ||||
|                 SondearProyeccionBancasAsync(authToken, stoppingToken), | ||||
|                 SondearNuevosTelegramasAsync(authToken, stoppingToken), | ||||
|                 SondearResumenProvincialAsync(authToken, stoppingToken), | ||||
|                 SondearEstadoRecuentoGeneralAsync(authToken, stoppingToken) | ||||
|             ); | ||||
|             // --- CAMBIO CLAVE: DE PARALELO A SECUENCIAL --- | ||||
|             // Se elimina Task.WhenAll y se ejecutan las tareas una después de la otra. | ||||
|             // Esto previene los errores de Gateway Timeout (504). | ||||
|             _logger.LogInformation("--- Iniciando sondeo de Resultados Municipales ---"); | ||||
|             await SondearResultadosMunicipalesAsync(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 | ||||
|             { | ||||
| @@ -117,13 +124,18 @@ public class Worker : BackgroundService | ||||
|  | ||||
|             // --- 2. SINCRONIZAR ÁMBITOS Y AGRUPACIONES POR CADA CATEGORÍA --- | ||||
|  | ||||
|             // CORRECCIÓN: La siguiente línea faltaba por completo, causando el error CS0103. | ||||
|             // Carga todos los ámbitos existentes en un diccionario para una verificación rápida. | ||||
|             var ambitosEnDb = await dbContext.AmbitosGeograficos.ToDictionaryAsync( | ||||
|                 a => (a.DistritoId, a.SeccionId, a.MunicipioId, a.CircuitoId, a.EstablecimientoId), | ||||
|                 a => a, | ||||
|                 stoppingToken | ||||
|             ); | ||||
|             var ambitosEnDb = new Dictionary<string, AmbitoGeografico>(); | ||||
|             var todosLosAmbitos = await dbContext.AmbitosGeograficos.ToListAsync(stoppingToken); | ||||
|  | ||||
|             foreach (var ambito in todosLosAmbitos) | ||||
|             { | ||||
|                 // 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); | ||||
|  | ||||
| @@ -135,18 +147,11 @@ public class Worker : BackgroundService | ||||
|                 var catalogoDto = await _apiService.GetCatalogoAmbitosAsync(authToken, categoria.CategoriaId); | ||||
|                 if (catalogoDto != null) | ||||
|                 { | ||||
|                     // SINCRONIZAR ÁMBITOS | ||||
|                     foreach (var ambitoDto in catalogoDto.Ambitos) | ||||
|                     { | ||||
|                         var claveUnica = ( | ||||
|                             ambitoDto.CodigoAmbitos.DistritoId, | ||||
|                             ambitoDto.CodigoAmbitos.SeccionId, | ||||
|                             ambitoDto.CodigoAmbitos.MunicipioId, | ||||
|                             ambitoDto.CodigoAmbitos.CircuitoId, | ||||
|                             ambitoDto.CodigoAmbitos.EstablecimientoId | ||||
|                         ); | ||||
|                         // Volvemos a generar la misma clave única para la comparación | ||||
|                         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}"; | ||||
|  | ||||
|                         // Aquí se usaba 'ambitosEnDb' sin haberlo declarado. Ahora funciona. | ||||
|                         if (!ambitosEnDb.ContainsKey(claveUnica)) | ||||
|                         { | ||||
|                             var nuevoAmbito = new AmbitoGeografico | ||||
| @@ -154,14 +159,14 @@ public class Worker : BackgroundService | ||||
|                                 Nombre = ambitoDto.Nombre, | ||||
|                                 NivelId = ambitoDto.NivelId, | ||||
|                                 DistritoId = ambitoDto.CodigoAmbitos.DistritoId, | ||||
|                                 SeccionProvincialId = ambitoDto.CodigoAmbitos.SeccionProvincialId, | ||||
|                                 SeccionId = ambitoDto.CodigoAmbitos.SeccionId, | ||||
|                                 MunicipioId = ambitoDto.CodigoAmbitos.MunicipioId, | ||||
|                                 CircuitoId = ambitoDto.CodigoAmbitos.CircuitoId, | ||||
|                                 EstablecimientoId = ambitoDto.CodigoAmbitos.EstablecimientoId, | ||||
|                                 SeccionProvincialId = ambitoDto.CodigoAmbitos.SeccionProvincialId | ||||
|                                 MesaId = ambitoDto.CodigoAmbitos.MesaId, | ||||
|                             }; | ||||
|                             dbContext.AmbitosGeograficos.Add(nuevoAmbito); | ||||
|                             // Se añade al diccionario en memoria para evitar duplicados en el mismo ciclo. | ||||
|                             ambitosEnDb.Add(claveUnica, nuevoAmbito); | ||||
|                         } | ||||
|                     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user