using Microsoft.EntityFrameworkCore; namespace SpotiParty.Web.Services; public class CleanupService(IServiceProvider services, ILogger logger) : BackgroundService { protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { await using (var scope = services.CreateAsyncScope()) { var context = scope.ServiceProvider.GetRequiredService(); var now = DateTime.Now; var oldEvents = await context.Events .Where(e => e.End < now) .ToArrayAsync(stoppingToken); context.Events.RemoveRange(oldEvents); await context.SaveChangesAsync(stoppingToken); if (oldEvents.Length > 0) logger.LogInformation("Deleted {count} old events", oldEvents.Length); } var nextRun = DateTime.Today.AddDays(1).AddHours(3) - DateTime.Now; await Task.Delay(nextRun, stoppingToken); } } }