Fix Worker
This commit is contained in:
		| @@ -762,6 +762,9 @@ public class LowPriorityDataWorker : BackgroundService | |||||||
|             { |             { | ||||||
|               _logger.LogInformation("Se encontraron {count} telegramas nuevos en '{partido}' para '{cat}'. Descargando...", nuevosTelegramasIds.Count, partido.Nombre, categoria.Nombre); |               _logger.LogInformation("Se encontraron {count} telegramas nuevos en '{partido}' para '{cat}'. Descargando...", nuevosTelegramasIds.Count, partido.Nombre, categoria.Nombre); | ||||||
|  |  | ||||||
|  |               int contadorLote = 0; | ||||||
|  |               const int tamanoLote = 100; // Guardaremos de 100 en 100 | ||||||
|  |  | ||||||
|               foreach (var mesaId in nuevosTelegramasIds) |               foreach (var mesaId in nuevosTelegramasIds) | ||||||
|               { |               { | ||||||
|                 if (stoppingToken.IsCancellationRequested) return; |                 if (stoppingToken.IsCancellationRequested) return; | ||||||
| @@ -769,12 +772,9 @@ public class LowPriorityDataWorker : BackgroundService | |||||||
|                 var telegramaFile = await _apiService.GetTelegramaFileAsync(authToken, mesaId); |                 var telegramaFile = await _apiService.GetTelegramaFileAsync(authToken, mesaId); | ||||||
|                 if (telegramaFile != null) |                 if (telegramaFile != null) | ||||||
|                 { |                 { | ||||||
|                   // 1. Buscamos el AmbitoGeografico específico de la MESA que estamos procesando. |                   var ambitoMesa = await innerDbContext.AmbitosGeograficos.AsNoTracking() | ||||||
|                   var ambitoMesa = await innerDbContext.AmbitosGeograficos |  | ||||||
|                       .AsNoTracking() |  | ||||||
|                       .FirstOrDefaultAsync(a => a.MesaId == mesaId, stoppingToken); |                       .FirstOrDefaultAsync(a => a.MesaId == mesaId, stoppingToken); | ||||||
|  |  | ||||||
|                   // 2. Solo guardamos el telegrama si encontramos su ámbito de mesa correspondiente. |  | ||||||
|                   if (ambitoMesa != null) |                   if (ambitoMesa != null) | ||||||
|                   { |                   { | ||||||
|                     var nuevoTelegrama = new Telegrama |                     var nuevoTelegrama = new Telegrama | ||||||
| @@ -787,15 +787,30 @@ public class LowPriorityDataWorker : BackgroundService | |||||||
|                       FechaTotalizacion = DateTime.Parse(telegramaFile.FechaTotalizacion).ToUniversalTime() |                       FechaTotalizacion = DateTime.Parse(telegramaFile.FechaTotalizacion).ToUniversalTime() | ||||||
|                     }; |                     }; | ||||||
|                     await innerDbContext.Telegramas.AddAsync(nuevoTelegrama, stoppingToken); |                     await innerDbContext.Telegramas.AddAsync(nuevoTelegrama, stoppingToken); | ||||||
|  |                     contadorLote++; // Incrementamos el contador | ||||||
|                   } |                   } | ||||||
|                   else |                   else | ||||||
|                   { |                   { | ||||||
|                     _logger.LogWarning("No se encontró un ámbito geográfico para la mesa con MesaId {MesaId}. El telegrama no será guardado.", mesaId); |                     _logger.LogWarning("No se encontró un ámbito geográfico para la mesa con MesaId {MesaId}. El telegrama no será guardado.", mesaId); | ||||||
|                   } |                   } | ||||||
|                 } |                 } | ||||||
|                 await Task.Delay(250, stoppingToken); |                 await Task.Delay(250, stoppingToken); // Mantenemos el delay para no saturar la API | ||||||
|               } |  | ||||||
|  |                 // Si hemos alcanzado el tamaño del lote, guardamos y reseteamos. | ||||||
|  |                 if (contadorLote >= tamanoLote) | ||||||
|  |                 { | ||||||
|                   await innerDbContext.SaveChangesAsync(stoppingToken); |                   await innerDbContext.SaveChangesAsync(stoppingToken); | ||||||
|  |                   _logger.LogInformation("Guardado un lote de {count} telegramas.", contadorLote); | ||||||
|  |                   contadorLote = 0; // Reseteamos el contador para el siguiente lote | ||||||
|  |                 } | ||||||
|  |               } | ||||||
|  |  | ||||||
|  |               // Guardamos cualquier registro restante que no haya completado un lote completo. | ||||||
|  |               if (contadorLote > 0) | ||||||
|  |               { | ||||||
|  |                 await innerDbContext.SaveChangesAsync(stoppingToken); | ||||||
|  |                 _logger.LogInformation("Guardado el último lote de {count} telegramas.", contadorLote); | ||||||
|  |               } | ||||||
|             } |             } | ||||||
|           } |           } | ||||||
|           await Task.Delay(100, stoppingToken); |           await Task.Delay(100, stoppingToken); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user