From 4fc1fb4d6373668aef9a1ea711e53b016d8df1ce Mon Sep 17 00:00:00 2001 From: Alex Bezdieniezhnykh Date: Wed, 16 Apr 2025 01:49:34 +0300 Subject: [PATCH] fix cache issue --- Azaion.Common/Entities/User.cs | 3 ++- Azaion.Services/AuthService.cs | 16 +++++----------- Azaion.Services/UserService.cs | 13 ++++--------- 3 files changed, 11 insertions(+), 21 deletions(-) diff --git a/Azaion.Common/Entities/User.cs b/Azaion.Common/Entities/User.cs index 67d73fb..836cd08 100644 --- a/Azaion.Common/Entities/User.cs +++ b/Azaion.Common/Entities/User.cs @@ -10,7 +10,8 @@ public class User 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 diff --git a/Azaion.Services/AuthService.cs b/Azaion.Services/AuthService.cs index 1879ce6..157f973 100644 --- a/Azaion.Services/AuthService.cs +++ b/Azaion.Services/AuthService.cs @@ -11,28 +11,22 @@ namespace Azaion.Services; public interface IAuthService { - Guid? GetCurrentUserId(); - Task GetCurrentUser(); + Task GetCurrentUser(); string CreateToken(User user); } public class AuthService(IHttpContextAccessor httpContextAccessor, IOptions jwtConfig, IUserService userService) : IAuthService { - - public Guid? GetCurrentUserId() + private string? GetCurrentUserEmail() { var claims = httpContextAccessor.HttpContext?.User.Claims.ToDictionary(x => x.Type); - if (claims == null) - return null; - - var id = Guid.Parse(claims[ClaimTypes.NameIdentifier].Value); - return id; + return claims?[ClaimTypes.Name].Value; } public async Task GetCurrentUser() { - var id = GetCurrentUserId(); - return await userService.GetById(id); + var email = GetCurrentUserEmail(); + return await userService.GetByEmail(email); } public string CreateToken(User user) diff --git a/Azaion.Services/UserService.cs b/Azaion.Services/UserService.cs index eca7a65..4bf003f 100644 --- a/Azaion.Services/UserService.cs +++ b/Azaion.Services/UserService.cs @@ -12,8 +12,7 @@ public interface IUserService { Task RegisterUser(RegisterUserRequest request, CancellationToken cancellationToken = default); Task ValidateUser(LoginRequest request, CancellationToken cancellationToken = default); - Task GetById(Guid? id, CancellationToken cancellationToken = default); - Task GetByEmail(string email, CancellationToken cancellationToken = default); + Task GetByEmail(string? email, CancellationToken cancellationToken = default); Task UpdateHardware(string email, HardwareInfo hardwareInfo, CancellationToken cancellationToken = default); Task UpdateQueueOffsets(string email, UserQueueOffsets queueOffsets, CancellationToken cancellationToken = default); Task> GetUsers(string? searchEmail, RoleEnum? searchRole, CancellationToken cancellationToken); @@ -40,14 +39,10 @@ public class UserService(IDbFactory dbFactory, ICache cache) : IUserService }); } - public async Task GetById(Guid? id, CancellationToken cancellationToken = default) => - await cache.GetFromCacheAsync($"{nameof(User)}.{id}", + public async Task GetByEmail(string? email, CancellationToken cancellationToken = default) => + await cache.GetFromCacheAsync(User.GetCacheKey(email), async () => await dbFactory.Run(async db => - await db.Users.FirstOrDefaultAsync(x => x.Id == id, cancellationToken)), TimeSpan.FromHours(2)); - - public async Task GetByEmail(string email, CancellationToken cancellationToken = default) => - await dbFactory.Run(async db => - await db.Users.FirstOrDefaultAsync(x => x.Email == email, cancellationToken)); + await db.Users.FirstOrDefaultAsync(x => x.Email == email, cancellationToken))); public async Task ValidateUser(LoginRequest request, CancellationToken cancellationToken = default) => await dbFactory.Run(async db =>