diff --git a/src/infrastructure/DigitalData.MessagingService.Infrastructure/Services/Background/EmailAccountSyncWorker.cs b/src/infrastructure/DigitalData.MessagingService.Infrastructure/Services/Background/EmailAccountSyncWorker.cs deleted file mode 100644 index dc37a84..0000000 --- a/src/infrastructure/DigitalData.MessagingService.Infrastructure/Services/Background/EmailAccountSyncWorker.cs +++ /dev/null @@ -1,26 +0,0 @@ -using DigitalData.MessagingService.Application.Common.Interfaces.Repositories; -using DigitalData.MessagingService.Application.Common.Options; -using DigitalData.MessagingService.Domain.Entities; -using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.Options; - -namespace DigitalData.MessagingService.Infrastructure.Services.Background; - -/// -/// A hosted background service responsible for initializing the competing email consumer pool. -/// Leverages a push-based, event-driven RabbitMQ consumer to eliminate polling overhead. -/// Email account configuration is resolved exclusively from application settings; no database access is performed. -/// -public class EmailAccountSyncWorker(IRepository Repository, IOptions Options) : BackgroundService -{ - protected override async Task ExecuteAsync(CancellationToken stoppingToken) - { - foreach (var account in Options.Value.Accounts) - { - if (account is EmailAccount emailAccount) - await Repository.UpsertAsync(a => a.Username == emailAccount.Username, emailAccount, stoppingToken); - } - - await Task.Delay(Timeout.Infinite, stoppingToken).ConfigureAwait(ConfigureAwaitOptions.SuppressThrowing); - } -} \ No newline at end of file diff --git a/src/infrastructure/DigitalData.MessagingService.Infrastructure/Services/Background/EmailSyncWorker.cs b/src/infrastructure/DigitalData.MessagingService.Infrastructure/Services/Background/EmailSyncWorker.cs index be01c30..7222811 100644 --- a/src/infrastructure/DigitalData.MessagingService.Infrastructure/Services/Background/EmailSyncWorker.cs +++ b/src/infrastructure/DigitalData.MessagingService.Infrastructure/Services/Background/EmailSyncWorker.cs @@ -1,17 +1,22 @@ using DigitalData.MessagingService.Application.Common.Dto.MailSearch; using DigitalData.MessagingService.Application.Common.Interfaces; +using DigitalData.MessagingService.Application.Common.Interfaces.Repositories; using DigitalData.MessagingService.Application.Common.Options; +using DigitalData.MessagingService.Domain.Entities; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Options; namespace DigitalData.MessagingService.Infrastructure.Services.Background; -public class EmailSyncWorker(IImapEmailService imapService, IOptions Options) : BackgroundService +public class EmailSyncWorker(IImapEmailService imapService, IOptions Options, IServiceProvider Provider) : BackgroundService { private DateFilter? _dateFilter = null; protected override async Task ExecuteAsync(CancellationToken stoppingToken) { + await UpsertSeedEmailAccount(stoppingToken); + if (imapService is not LimilabsImapEmailService limapService) { await Task.Delay(Timeout.Infinite, stoppingToken).ConfigureAwait(ConfigureAwaitOptions.SuppressThrowing); @@ -22,7 +27,11 @@ public class EmailSyncWorker(IImapEmailService imapService, IOptions>(); + + foreach (var account in await emailAccountRepo.GetAllAsync(stoppingToken)) if (account.ImapServer is not null) { // init or update last date filter @@ -44,4 +53,15 @@ public class EmailSyncWorker(IImapEmailService imapService, IOptions>(); + + // init seed email accounts if not exist + foreach (var account in Options.Value.Accounts) + await emailAccountRepo.UpsertAsync(a => a.Username == account.Username, account, stoppingToken); + } } \ No newline at end of file