diff --git a/src/main/java/com/billpaymentservice/bbps/dto/UserDetailsDTO.java b/src/main/java/com/billpaymentservice/bbps/dto/UserDetailsDTO.java index c70f8e8..ea62152 100644 --- a/src/main/java/com/billpaymentservice/bbps/dto/UserDetailsDTO.java +++ b/src/main/java/com/billpaymentservice/bbps/dto/UserDetailsDTO.java @@ -11,7 +11,7 @@ import lombok.NoArgsConstructor; @Builder public class UserDetailsDTO { - private Long id; + private String userId; private String userEmailId; diff --git a/src/main/java/com/billpaymentservice/bbps/entites/UserEntity.java b/src/main/java/com/billpaymentservice/bbps/entites/UserEntity.java index 374693f..6f15c4e 100644 --- a/src/main/java/com/billpaymentservice/bbps/entites/UserEntity.java +++ b/src/main/java/com/billpaymentservice/bbps/entites/UserEntity.java @@ -25,6 +25,9 @@ public class UserEntity extends Auditable { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; + @Column(name = "user_id", unique = true) + private String userId; + @Column(name = "mobile", nullable = false, unique = true, length = 20) private String mobile; diff --git a/src/main/java/com/billpaymentservice/bbps/repository/UserRepository.java b/src/main/java/com/billpaymentservice/bbps/repository/UserRepository.java index 54c7362..3fa5354 100644 --- a/src/main/java/com/billpaymentservice/bbps/repository/UserRepository.java +++ b/src/main/java/com/billpaymentservice/bbps/repository/UserRepository.java @@ -9,5 +9,8 @@ import com.billpaymentservice.bbps.entites.UserEntity; @Repository public interface UserRepository extends JpaRepository { - Optional findByMobile(String mobile); + Optional findByMobile(String mobile); + + // check user id exists + boolean existsByUserId(String userId); } diff --git a/src/main/java/com/billpaymentservice/bbps/serviceImpl/AuthServiceImpl.java b/src/main/java/com/billpaymentservice/bbps/serviceImpl/AuthServiceImpl.java index 817eed1..d6eb102 100644 --- a/src/main/java/com/billpaymentservice/bbps/serviceImpl/AuthServiceImpl.java +++ b/src/main/java/com/billpaymentservice/bbps/serviceImpl/AuthServiceImpl.java @@ -93,8 +93,7 @@ public class AuthServiceImpl implements AuthService { Object userDetailsDTO = null; if (user != null) { - userDetailsDTO = UserDetailsDTO.builder().id(user.getId()).userEmailId(user.getEmail()) - .userMobNo(user.getMobile()).userName(user.getName()).build(); + userDetailsDTO = helper.mapUserToUserDetailsDTO(user); } AuthResponses authResp = new AuthResponses(token, "Success", "Login Success", 200, userDetailsDTO, @@ -148,6 +147,7 @@ public class AuthServiceImpl implements AuthService { return ResponseModel.builder().message(ar.getMessage()).status("Failure").statusCode(409).data(ar) .build(); } + UserEntity userEntity = helper.createNewUser(request); userRepository.save(userEntity); String token = jwtUtil.generateToken(userEntity.getMobile()); diff --git a/src/main/java/com/billpaymentservice/bbps/util/Helper.java b/src/main/java/com/billpaymentservice/bbps/util/Helper.java index a910789..ff51436 100644 --- a/src/main/java/com/billpaymentservice/bbps/util/Helper.java +++ b/src/main/java/com/billpaymentservice/bbps/util/Helper.java @@ -3,7 +3,7 @@ package com.billpaymentservice.bbps.util; import java.security.SecureRandom; import java.time.LocalDateTime; import java.util.Date; -import java.util.Random; +import java.util.UUID; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -11,6 +11,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.stereotype.Component; +import com.billpaymentservice.bbps.dto.UserDetailsDTO; import com.billpaymentservice.bbps.dto.auth.RegisterRequest; import com.billpaymentservice.bbps.entites.BBPSMastersData; import com.billpaymentservice.bbps.entites.BharatConnectMaster; @@ -24,6 +25,7 @@ import com.billpaymentservice.bbps.repository.BillValidationRepository; import com.billpaymentservice.bbps.repository.BillerDataRepository; import com.billpaymentservice.bbps.repository.InboundTraceLogRepository; import com.billpaymentservice.bbps.repository.OutboundTraceLogRepository; +import com.billpaymentservice.bbps.repository.UserRepository; import com.fasterxml.jackson.databind.ObjectMapper; @Component @@ -32,6 +34,7 @@ public class Helper { private static final Logger LOGGER = LoggerFactory.getLogger(Helper.class); private final InboundTraceLogRepository inboundTraceLogRepository; private final OutboundTraceLogRepository outboundTraceLogRepository; + private final UserRepository userRepository; private static final String CHARACTERS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; private static final SecureRandom secureRandom = new SecureRandom(); @@ -40,12 +43,13 @@ public class Helper { // Constructor Injection public Helper(BBPSMasterDataRepo bbpsMasterDataRepo, InboundTraceLogRepository inboundTraceLogRepository, - OutboundTraceLogRepository outboundTraceLogRepository, BillerDataRepository billerDataRepository, - BillMasterRepository billMasterRepository, BillValidationRepository billValidationRepository) { + BillMasterRepository billMasterRepository, BillValidationRepository billValidationRepository, + UserRepository userRepository) { this.inboundTraceLogRepository = inboundTraceLogRepository; this.outboundTraceLogRepository = outboundTraceLogRepository; this.bbpsMasterDataRepo = bbpsMasterDataRepo; + this.userRepository = userRepository; } /** @@ -174,23 +178,47 @@ public class Helper { public UserEntity createNewUser(RegisterRequest request) { UserEntity user = new UserEntity(); - // user.setId(generateUserId()); + // user.setId(generateUserId()); user.setMobile(request.getMobile()); user.setName(request.getName()); user.setEmail(request.getEmail()); user.setMid(request.getMid()); user.setCreateDateTime(new Date()); + // Generate a unique userId (UUID) + String uniqueUserId = generateUniqueUserId(); + user.setUserId(uniqueUserId); return user; } - - public T convertJsonToObject(String json, Class clazz) { - try { - return objectMapper.readValue(json, clazz); - } catch (Exception e) { - throw new CustomException("Invalid JSON from payment API", "FAILED", 400, json); - } + + public Object mapUserToUserDetailsDTO(UserEntity user) { + if (user != null) { + return UserDetailsDTO.builder().userId(user.getUserId() != null ? user.getUserId() : null) // Set null if + .userEmailId(user.getEmail() != null ? user.getEmail() : null) + .userMobNo(user.getMobile() != null ? user.getMobile() : null) + .userName(user.getName() != null ? user.getName() : null).build(); + } + return null; // or handle accordingly if user is null } + public T convertJsonToObject(String json, Class clazz) { + try { + return objectMapper.readValue(json, clazz); + } catch (Exception e) { + throw new CustomException("Invalid JSON from payment API", "FAILED", 400, json); + } + } + private String generateUniqueUserId() { + String userId = UUID.randomUUID().toString(); // Generate UUID + + // Check if the userId already exists in the database (theoretically rare but + // can happen) + while (userRepository.existsByUserId(userId)) { + // If it exists, generate a new one + userId = UUID.randomUUID().toString(); + } + + return userId; + } } \ No newline at end of file