using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using Quartz; namespace DysonNetwork.Sphere.Connection.WebReader; [DisallowConcurrentExecution] public class WebFeedScraperJob( AppDatabase database, WebFeedService webFeedService, ILogger logger ) : IJob { public async Task Execute(IJobExecutionContext context) { logger.LogInformation("Starting web feed scraper job."); var feeds = await database.Set().ToListAsync(context.CancellationToken); foreach (var feed in feeds) { try { await webFeedService.ScrapeFeedAsync(feed, context.CancellationToken); } catch (Exception ex) { logger.LogError(ex, "Failed to scrape web feed {FeedId}", feed.Id); } } logger.LogInformation("Web feed scraper job finished."); } }