Added autodelete for users after one year inactivity

This commit is contained in:
Sarah Faey 2022-12-08 17:37:00 +01:00
parent c886c6475e
commit 929ca9c0a7
7 changed files with 730 additions and 2 deletions

View file

@ -112,6 +112,9 @@ namespace Lieb.Data
return false;
}
using var context = _contextFactory.CreateDbContext();
LiebUser user = context.LiebUsers.FirstOrDefault(l => l.Id == liebUserId);
if(user == null) return false;
List<RaidSignUp> signUps = context.RaidSignUps.Where(r => r.RaidId == raidId && r.LiebUserId == liebUserId).ToList();
if (signUpType != SignUpType.Flex && signUps.Where(r => r.SignUpType != SignUpType.Flex).Any())
@ -122,15 +125,16 @@ namespace Lieb.Data
else if (!signUps.Where(r => r.RaidRoleId == plannedRoleId).Any())
{
RaidSignUp signUp = new RaidSignUp(raidId, liebUserId, guildWars2AccountId, plannedRoleId, signUpType);
string userName = context.LiebUsers.FirstOrDefault(l => l.Id == liebUserId)?.Name;
context.RaidSignUps.Add(signUp);
await context.SaveChangesAsync();
await LogSignUp(signUp, userName, signedUpByUserId);
await LogSignUp(signUp, user.Name, signedUpByUserId);
}
else
{
return false;
}
user.LastSignUpAt = DateTime.UtcNow;
await context.SaveChangesAsync();
await _discordService.PostRaidMessage(raidId);
return true;
}

View file

@ -6,6 +6,7 @@ namespace Lieb.Data
{
private Timer _minuteTimer = null!;
private Timer _fiveMinuteTimer = null!;
private Timer _dailyTimer = null!;
private IServiceProvider _services;
public TimerService(IServiceProvider services)
@ -19,6 +20,8 @@ namespace Lieb.Data
TimeSpan.FromMinutes(1));
_fiveMinuteTimer = new Timer(CleanUpRaids, null, TimeSpan.Zero,
TimeSpan.FromMinutes(5));
_dailyTimer = new Timer(CleanUpDatabase, null, TimeSpan.Zero,
TimeSpan.FromDays(1));
return Task.CompletedTask;
}
@ -59,6 +62,17 @@ namespace Lieb.Data
}
}
private async void CleanUpDatabase(object? state)
{
using (var scope = _services.CreateScope())
{
var userService =
scope.ServiceProvider
.GetRequiredService<UserService>();
await userService.DeleteInactiveUsers();
}
}
public Task StopAsync(CancellationToken stoppingToken)
{
_minuteTimer?.Change(Timeout.Infinite, 0);

View file

@ -318,5 +318,20 @@ namespace Lieb.Data
return usableAccounts.First().GuildWars2AccountId;
}
}
public async Task DeleteInactiveUsers()
{
using var context = _contextFactory.CreateDbContext();
List<LiebUser> users = context.LiebUsers.ToList();
foreach(LiebUser user in users)
{
if((user.LastSignUpAt == null && user.CreatedAt < DateTime.UtcNow.AddYears(-1))
|| (user.LastSignUpAt != null && user.LastSignUpAt < DateTime.UtcNow.AddYears(-1)))
{
await DeleteUser(user.Id);
}
}
}
}
}