fix cache issue

This commit is contained in:
Alex Bezdieniezhnykh
2025-04-16 01:49:34 +03:00
parent 461606ef08
commit 4fc1fb4d63
3 changed files with 11 additions and 21 deletions
+2 -1
View File
@@ -10,7 +10,8 @@ public class User
public UserConfig? UserConfig { get; set; } = null!; public UserConfig? UserConfig { get; set; } = null!;
public static string GetCacheKey(string email) => $"{nameof(User)}.{email}"; public static string GetCacheKey(string email) =>
string.IsNullOrEmpty(email) ? "" : $"{nameof(User)}.{email}";
} }
public class UserConfig public class UserConfig
+4 -10
View File
@@ -11,28 +11,22 @@ namespace Azaion.Services;
public interface IAuthService public interface IAuthService
{ {
Guid? GetCurrentUserId();
Task<User?> GetCurrentUser(); Task<User?> GetCurrentUser();
string CreateToken(User user); string CreateToken(User user);
} }
public class AuthService(IHttpContextAccessor httpContextAccessor, IOptions<JwtConfig> jwtConfig, IUserService userService) : IAuthService public class AuthService(IHttpContextAccessor httpContextAccessor, IOptions<JwtConfig> jwtConfig, IUserService userService) : IAuthService
{ {
private string? GetCurrentUserEmail()
public Guid? GetCurrentUserId()
{ {
var claims = httpContextAccessor.HttpContext?.User.Claims.ToDictionary(x => x.Type); var claims = httpContextAccessor.HttpContext?.User.Claims.ToDictionary(x => x.Type);
if (claims == null) return claims?[ClaimTypes.Name].Value;
return null;
var id = Guid.Parse(claims[ClaimTypes.NameIdentifier].Value);
return id;
} }
public async Task<User?> GetCurrentUser() public async Task<User?> GetCurrentUser()
{ {
var id = GetCurrentUserId(); var email = GetCurrentUserEmail();
return await userService.GetById(id); return await userService.GetByEmail(email);
} }
public string CreateToken(User user) public string CreateToken(User user)
+4 -9
View File
@@ -12,8 +12,7 @@ public interface IUserService
{ {
Task RegisterUser(RegisterUserRequest request, CancellationToken cancellationToken = default); Task RegisterUser(RegisterUserRequest request, CancellationToken cancellationToken = default);
Task<User> ValidateUser(LoginRequest request, CancellationToken cancellationToken = default); Task<User> ValidateUser(LoginRequest request, CancellationToken cancellationToken = default);
Task<User?> GetById(Guid? id, CancellationToken cancellationToken = default); Task<User?> GetByEmail(string? email, CancellationToken cancellationToken = default);
Task<User?> GetByEmail(string email, CancellationToken cancellationToken = default);
Task UpdateHardware(string email, HardwareInfo hardwareInfo, CancellationToken cancellationToken = default); Task UpdateHardware(string email, HardwareInfo hardwareInfo, CancellationToken cancellationToken = default);
Task UpdateQueueOffsets(string email, UserQueueOffsets queueOffsets, CancellationToken cancellationToken = default); Task UpdateQueueOffsets(string email, UserQueueOffsets queueOffsets, CancellationToken cancellationToken = default);
Task<IEnumerable<User>> GetUsers(string? searchEmail, RoleEnum? searchRole, CancellationToken cancellationToken); Task<IEnumerable<User>> GetUsers(string? searchEmail, RoleEnum? searchRole, CancellationToken cancellationToken);
@@ -40,14 +39,10 @@ public class UserService(IDbFactory dbFactory, ICache cache) : IUserService
}); });
} }
public async Task<User?> GetById(Guid? id, CancellationToken cancellationToken = default) => public async Task<User?> GetByEmail(string? email, CancellationToken cancellationToken = default) =>
await cache.GetFromCacheAsync($"{nameof(User)}.{id}", await cache.GetFromCacheAsync(User.GetCacheKey(email),
async () => await dbFactory.Run(async db => async () => await dbFactory.Run(async db =>
await db.Users.FirstOrDefaultAsync(x => x.Id == id, cancellationToken)), TimeSpan.FromHours(2)); await db.Users.FirstOrDefaultAsync(x => x.Email == email, cancellationToken)));
public async Task<User?> GetByEmail(string email, CancellationToken cancellationToken = default) =>
await dbFactory.Run(async db =>
await db.Users.FirstOrDefaultAsync(x => x.Email == email, cancellationToken));
public async Task<User> ValidateUser(LoginRequest request, CancellationToken cancellationToken = default) => public async Task<User> ValidateUser(LoginRequest request, CancellationToken cancellationToken = default) =>
await dbFactory.Run(async db => await dbFactory.Run(async db =>