mirror of
https://github.com/azaion/admin.git
synced 2026-04-22 10:46:33 +00:00
fix cache issue
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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 =>
|
||||||
|
|||||||
Reference in New Issue
Block a user