diff --git a/API/Workers/PeriodicWorkers/UpdateMetadataWorker.cs b/API/Workers/PeriodicWorkers/UpdateMetadataWorker.cs new file mode 100644 index 0000000..dfb6532 --- /dev/null +++ b/API/Workers/PeriodicWorkers/UpdateMetadataWorker.cs @@ -0,0 +1,31 @@ +using API.Schema.MangaContext; +using API.Schema.MangaContext.MetadataFetchers; +using Microsoft.EntityFrameworkCore; + +namespace API.Workers; + +public class UpdateMetadataWorker(TimeSpan? interval = null, IEnumerable? dependsOn = null) + : BaseWorkerWithContext(dependsOn), IPeriodic +{ + + public DateTime LastExecution { get; set; } = DateTime.UtcNow; + public TimeSpan Interval { get; set; } = interval ?? TimeSpan.FromHours(12); + + protected override BaseWorker[] DoWorkInternal() + { + IQueryable mangaIds = DbContext.MangaConnectorToManga + .Where(m => m.UseForDownload) + .Select(m => m.ObjId); + IQueryable metadataEntriesToUpdate = DbContext.MetadataEntries + .Include(e => e.MetadataFetcher) + .Where(e => + mangaIds.Any(id => id == e.MangaId)); + + foreach (MetadataEntry metadataEntry in metadataEntriesToUpdate) + metadataEntry.MetadataFetcher.UpdateMetadata(metadataEntry, DbContext); + + DbContext.Sync(); + + return []; + } +} \ No newline at end of file