27 lines
1.1 KiB
C#
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);
|
|
}
|
|
}
|
|
} |