Phase 2: Optimize UserHasLoggedInCommand (Major Impact)
File: src/Services/Core/Core.Application/UserEvents/UserHasLoggedInCommand.cs
2.1 Remove duplicate GetUserById call
Pass keycloakUser to KeycloakAddUserToOrganizationIfIsNotAlreadyAndAssignsOwnerRoleCommand instead of re-fetching.
2.2 Optimize database query
Change from:
var owners = context.GetCurrentOwners(); // ALL owners!
foreach (var birthNumber in birthNumbers) {
var matchingOwners = await owners.Where(...).ToListAsync();
}
To:
// Single query with birth number filter pushed to database
var matchingOwners = await context.Owners
.Where(o => o.Persons.Any(p =>
p.Latest &&
!string.IsNullOrEmpty(p.NationalId) &&
birthNumbers.Contains(p.NationalId.Replace("/", ""))))
.Include(x => x.Persons.Where(p => p.Latest))
.ToListAsync(cancellationToken);
2.3 Add database index
Migration: Add index on Persons.NationalId for faster lookups.