[backend/core] Refactor GetOrCreateSystemUserAsync

This commit is contained in:
Laura Hausmann 2024-06-21 20:15:36 +02:00
parent dd3ea49367
commit 2e536bcd47
No known key found for this signature in database
GPG key ID: D044E84C5BE01605

View file

@ -51,19 +51,16 @@ public class SystemUserService(ILogger<SystemUserService> logger, DatabaseContex
.FirstOrDefault(p => p.Entity.UsernameLower == username.ToLowerInvariant())
?.Entity;
user ??= await cache.FetchAsync($"systemUser:{username}", TimeSpan.FromHours(24), async () =>
{
user ??= await db.Users.FirstOrDefaultAsync(p => p.UsernameLower == username.ToLowerInvariant() &&
p.IsLocalUser);
if (user != null) return user;
using (await KeyedLocker.LockAsync(username.ToLowerInvariant()))
{
logger.LogTrace("GetOrCreateSystemUser delegate method called for user {username}", username);
return await db.Users.FirstOrDefaultAsync(p => p.UsernameLower == username.ToLowerInvariant() &&
p.IsLocalUser) ??
await CreateSystemUserAsync(username);
return await CreateSystemUserAsync(username);
}
});
db.Attach(user);
return user;
}
private async Task<User> CreateSystemUserAsync(string username)