Admin notes bugfixes (#18189)

This commit is contained in:
Pieter-Jan Briers
2023-07-21 15:43:47 +02:00
committed by GitHub
parent 703f3d8bc6
commit b4b0fe41db
10 changed files with 51 additions and 52 deletions

View File

@@ -1304,70 +1304,67 @@ INSERT INTO player_round (players_id, rounds_id) VALUES ({players[player]}, {id}
// You can't group queries, as player will not always exist. When it doesn't, the
// whole query returns nothing
var player = await db.DbContext.Player.SingleOrDefaultAsync(p => p.UserId == user);
return await (from ban in db.DbContext.Ban
where ban.PlayerUserId == user &&
!ban.Hidden
select ban)
var bans = await db.DbContext.Ban
.Where(ban => ban.PlayerUserId == user && !ban.Hidden)
.Include(ban => ban.Unban)
.Include(ban => ban.Round)
.ThenInclude(r => r!.Server)
.Include(ban => ban.CreatedBy)
.Include(ban => ban.LastEditedBy)
.Include(ban => ban.Unban)
.ToAsyncEnumerable()
.SelectAwait(async ban =>
new ServerBanNote(ban.Id, ban.RoundId, ban.Round, ban.PlayerUserId, player,
ban.PlaytimeAtNote, ban.Reason, ban.Severity, ban.CreatedBy, ban.BanTime,
ban.LastEditedBy, ban.LastEditedAt, ban.ExpirationTime, ban.Hidden,
ban.Unban?.UnbanningAdmin == null
? null
: await db.DbContext.Player.SingleOrDefaultAsync(p => p.UserId == ban.Unban.UnbanningAdmin.Value),
ban.Unban?.UnbanTime)
).ToListAsync();
.ToArrayAsync();
var banNotes = new List<ServerBanNote>();
foreach (var ban in bans)
{
var banNote = new ServerBanNote(ban.Id, ban.RoundId, ban.Round, ban.PlayerUserId, player,
ban.PlaytimeAtNote, ban.Reason, ban.Severity, ban.CreatedBy, ban.BanTime,
ban.LastEditedBy, ban.LastEditedAt, ban.ExpirationTime, ban.Hidden,
ban.Unban?.UnbanningAdmin == null
? null
: await db.DbContext.Player.SingleOrDefaultAsync(
p => p.UserId == ban.Unban.UnbanningAdmin.Value),
ban.Unban?.UnbanTime);
banNotes.Add(banNote);
}
return banNotes;
}
protected async Task<List<ServerRoleBanNote>> GetGroupedServerRoleBansAsNotesForUser(DbGuard db, Guid user)
{
// Server side query
var bansQuery =
(from ban in db.DbContext.RoleBan
where ban.PlayerUserId == user &&
!ban.Hidden
select ban)
var bansQuery = await db.DbContext.RoleBan
.Where(ban => ban.PlayerUserId == user && !ban.Hidden)
.Include(ban => ban.Unban)
.Include(ban => ban.Round)
.ThenInclude(r => r!.Server)
.Include(ban => ban.CreatedBy)
.Include(ban => ban.LastEditedBy)
.Include(ban => ban.Unban)
.ToAsyncEnumerable();
.ToArrayAsync();
// Client side query, as EF can't do groups yet
var bansEnumerable =
(from ban in bansQuery
group ban by new
{
ban.BanTime,
ban.CreatedBy,
ban.Reason,
Unbanned = ban.Unban == null
}
into banGroup
select banGroup)
.AsAsyncEnumerable();
var bansEnumerable = bansQuery
.GroupBy(ban => new { ban.BanTime, ban.CreatedBy, ban.Reason, Unbanned = ban.Unban == null })
.Select(banGroup => banGroup)
.ToArray();
List<ServerRoleBanNote> bans = new();
var player = await db.DbContext.Player.SingleOrDefaultAsync(p => p.UserId == user);
await foreach (var banGroup in bansEnumerable)
foreach (var banGroup in bansEnumerable)
{
var firstBan = await banGroup.FirstAsync();
var firstBan = banGroup.First();
Player? unbanningAdmin = null;
if (firstBan.Unban?.UnbanningAdmin is not null)
unbanningAdmin = await db.DbContext.Player.SingleOrDefaultAsync(p => p.UserId == firstBan.Unban.UnbanningAdmin.Value);
bans.Add(new ServerRoleBanNote(firstBan.Id, firstBan.RoundId, firstBan.Round, firstBan.PlayerUserId,
player, firstBan.PlaytimeAtNote, firstBan.Reason, firstBan.Severity, firstBan.CreatedBy,
firstBan.BanTime, firstBan.LastEditedBy, firstBan.LastEditedAt, firstBan.ExpirationTime,
firstBan.Hidden, await banGroup.Select(ban => ban.RoleId.Replace(BanManager.JobPrefix, null)).ToArrayAsync(),
firstBan.Hidden, banGroup.Select(ban => ban.RoleId.Replace(BanManager.JobPrefix, null)).ToArray(),
unbanningAdmin, firstBan.Unban?.UnbanTime));
}