From a6327a45201cf0c2e6eae9e62b0a7398b4d2f62c Mon Sep 17 00:00:00 2001 From: IN40068837 Date: Tue, 24 Dec 2024 15:14:00 +0530 Subject: [PATCH] user fetch concept modify --- .../java/com/iemr/tm/data/login/Users.java | 2 ++ .../com/iemr/tm/repo/login/UserLoginRepo.java | 16 ++++++++++ .../iemr/tm/utils/JwtAuthenticationUtil.java | 29 ++++++++++++++++++- 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/iemr/tm/repo/login/UserLoginRepo.java diff --git a/src/main/java/com/iemr/tm/data/login/Users.java b/src/main/java/com/iemr/tm/data/login/Users.java index 2626d44e..6f8bd9f2 100644 --- a/src/main/java/com/iemr/tm/data/login/Users.java +++ b/src/main/java/com/iemr/tm/data/login/Users.java @@ -44,5 +44,7 @@ public class Users implements Serializable { private Long userID; @Column(name = "UserName") private String userName; + @Column(name = "Deleted", insertable = false, updatable = false) + private Boolean Deleted; } diff --git a/src/main/java/com/iemr/tm/repo/login/UserLoginRepo.java b/src/main/java/com/iemr/tm/repo/login/UserLoginRepo.java new file mode 100644 index 00000000..0898602d --- /dev/null +++ b/src/main/java/com/iemr/tm/repo/login/UserLoginRepo.java @@ -0,0 +1,16 @@ +package com.iemr.tm.repo.login; + +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import com.iemr.tm.data.login.Users; + +@Repository +public interface UserLoginRepo extends CrudRepository { + + @Query(" SELECT u FROM Users u WHERE u.userID = :userID AND u.Deleted = false ") + public Users getUserByUserID(@Param("userID") Long userID); + +} diff --git a/src/main/java/com/iemr/tm/utils/JwtAuthenticationUtil.java b/src/main/java/com/iemr/tm/utils/JwtAuthenticationUtil.java index cd0f7f56..0a59bba6 100644 --- a/src/main/java/com/iemr/tm/utils/JwtAuthenticationUtil.java +++ b/src/main/java/com/iemr/tm/utils/JwtAuthenticationUtil.java @@ -12,6 +12,7 @@ import org.springframework.stereotype.Component; import com.iemr.tm.data.login.Users; +import com.iemr.tm.repo.login.UserLoginRepo; import com.iemr.tm.utils.exception.IEMRException; import io.jsonwebtoken.Claims; @@ -26,6 +27,8 @@ public class JwtAuthenticationUtil { private JwtUtil jwtUtil; @Autowired private RedisTemplate redisTemplate; + @Autowired + private UserLoginRepo userLoginRepo; private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); public JwtAuthenticationUtil(CookieUtil cookieUtil, JwtUtil jwtUtil) { @@ -73,6 +76,10 @@ public boolean validateUserIdAndJwtToken(String jwtToken) throws IEMRException { // Check if user data is present in Redis Users user = getUserFromCache(userId); + if (user == null) { + // If not in Redis, fetch from DB and cache the result + user = fetchUserFromDB(userId); + } if (user == null) { throw new IEMRException("Invalid User ID."); } @@ -89,7 +96,7 @@ private Users getUserFromCache(String userId) { Users user = (Users) redisTemplate.opsForValue().get(redisKey); if (user == null) { - logger.warn("User not found in Redis."); + logger.warn("User not found in Redis. Will try to fetch from DB."); } else { logger.info("User fetched successfully from Redis."); } @@ -97,4 +104,24 @@ private Users getUserFromCache(String userId) { return user; // Returns null if not found } + private Users fetchUserFromDB(String userId) { + // This method will only be called if the user is not found in Redis. + String redisKey = "user_" + userId; // Redis key format + + // Fetch user from DB + Users user = userLoginRepo.getUserByUserID(Long.parseLong(userId)); + + if (user != null) { + // Cache the user in Redis for future requests (cache for 30 minutes) + redisTemplate.opsForValue().set(redisKey, user, 30, TimeUnit.MINUTES); + + // Log that the user has been stored in Redis + logger.info("User stored in Redis with key: " + redisKey); + } else { + logger.warn("User not found for userId: " + userId); + } + + return user; + } + }