add prune to groups

update submodule

allow moderator to check for inactive user count

allow moderators to prune

do not allow to prune owner
This commit is contained in:
rootdarkarchon
2024-02-09 10:35:58 +01:00
committed by Loporrit
parent e8d99a0d17
commit e01883fd4b
2 changed files with 32 additions and 1 deletions

Submodule MareAPI updated: 126b54e552...1163f38f70

View File

@@ -410,6 +410,37 @@ public partial class MareHub
await UserLeaveGroup(dto, UserUID).ConfigureAwait(false); await UserLeaveGroup(dto, UserUID).ConfigureAwait(false);
} }
[Authorize(Policy = "Identified")]
public async Task<int> GroupPrune(GroupDto dto, int days, bool execute)
{
_logger.LogCallInfo(MareHubLogger.Args(dto, days, execute));
var (hasRights, group) = await TryValidateGroupModeratorOrOwner(dto.Group.GID).ConfigureAwait(false);
if (!hasRights) return -1;
var allGroupUsers = await _dbContext.GroupPairs.Include(p => p.GroupUser).Include(p => p.Group)
.Where(g => g.GroupGID == dto.Group.GID)
.ToListAsync().ConfigureAwait(false);
var usersToPrune = allGroupUsers.Where(p => !p.IsPinned && !p.IsModerator
&& p.GroupUserUID != UserUID
&& p.Group.OwnerUID != p.GroupUserUID
&& p.GroupUser.LastLoggedIn.AddDays(days) < DateTime.UtcNow);
if (!execute) return usersToPrune.Count();
_dbContext.GroupPairs.RemoveRange(usersToPrune);
foreach (var pair in usersToPrune)
{
await Clients.Users(allGroupUsers.Where(p => !usersToPrune.Contains(p)).Select(g => g.GroupUserUID))
.Client_GroupPairLeft(new GroupPairDto(dto.Group, pair.GroupUser.ToUserData())).ConfigureAwait(false);
}
await _dbContext.SaveChangesAsync().ConfigureAwait(false);
return usersToPrune.Count();
}
[Authorize(Policy = "Identified")] [Authorize(Policy = "Identified")]
public async Task GroupRemoveUser(GroupPairDto dto) public async Task GroupRemoveUser(GroupPairDto dto)
{ {