From ad8d580528ce04ee81ed41d5b6d822030a0116e2 Mon Sep 17 00:00:00 2001 From: harish Date: Thu, 22 Aug 2024 17:07:25 +0530 Subject: [PATCH] User-Management --- .../tendermanagement/dao/RegionDao.java | 12 ++++--- .../gepafin/tendermanagement/dao/UserDao.java | 16 +++++++--- .../tendermanagement/entities/UserEntity.java | 15 --------- .../enums/RegionStatusEnum.java | 18 +++++++++++ .../enums/UserStatusEnum.java | 21 +++++++++++++ .../model/request/RegionReq.java | 3 +- .../model/request/RoleReq.java | 2 -- .../model/request/UpdateRegionReq.java | 3 +- .../model/request/UpdateUserReq.java | 3 +- .../model/request/UserReq.java | 3 +- .../model/response/RegionResponseBean.java | 3 +- .../model/response/UserResponseBean.java | 3 +- .../service/impl/AuthenticationService.java | 31 ++++++++++++++++--- 13 files changed, 98 insertions(+), 35 deletions(-) create mode 100644 src/main/java/net/gepafin/tendermanagement/enums/RegionStatusEnum.java create mode 100644 src/main/java/net/gepafin/tendermanagement/enums/UserStatusEnum.java diff --git a/src/main/java/net/gepafin/tendermanagement/dao/RegionDao.java b/src/main/java/net/gepafin/tendermanagement/dao/RegionDao.java index 9277b167..40493b04 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/RegionDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/RegionDao.java @@ -3,6 +3,8 @@ package net.gepafin.tendermanagement.dao; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.entities.RegionEntity; +import net.gepafin.tendermanagement.enums.RegionStatusEnum; +import net.gepafin.tendermanagement.enums.UserStatusEnum; import net.gepafin.tendermanagement.model.request.RegionReq; import net.gepafin.tendermanagement.model.response.RegionResponseBean; import net.gepafin.tendermanagement.repositories.RegionRepository; @@ -43,7 +45,7 @@ public class RegionDao { regionEntity.setAreaSize(regionReq.getAreaSize()); regionEntity.setPopulation(regionReq.getPopulation()); regionEntity.setEnvironmentalScore(regionReq.getEnvironmentalScore()); - regionEntity.setStatus(regionReq.getStatus()); + regionEntity.setStatus(regionReq.getStatus().getValue()); regionEntity.setHealthcareAccess(regionReq.getHealthcareAccess()); regionEntity.setInfrastructureScore(regionReq.getInfrastructureScore()); regionEntity.setPriorityArea(regionReq.getPriorityArea()); @@ -64,7 +66,7 @@ public class RegionDao { regionResponseBean.setAreaSize(regionEntity.getAreaSize()); regionResponseBean.setPopulation(regionEntity.getPopulation()); regionResponseBean.setEnvironmentalScore(regionEntity.getEnvironmentalScore()); - regionResponseBean.setStatus(regionEntity.getStatus()); + regionResponseBean.setStatus(RegionStatusEnum.valueOf(regionEntity.getStatus())); regionResponseBean.setHealthcareAccess(regionEntity.getHealthcareAccess()); regionResponseBean.setInfrastructureScore(regionEntity.getInfrastructureScore()); regionResponseBean.setPriorityArea(regionEntity.getPriorityArea()); @@ -78,11 +80,13 @@ public class RegionDao { RegionEntity existingRegion = getRegionById(id); log.info("Current region details: {}", existingRegion); log.info("New region details: {}", regionReq); - + String newStatus = regionReq.getStatus() != null ? regionReq.getStatus().getValue() : null; + if (Boolean.FALSE.equals(existingRegion.getStatus().equals(newStatus))) { + existingRegion.setStatus(newStatus); + } setIfUpdated(existingRegion::getRegionName, existingRegion::setRegionName, regionReq.getRegionName()); setIfUpdated(existingRegion::getDescription, existingRegion::setDescription, regionReq.getDescription()); setIfUpdated(existingRegion::getCountry, existingRegion::setCountry, regionReq.getCountry()); - setIfUpdated(existingRegion::getStatus, existingRegion::setStatus, regionReq.getStatus()); setIfUpdated(existingRegion::getPriorityArea, existingRegion::setPriorityArea, regionReq.getPriorityArea()); setIfUpdated(existingRegion::getPopulation, existingRegion::setPopulation, regionReq.getPopulation()); setIfUpdated(existingRegion::getAreaSize, existingRegion::setAreaSize, regionReq.getAreaSize()); diff --git a/src/main/java/net/gepafin/tendermanagement/dao/UserDao.java b/src/main/java/net/gepafin/tendermanagement/dao/UserDao.java index b2fd8190..8fb88a40 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/UserDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/UserDao.java @@ -4,6 +4,8 @@ import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.entities.RoleEntity; import net.gepafin.tendermanagement.entities.UserEntity; +import net.gepafin.tendermanagement.enums.CallTypeEnum; +import net.gepafin.tendermanagement.enums.UserStatusEnum; import net.gepafin.tendermanagement.model.request.LoginReq; import net.gepafin.tendermanagement.model.request.UpdateUserReq; import net.gepafin.tendermanagement.model.request.UserReq; @@ -70,8 +72,10 @@ public class UserDao { .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.REGION_NOT_FOUND_MSG))); log.info("Current user details: {}", userEntity); log.info("New user details: {}", userReq); - - setIfUpdated(userEntity::getStatus, userEntity::setStatus, userReq.getStatus()); + String newStatus = userReq.getStatus() != null ? userReq.getStatus().getValue() : null; + if (Boolean.FALSE.equals(userEntity.getStatus().equals(newStatus))) { + userEntity.setStatus(newStatus); + } setIfUpdated(userEntity::getFirstName, userEntity::setFirstName, userReq.getFirstName()); setIfUpdated(userEntity::getLastName, userEntity::setLastName, userReq.getLastName()); setIfUpdated(userEntity::getOrganization, userEntity::setOrganization, userReq.getOrganization()); @@ -91,7 +95,7 @@ public class UserDao { userEntity.setPassword(passwordEncoder.encode(userReq.getPassword())); userEntity.setEmail(userReq.getEmail()); userEntity.setFirstName(userReq.getFirstName()); - userEntity.setStatus(userReq.getStatus()); + userEntity.setStatus(userReq.getStatus().getValue()); userEntity.setLastName(userReq.getLastName()); userEntity.setOrganization(userReq.getOrganization()); userEntity.setAddress(userReq.getAddress()); @@ -113,7 +117,7 @@ public class UserDao { userResponseBean.setAddress(userEntity.getAddress()); userResponseBean.setCity(userEntity.getCity()); userResponseBean.setCountry(userEntity.getCountry()); - userResponseBean.setStatus(userEntity.getStatus()); + userResponseBean.setStatus(UserStatusEnum.valueOf(userEntity.getStatus())); RoleResponseBean roleResponseBean = roleDao.convertRoleEntityToRoleResponse(userEntity.getRoleEntity()); userResponseBean.setRole(roleResponseBean); userResponseBean.setLastLogin(userEntity.getLastLogin()); @@ -124,6 +128,10 @@ public class UserDao { log.info("Fetching user with ID: {}", id); UserEntity userEntity = userRepository.findById(id) .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.USER_NOT_FOUND_MSG))); + if (!UserStatusEnum.ACTIVE.getValue().equals(userEntity.getStatus())) { + log.info("User with ID: {} is not active", id); + throw new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.USER_NOT_FOUND_MSG)); + } log.info("User found: {}", userEntity); return convertUserEntityToUserResponse(userEntity); } diff --git a/src/main/java/net/gepafin/tendermanagement/entities/UserEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/UserEntity.java index 719f9a5b..aac82db9 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/UserEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/UserEntity.java @@ -58,19 +58,4 @@ public class UserEntity extends BaseEntity { @Column(name = "COUNTRY", length = 50, nullable = true) private String country; - public enum UserStatusEnum { - ACTIVE("ACTIVE"), - INACTIVE("INACTIVE"); - - private String value; - - UserStatusEnum(String value) { - this.value = value; - } - - @JsonValue - public String getValue() { - return value; - } - } } diff --git a/src/main/java/net/gepafin/tendermanagement/enums/RegionStatusEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/RegionStatusEnum.java new file mode 100644 index 00000000..599e8ea2 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/enums/RegionStatusEnum.java @@ -0,0 +1,18 @@ +package net.gepafin.tendermanagement.enums; +import com.fasterxml.jackson.annotation.JsonValue; + +public enum RegionStatusEnum { + ACTIVE("ACTIVE"), + INACTIVE("INACTIVE"); + + private String value; + + RegionStatusEnum(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } +} \ No newline at end of file diff --git a/src/main/java/net/gepafin/tendermanagement/enums/UserStatusEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/UserStatusEnum.java new file mode 100644 index 00000000..8df4f40b --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/enums/UserStatusEnum.java @@ -0,0 +1,21 @@ +package net.gepafin.tendermanagement.enums; + +import com.fasterxml.jackson.annotation.JsonValue; + +public enum UserStatusEnum { + ACTIVE("ACTIVE"), + INACTIVE("INACTIVE"), + + PENDING_VERIFICATION("PENDING_VERIFICATION"); + + private String value; + + UserStatusEnum(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } +} \ No newline at end of file diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/RegionReq.java b/src/main/java/net/gepafin/tendermanagement/model/request/RegionReq.java index fae42f3c..d078155c 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/RegionReq.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/RegionReq.java @@ -4,6 +4,7 @@ import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.Getter; import lombok.Setter; +import net.gepafin.tendermanagement.enums.RegionStatusEnum; import java.math.BigDecimal; @@ -17,7 +18,7 @@ public class RegionReq { private String country; - private String status; + private RegionStatusEnum status; private String priorityArea; diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/RoleReq.java b/src/main/java/net/gepafin/tendermanagement/model/request/RoleReq.java index 1e4ec6f4..f1fd7d70 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/RoleReq.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/RoleReq.java @@ -20,8 +20,6 @@ public class RoleReq { private String permissions; - private String status; - private Long regionId; } diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/UpdateRegionReq.java b/src/main/java/net/gepafin/tendermanagement/model/request/UpdateRegionReq.java index 8d32dc83..1b62d403 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/UpdateRegionReq.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/UpdateRegionReq.java @@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.model.request; import lombok.Getter; import lombok.Setter; +import net.gepafin.tendermanagement.enums.RegionStatusEnum; @Getter @Setter @@ -12,7 +13,7 @@ public class UpdateRegionReq { private String country; - private String status; + private RegionStatusEnum status; private String priorityArea; diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/UpdateUserReq.java b/src/main/java/net/gepafin/tendermanagement/model/request/UpdateUserReq.java index 63eb2b89..f4a8a107 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/UpdateUserReq.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/UpdateUserReq.java @@ -4,6 +4,7 @@ import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.Getter; import lombok.Setter; +import net.gepafin.tendermanagement.enums.UserStatusEnum; @Getter @Setter @@ -16,6 +17,6 @@ public class UpdateUserReq { private String organization; private String address; private String city; - private String status; + private UserStatusEnum status; private String country; } diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/UserReq.java b/src/main/java/net/gepafin/tendermanagement/model/request/UserReq.java index 97a59438..07761068 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/UserReq.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/UserReq.java @@ -6,6 +6,7 @@ import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.Getter; import lombok.Setter; +import net.gepafin.tendermanagement.enums.UserStatusEnum; @Getter @Setter @@ -35,6 +36,6 @@ public class UserReq { private String country; - private String status; + private UserStatusEnum status; } diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/RegionResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/RegionResponseBean.java index 55182822..23a4088a 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/RegionResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/RegionResponseBean.java @@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.model.response; import lombok.Getter; import lombok.Setter; +import net.gepafin.tendermanagement.enums.RegionStatusEnum; import net.gepafin.tendermanagement.model.BaseBean; import java.math.BigDecimal; @@ -13,7 +14,7 @@ public class RegionResponseBean extends BaseBean { private String regionName; private String description; private String country; - private String status; + private RegionStatusEnum status; private String priorityArea; private Long population; private BigDecimal areaSize; diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/UserResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/UserResponseBean.java index 1dcaa944..f23b6978 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/UserResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/UserResponseBean.java @@ -6,6 +6,7 @@ import jakarta.validation.constraints.NotNull; import lombok.Getter; import lombok.Setter; import net.gepafin.tendermanagement.entities.RoleEntity; +import net.gepafin.tendermanagement.enums.UserStatusEnum; import net.gepafin.tendermanagement.model.BaseBean; import java.time.LocalDateTime; @@ -32,7 +33,7 @@ public class UserResponseBean extends BaseBean { private String country; - private String status; + private UserStatusEnum status; private LocalDateTime lastLogin; diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/AuthenticationService.java b/src/main/java/net/gepafin/tendermanagement/service/impl/AuthenticationService.java index 1d76fc3c..6ad8cf5f 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/AuthenticationService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/AuthenticationService.java @@ -10,6 +10,7 @@ import net.gepafin.tendermanagement.model.response.LoginResponse; import net.gepafin.tendermanagement.model.response.RoleResponseBean; import net.gepafin.tendermanagement.model.util.JWTToken; import net.gepafin.tendermanagement.repositories.UserRepository; +import net.gepafin.tendermanagement.util.DateTimeUtil; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.Status; import org.slf4j.Logger; @@ -20,6 +21,7 @@ import org.springframework.security.authentication.UsernamePasswordAuthenticatio import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; @Service public class AuthenticationService { @@ -52,16 +54,37 @@ public class AuthenticationService { log.error("User not found for email: {}", loginReq.getEmail()); throw new CustomValidationException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.USER_NOT_FOUND_MSG)); } + user.setLastLogin(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); + userRepository.save(user); String token = tokenProvider.createToken(authentication, loginReq.getRememberMe(), user); log.info("JWT token generated for email: {}", loginReq.getEmail()); RoleResponseBean roleResponseBean = roleDao.convertRoleEntityToRoleResponse(user.getRoleEntity()); - JWTToken jwtToken = new JWTToken(token, new LoginResponse(user.getId(), user.getEmail(), user.getFirstName(), - user.getLastName(), roleResponseBean, user.getPhoneNumber(), user.getAddress(), user.getOrganization(), - user.getCountry(), user.getStatus(), user.getCity(), user.getLastLogin(), user.getCreatedDate(), - user.getUpdatedDate())); + + LoginResponse loginResponse = getLoginResponse(user, roleResponseBean); + + JWTToken jwtToken = new JWTToken(token, loginResponse); log.info("Login successful for email: {}", loginReq.getEmail()); return jwtToken; } + + private static LoginResponse getLoginResponse(UserEntity user, RoleResponseBean roleResponseBean) { + LoginResponse loginResponse = new LoginResponse(); + loginResponse.setId(user.getId()); + loginResponse.setEmail(user.getEmail()); + loginResponse.setFirstName(user.getFirstName()); + loginResponse.setLastName(user.getLastName()); + loginResponse.setRole(roleResponseBean); + loginResponse.setPhoneNumber(user.getPhoneNumber()); + loginResponse.setAddress(user.getAddress()); + loginResponse.setOrganization(user.getOrganization()); + loginResponse.setCountry(user.getCountry()); + loginResponse.setStatus(user.getStatus()); + loginResponse.setCity(user.getCity()); + loginResponse.setLastLogin(user.getLastLogin()); + loginResponse.setCreatedDate(user.getCreatedDate()); + loginResponse.setUpdatedDate(user.getUpdatedDate()); + return loginResponse; + } }