forked from Sarah/Lieb-Website
Added autodelete for users after one year inactivity
This commit is contained in:
parent
c886c6475e
commit
929ca9c0a7
7 changed files with 730 additions and 2 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue