//----------------------------------------------------------------------- // // Copyright (c) lanedirt. All rights reserved. // Licensed under the AGPLv3 license. See LICENSE.md file in the project root for full license information. // //----------------------------------------------------------------------- namespace AliasVault.TaskRunner.Tasks; using AliasServerDb; using AliasVault.Shared.Server.Services; using Microsoft.EntityFrameworkCore; /// /// A maintenance task that deletes old emails based on server settings. /// public class EmailCleanupTask : IMaintenanceTask { private readonly ILogger _logger; private readonly IAliasServerDbContextFactory _dbContextFactory; private readonly ServerSettingsService _settingsService; /// /// Initializes a new instance of the class. /// /// The logger. /// The database context factory. /// The settings service. public EmailCleanupTask( ILogger logger, IAliasServerDbContextFactory dbContextFactory, ServerSettingsService settingsService) { _logger = logger; _dbContextFactory = dbContextFactory; _settingsService = settingsService; } /// public string Name => "Email Cleanup"; /// public async Task ExecuteAsync(CancellationToken cancellationToken) { var settings = await _settingsService.GetAllSettingsAsync(); if (settings.EmailRetentionDays <= 0) { return; } await using var dbContext = await _dbContextFactory.CreateDbContextAsync(cancellationToken); var cutoffDate = DateTime.UtcNow.AddDays(-settings.EmailRetentionDays); // Delete the emails var emailsDeleted = await dbContext.Emails .Where(x => x.DateSystem < cutoffDate) .ExecuteDeleteAsync(cancellationToken); _logger.LogWarning( "Deleted {EmailCount} emails older than {Days} days", emailsDeleted, settings.EmailRetentionDays); } }