namespace MealPlan.Api.Services; /// /// Periodically purges expired and revoked refresh tokens from the in-memory store. /// public class RefreshTokenCleanupService : BackgroundService { private readonly IRefreshTokenStore _store; private readonly ILogger _logger; public RefreshTokenCleanupService( IRefreshTokenStore store, ILogger logger) { _store = store; _logger = logger; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { try { _store.RemoveExpired(); } catch (Exception ex) { _logger.LogWarning(ex, "Refresh token cleanup failed"); } await Task.Delay(TimeSpan.FromHours(1), stoppingToken); } } }