mirror of
https://github.com/azaion/admin.git
synced 2026-04-22 06:56:32 +00:00
fix cache issue
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -11,28 +11,22 @@ namespace Azaion.Services;
|
||||
|
||||
public interface IAuthService
|
||||
{
|
||||
Guid? GetCurrentUserId();
|
||||
Task<User?> GetCurrentUser();
|
||||
Task<User?> GetCurrentUser();
|
||||
string CreateToken(User user);
|
||||
}
|
||||
|
||||
public class AuthService(IHttpContextAccessor httpContextAccessor, IOptions<JwtConfig> 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<User?> GetCurrentUser()
|
||||
{
|
||||
var id = GetCurrentUserId();
|
||||
return await userService.GetById(id);
|
||||
var email = GetCurrentUserEmail();
|
||||
return await userService.GetByEmail(email);
|
||||
}
|
||||
|
||||
public string CreateToken(User user)
|
||||
|
||||
@@ -12,8 +12,7 @@ public interface IUserService
|
||||
{
|
||||
Task RegisterUser(RegisterUserRequest 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 UpdateQueueOffsets(string email, UserQueueOffsets queueOffsets, CancellationToken cancellationToken = default);
|
||||
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) =>
|
||||
await cache.GetFromCacheAsync($"{nameof(User)}.{id}",
|
||||
public async Task<User?> 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<User?> 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<User> ValidateUser(LoginRequest request, CancellationToken cancellationToken = default) =>
|
||||
await dbFactory.Run(async db =>
|
||||
|
||||
Reference in New Issue
Block a user