Redoing of groupsgetall
This commit is contained in:
@@ -192,6 +192,7 @@ public partial class LightlessHub
|
|||||||
GroupUserUID = UserUID,
|
GroupUserUID = UserUID,
|
||||||
IsPinned = true,
|
IsPinned = true,
|
||||||
JoinedGroupOn = currentTime,
|
JoinedGroupOn = currentTime,
|
||||||
|
FromFinder = false,
|
||||||
};
|
};
|
||||||
|
|
||||||
GroupPairPreferredPermission initialPrefPermissions = new()
|
GroupPairPreferredPermission initialPrefPermissions = new()
|
||||||
@@ -804,17 +805,42 @@ public partial class LightlessHub
|
|||||||
{
|
{
|
||||||
_logger.LogCallInfo();
|
_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 ct = _contextAccessor.HttpContext.RequestAborted;
|
||||||
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);
|
|
||||||
|
|
||||||
return preferredPermissions.Select(g => new GroupFullInfoDto(g.Key.Group.ToGroupData(), g.Key.Group.Owner.ToUserData(),
|
var result = await (
|
||||||
g.Key.Group.ToEnum(), g.Value.ToEnum(), g.Key.ToEnum(),
|
from gp in DbContext.GroupPairs
|
||||||
groupInfos.Where(i => string.Equals(i.GroupGID, g.Key.GroupGID, StringComparison.Ordinal))
|
.Include(gp => gp.Group)
|
||||||
.ToDictionary(i => i.GroupUserUID, i => i.ToEnum(), StringComparer.Ordinal))).ToList();
|
.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")]
|
[Authorize(Policy = "Identified")]
|
||||||
|
|||||||
Reference in New Issue
Block a user