Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -372,62 +372,65 @@

List<int> userIds = dtos.Count == 1 ? new List<int> {dtos[0].Id} : dtos.Select(x => x.Id).ToList();
Dictionary<int, UserDto>? xUsers = dtos.Count == 1 ? null : dtos.ToDictionary(x => x.Id, x => x);
Sql<ISqlContext> sql;

// get users2groups

Sql<ISqlContext> sql = SqlContext.Sql()
.Select<User2UserGroupDto>()
.From<User2UserGroupDto>()
.WhereIn<User2UserGroupDto>(x => x.UserId, userIds);

List<User2UserGroupDto>? user2Groups = Database.Fetch<User2UserGroupDto>(sql);
var user2Groups = Database.FetchByGroups<User2UserGroupDto, int>(userIds, Constants.Sql.MaxParameterCount, ints =>
{
return SqlContext.Sql()
.Select<User2UserGroupDto>()
.From<User2UserGroupDto>()
.WhereIn<User2UserGroupDto>(x => x.UserId, ints);
}).ToList();
var groupIds = user2Groups.Select(x => x.UserGroupId).ToList();

// get groups
// We wrap this in a try-catch, as this might throw errors when you try to login before having migrated your database
Dictionary<int, UserGroupDto> groups;
try
{
sql = SqlContext.Sql()
.Select<UserGroupDto>()
.From<UserGroupDto>()
.WhereIn<UserGroupDto>(x => x.Id, groupIds);

groups = Database.Fetch<UserGroupDto>(sql)
.ToDictionary(x => x.Id, x => x);
}
catch(Exception e)
{
Logger.LogDebug(e, "Couldn't get user groups. This should only happens doing the migration that add new columns to user groups");

sql = SqlContext.Sql()
.Select<UserGroupDto>(x=>x.Id, x=>x.Alias, x=>x.StartContentId, x=>x.StartMediaId)
.From<UserGroupDto>()
.WhereIn<UserGroupDto>(x => x.Id, groupIds);

groups = Database.Fetch<UserGroupDto>(sql)
.ToDictionary(x => x.Id, x => x);
}

// get groups2apps

sql = SqlContext.Sql()
.Select<UserGroup2AppDto>()
.From<UserGroup2AppDto>()
.WhereIn<UserGroup2AppDto>(x => x.UserGroupId, groupIds);

var groups2Apps = Database.Fetch<UserGroup2AppDto>(sql)
.GroupBy(x => x.UserGroupId)
.ToDictionary(x => x.Key, x => x);

// get start nodes

sql = SqlContext.Sql()
.Select<UserStartNodeDto>()
.From<UserStartNodeDto>()
.WhereIn<UserStartNodeDto>(x => x.UserId, userIds);

List<UserStartNodeDto>? startNodes = Database.Fetch<UserStartNodeDto>(sql);
var startNodes = Database.FetchByGroups<UserStartNodeDto, int>(userIds, Constants.Sql.MaxParameterCount, ints =>
{
return SqlContext.Sql()
.Select<UserStartNodeDto>()
.From<UserStartNodeDto>()
.WhereIn<UserStartNodeDto>(x => x.UserId, ints);
}).ToList();

Check warning on line 433 in src/Umbraco.Infrastructure/Persistence/Repositories/Implement/UserRepository.cs

View check run for this annotation

CodeScene Delta Analysis / CodeScene Code Health Review (v13/dev)

❌ Getting worse: Complex Method

PerformGetReferencedDtos already has high cyclomatic complexity, and now it increases in Lines of Code from 89 to 94. This function has many conditional statements (e.g. if, for, while), leading to lower code health. Avoid adding more conditionals and code to it without refactoring.

// get groups2languages

Expand Down
Loading