Raid messages are now deleted after the raid ends.

Raids are deleted after a year
This commit is contained in:
Sarah Faey 2022-11-19 00:22:08 +01:00
parent 25a381124d
commit 803332bc5c
2 changed files with 40 additions and 5 deletions

View file

@ -485,6 +485,25 @@ namespace Lieb.Data
} }
} }
public async Task CleanUpRaids()
{
using var context = _contextFactory.CreateDbContext();
List<Raid> raids = GetRaids();
DateTimeOffset utcNow = DateTimeOffset.UtcNow;
foreach(Raid raid in raids.Where(r => r.EndTimeUTC < utcNow.AddYears(-1)))
{
await DeleteRaid(raid.RaidId);
}
foreach(Raid raid in raids.Where(r => r.EndTimeUTC < utcNow.AddHours(-1)))
{
await _discordService.DeleteRaidMessages(raid);
context.RaidReminders.RemoveRange(raid.Reminders);
context.DiscordRaidMessages.RemoveRange(raid.DiscordRaidMessages);
await context.SaveChangesAsync();
}
}
public RaidRole CreateRandomSignUpRole(RaidType raidType) public RaidRole CreateRandomSignUpRole(RaidType raidType)
{ {
return new RaidRole() return new RaidRole()

View file

@ -4,7 +4,8 @@ namespace Lieb.Data
{ {
public class TimerService : IHostedService, IDisposable public class TimerService : IHostedService, IDisposable
{ {
private Timer _timer = null!; private Timer _minuteTimer = null!;
private Timer _fiveMinuteTimer = null!;
private IServiceProvider _services; private IServiceProvider _services;
public TimerService(IServiceProvider services) public TimerService(IServiceProvider services)
@ -14,8 +15,10 @@ namespace Lieb.Data
public Task StartAsync(CancellationToken stoppingToken) public Task StartAsync(CancellationToken stoppingToken)
{ {
_timer = new Timer(CheckRaids, null, TimeSpan.Zero, _minuteTimer = new Timer(CheckRaids, null, TimeSpan.Zero,
TimeSpan.FromMinutes(1)); TimeSpan.FromMinutes(1));
_fiveMinuteTimer = new Timer(CleanUpRaids, null, TimeSpan.Zero,
TimeSpan.FromMinutes(5));
return Task.CompletedTask; return Task.CompletedTask;
} }
@ -45,16 +48,29 @@ namespace Lieb.Data
} }
} }
private async void CleanUpRaids(object? state)
{
using (var scope = _services.CreateScope())
{
var raidService =
scope.ServiceProvider
.GetRequiredService<RaidService>();
await raidService.CleanUpRaids();
}
}
public Task StopAsync(CancellationToken stoppingToken) public Task StopAsync(CancellationToken stoppingToken)
{ {
_timer?.Change(Timeout.Infinite, 0); _minuteTimer?.Change(Timeout.Infinite, 0);
_fiveMinuteTimer?.Change(Timeout.Infinite, 0);
return Task.CompletedTask; return Task.CompletedTask;
} }
public void Dispose() public void Dispose()
{ {
_timer?.Dispose(); _minuteTimer?.Dispose();
_fiveMinuteTimer?.Dispose();
} }
} }
} }