Redoing of groupsgetall
This commit is contained in:
@@ -192,6 +192,7 @@ public partial class LightlessHub
|
||||
GroupUserUID = UserUID,
|
||||
IsPinned = true,
|
||||
JoinedGroupOn = currentTime,
|
||||
FromFinder = false,
|
||||
};
|
||||
|
||||
GroupPairPreferredPermission initialPrefPermissions = new()
|
||||
@@ -804,17 +805,42 @@ public partial class LightlessHub
|
||||
{
|
||||
_logger.LogCallInfo();
|
||||
|
||||
var groups = await DbContext.GroupPairs.Include(g => g.Group).Include(g => g.Group.Owner).Where(g => g.GroupUserUID == UserUID).AsNoTracking().ToListAsync(cancellationToken: _contextAccessor.HttpContext.RequestAborted).ConfigureAwait(false);
|
||||
var preferredPermissions = (await DbContext.GroupPairPreferredPermissions.Where(u => u.UserUID == UserUID).ToListAsync(cancellationToken: _contextAccessor.HttpContext.RequestAborted).ConfigureAwait(false))
|
||||
.Where(u => groups.Exists(k => string.Equals(k.GroupGID, u.GroupGID, StringComparison.Ordinal)))
|
||||
.ToDictionary(u => groups.First(f => string.Equals(f.GroupGID, u.GroupGID, StringComparison.Ordinal)), u => u);
|
||||
var groupInfos = await DbContext.GroupPairs.Where(u => groups.Select(g => g.GroupGID).Contains(u.GroupGID) && (u.IsPinned || u.IsModerator))
|
||||
.ToListAsync(cancellationToken: _contextAccessor.HttpContext.RequestAborted).ConfigureAwait(false);
|
||||
var ct = _contextAccessor.HttpContext.RequestAborted;
|
||||
|
||||
return preferredPermissions.Select(g => new GroupFullInfoDto(g.Key.Group.ToGroupData(), g.Key.Group.Owner.ToUserData(),
|
||||
g.Key.Group.ToEnum(), g.Value.ToEnum(), g.Key.ToEnum(),
|
||||
groupInfos.Where(i => string.Equals(i.GroupGID, g.Key.GroupGID, StringComparison.Ordinal))
|
||||
.ToDictionary(i => i.GroupUserUID, i => i.ToEnum(), StringComparer.Ordinal))).ToList();
|
||||
var result = await (
|
||||
from gp in DbContext.GroupPairs
|
||||
.Include(gp => gp.Group)
|
||||
.ThenInclude(g => g.Owner)
|
||||
join pp in DbContext.GroupPairPreferredPermissions
|
||||
on new { gp.GroupGID, UserUID } equals new { pp.GroupGID, pp.UserUID }
|
||||
where gp.GroupUserUID == UserUID
|
||||
select new
|
||||
{
|
||||
GroupPair = gp,
|
||||
PreferredPermission = pp,
|
||||
GroupInfos = DbContext.GroupPairs
|
||||
.Where(x => x.GroupGID == gp.GroupGID && (x.IsPinned || x.IsModerator))
|
||||
.Select(x => new { x.GroupUserUID, EnumValue = x.ToEnum() })
|
||||
.ToList() // forces subquery per row
|
||||
})
|
||||
.AsNoTracking()
|
||||
.ToListAsync(ct)
|
||||
.ConfigureAwait(false);
|
||||
|
||||
return [.. result.Select(r =>
|
||||
{
|
||||
var groupInfoDict = r.GroupInfos
|
||||
.ToDictionary(x => x.GroupUserUID, x => x.EnumValue, StringComparer.Ordinal);
|
||||
|
||||
return new GroupFullInfoDto(
|
||||
r.GroupPair.Group.ToGroupData(),
|
||||
r.GroupPair.Group.Owner.ToUserData(),
|
||||
r.GroupPair.Group.ToEnum(),
|
||||
r.PreferredPermission.ToEnum(),
|
||||
r.GroupPair.ToEnum(),
|
||||
groupInfoDict
|
||||
);
|
||||
})];
|
||||
}
|
||||
|
||||
[Authorize(Policy = "Identified")]
|
||||
|
||||
Reference in New Issue
Block a user