Files
SpotiParty/SpotiParty.Web/Services/CleanupService.cs

27 lines
1.1 KiB
C#

using Microsoft.EntityFrameworkCore;
namespace SpotiParty.Web.Services;
public class CleanupService(IServiceProvider services, ILogger<CleanupService> logger) : BackgroundService {
protected override async Task ExecuteAsync(CancellationToken stoppingToken) {
while (!stoppingToken.IsCancellationRequested) {
await using (var scope = services.CreateAsyncScope()) {
var context = scope.ServiceProvider.GetRequiredService<DatabaseContext>();
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);
}
}
}