User-Management

This commit is contained in:
harish
2024-08-22 17:07:25 +05:30
parent cbd160fa14
commit ad8d580528
13 changed files with 98 additions and 35 deletions

View File

@@ -3,6 +3,8 @@ package net.gepafin.tendermanagement.dao;
import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.config.Translator;
import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.constants.GepafinConstant;
import net.gepafin.tendermanagement.entities.RegionEntity; 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.request.RegionReq;
import net.gepafin.tendermanagement.model.response.RegionResponseBean; import net.gepafin.tendermanagement.model.response.RegionResponseBean;
import net.gepafin.tendermanagement.repositories.RegionRepository; import net.gepafin.tendermanagement.repositories.RegionRepository;
@@ -43,7 +45,7 @@ public class RegionDao {
regionEntity.setAreaSize(regionReq.getAreaSize()); regionEntity.setAreaSize(regionReq.getAreaSize());
regionEntity.setPopulation(regionReq.getPopulation()); regionEntity.setPopulation(regionReq.getPopulation());
regionEntity.setEnvironmentalScore(regionReq.getEnvironmentalScore()); regionEntity.setEnvironmentalScore(regionReq.getEnvironmentalScore());
regionEntity.setStatus(regionReq.getStatus()); regionEntity.setStatus(regionReq.getStatus().getValue());
regionEntity.setHealthcareAccess(regionReq.getHealthcareAccess()); regionEntity.setHealthcareAccess(regionReq.getHealthcareAccess());
regionEntity.setInfrastructureScore(regionReq.getInfrastructureScore()); regionEntity.setInfrastructureScore(regionReq.getInfrastructureScore());
regionEntity.setPriorityArea(regionReq.getPriorityArea()); regionEntity.setPriorityArea(regionReq.getPriorityArea());
@@ -64,7 +66,7 @@ public class RegionDao {
regionResponseBean.setAreaSize(regionEntity.getAreaSize()); regionResponseBean.setAreaSize(regionEntity.getAreaSize());
regionResponseBean.setPopulation(regionEntity.getPopulation()); regionResponseBean.setPopulation(regionEntity.getPopulation());
regionResponseBean.setEnvironmentalScore(regionEntity.getEnvironmentalScore()); regionResponseBean.setEnvironmentalScore(regionEntity.getEnvironmentalScore());
regionResponseBean.setStatus(regionEntity.getStatus()); regionResponseBean.setStatus(RegionStatusEnum.valueOf(regionEntity.getStatus()));
regionResponseBean.setHealthcareAccess(regionEntity.getHealthcareAccess()); regionResponseBean.setHealthcareAccess(regionEntity.getHealthcareAccess());
regionResponseBean.setInfrastructureScore(regionEntity.getInfrastructureScore()); regionResponseBean.setInfrastructureScore(regionEntity.getInfrastructureScore());
regionResponseBean.setPriorityArea(regionEntity.getPriorityArea()); regionResponseBean.setPriorityArea(regionEntity.getPriorityArea());
@@ -78,11 +80,13 @@ public class RegionDao {
RegionEntity existingRegion = getRegionById(id); RegionEntity existingRegion = getRegionById(id);
log.info("Current region details: {}", existingRegion); log.info("Current region details: {}", existingRegion);
log.info("New region details: {}", regionReq); 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::getRegionName, existingRegion::setRegionName, regionReq.getRegionName());
setIfUpdated(existingRegion::getDescription, existingRegion::setDescription, regionReq.getDescription()); setIfUpdated(existingRegion::getDescription, existingRegion::setDescription, regionReq.getDescription());
setIfUpdated(existingRegion::getCountry, existingRegion::setCountry, regionReq.getCountry()); setIfUpdated(existingRegion::getCountry, existingRegion::setCountry, regionReq.getCountry());
setIfUpdated(existingRegion::getStatus, existingRegion::setStatus, regionReq.getStatus());
setIfUpdated(existingRegion::getPriorityArea, existingRegion::setPriorityArea, regionReq.getPriorityArea()); setIfUpdated(existingRegion::getPriorityArea, existingRegion::setPriorityArea, regionReq.getPriorityArea());
setIfUpdated(existingRegion::getPopulation, existingRegion::setPopulation, regionReq.getPopulation()); setIfUpdated(existingRegion::getPopulation, existingRegion::setPopulation, regionReq.getPopulation());
setIfUpdated(existingRegion::getAreaSize, existingRegion::setAreaSize, regionReq.getAreaSize()); setIfUpdated(existingRegion::getAreaSize, existingRegion::setAreaSize, regionReq.getAreaSize());

View File

@@ -4,6 +4,8 @@ import net.gepafin.tendermanagement.config.Translator;
import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.constants.GepafinConstant;
import net.gepafin.tendermanagement.entities.RoleEntity; import net.gepafin.tendermanagement.entities.RoleEntity;
import net.gepafin.tendermanagement.entities.UserEntity; 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.LoginReq;
import net.gepafin.tendermanagement.model.request.UpdateUserReq; import net.gepafin.tendermanagement.model.request.UpdateUserReq;
import net.gepafin.tendermanagement.model.request.UserReq; 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))); .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.REGION_NOT_FOUND_MSG)));
log.info("Current user details: {}", userEntity); log.info("Current user details: {}", userEntity);
log.info("New user details: {}", userReq); log.info("New user details: {}", userReq);
String newStatus = userReq.getStatus() != null ? userReq.getStatus().getValue() : null;
setIfUpdated(userEntity::getStatus, userEntity::setStatus, userReq.getStatus()); if (Boolean.FALSE.equals(userEntity.getStatus().equals(newStatus))) {
userEntity.setStatus(newStatus);
}
setIfUpdated(userEntity::getFirstName, userEntity::setFirstName, userReq.getFirstName()); setIfUpdated(userEntity::getFirstName, userEntity::setFirstName, userReq.getFirstName());
setIfUpdated(userEntity::getLastName, userEntity::setLastName, userReq.getLastName()); setIfUpdated(userEntity::getLastName, userEntity::setLastName, userReq.getLastName());
setIfUpdated(userEntity::getOrganization, userEntity::setOrganization, userReq.getOrganization()); setIfUpdated(userEntity::getOrganization, userEntity::setOrganization, userReq.getOrganization());
@@ -91,7 +95,7 @@ public class UserDao {
userEntity.setPassword(passwordEncoder.encode(userReq.getPassword())); userEntity.setPassword(passwordEncoder.encode(userReq.getPassword()));
userEntity.setEmail(userReq.getEmail()); userEntity.setEmail(userReq.getEmail());
userEntity.setFirstName(userReq.getFirstName()); userEntity.setFirstName(userReq.getFirstName());
userEntity.setStatus(userReq.getStatus()); userEntity.setStatus(userReq.getStatus().getValue());
userEntity.setLastName(userReq.getLastName()); userEntity.setLastName(userReq.getLastName());
userEntity.setOrganization(userReq.getOrganization()); userEntity.setOrganization(userReq.getOrganization());
userEntity.setAddress(userReq.getAddress()); userEntity.setAddress(userReq.getAddress());
@@ -113,7 +117,7 @@ public class UserDao {
userResponseBean.setAddress(userEntity.getAddress()); userResponseBean.setAddress(userEntity.getAddress());
userResponseBean.setCity(userEntity.getCity()); userResponseBean.setCity(userEntity.getCity());
userResponseBean.setCountry(userEntity.getCountry()); userResponseBean.setCountry(userEntity.getCountry());
userResponseBean.setStatus(userEntity.getStatus()); userResponseBean.setStatus(UserStatusEnum.valueOf(userEntity.getStatus()));
RoleResponseBean roleResponseBean = roleDao.convertRoleEntityToRoleResponse(userEntity.getRoleEntity()); RoleResponseBean roleResponseBean = roleDao.convertRoleEntityToRoleResponse(userEntity.getRoleEntity());
userResponseBean.setRole(roleResponseBean); userResponseBean.setRole(roleResponseBean);
userResponseBean.setLastLogin(userEntity.getLastLogin()); userResponseBean.setLastLogin(userEntity.getLastLogin());
@@ -124,6 +128,10 @@ public class UserDao {
log.info("Fetching user with ID: {}", id); log.info("Fetching user with ID: {}", id);
UserEntity userEntity = userRepository.findById(id) UserEntity userEntity = userRepository.findById(id)
.orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.USER_NOT_FOUND_MSG))); .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); log.info("User found: {}", userEntity);
return convertUserEntityToUserResponse(userEntity); return convertUserEntityToUserResponse(userEntity);
} }

View File

@@ -58,19 +58,4 @@ public class UserEntity extends BaseEntity {
@Column(name = "COUNTRY", length = 50, nullable = true) @Column(name = "COUNTRY", length = 50, nullable = true)
private String country; 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;
}
}
} }

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -4,6 +4,7 @@ import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import net.gepafin.tendermanagement.enums.RegionStatusEnum;
import java.math.BigDecimal; import java.math.BigDecimal;
@@ -17,7 +18,7 @@ public class RegionReq {
private String country; private String country;
private String status; private RegionStatusEnum status;
private String priorityArea; private String priorityArea;

View File

@@ -20,8 +20,6 @@ public class RoleReq {
private String permissions; private String permissions;
private String status;
private Long regionId; private Long regionId;
} }

View File

@@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.model.request;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import net.gepafin.tendermanagement.enums.RegionStatusEnum;
@Getter @Getter
@Setter @Setter
@@ -12,7 +13,7 @@ public class UpdateRegionReq {
private String country; private String country;
private String status; private RegionStatusEnum status;
private String priorityArea; private String priorityArea;

View File

@@ -4,6 +4,7 @@ import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import net.gepafin.tendermanagement.enums.UserStatusEnum;
@Getter @Getter
@Setter @Setter
@@ -16,6 +17,6 @@ public class UpdateUserReq {
private String organization; private String organization;
private String address; private String address;
private String city; private String city;
private String status; private UserStatusEnum status;
private String country; private String country;
} }

View File

@@ -6,6 +6,7 @@ import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import net.gepafin.tendermanagement.enums.UserStatusEnum;
@Getter @Getter
@Setter @Setter
@@ -35,6 +36,6 @@ public class UserReq {
private String country; private String country;
private String status; private UserStatusEnum status;
} }

View File

@@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.model.response;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import net.gepafin.tendermanagement.enums.RegionStatusEnum;
import net.gepafin.tendermanagement.model.BaseBean; import net.gepafin.tendermanagement.model.BaseBean;
import java.math.BigDecimal; import java.math.BigDecimal;
@@ -13,7 +14,7 @@ public class RegionResponseBean extends BaseBean {
private String regionName; private String regionName;
private String description; private String description;
private String country; private String country;
private String status; private RegionStatusEnum status;
private String priorityArea; private String priorityArea;
private Long population; private Long population;
private BigDecimal areaSize; private BigDecimal areaSize;

View File

@@ -6,6 +6,7 @@ import jakarta.validation.constraints.NotNull;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import net.gepafin.tendermanagement.entities.RoleEntity; import net.gepafin.tendermanagement.entities.RoleEntity;
import net.gepafin.tendermanagement.enums.UserStatusEnum;
import net.gepafin.tendermanagement.model.BaseBean; import net.gepafin.tendermanagement.model.BaseBean;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -32,7 +33,7 @@ public class UserResponseBean extends BaseBean {
private String country; private String country;
private String status; private UserStatusEnum status;
private LocalDateTime lastLogin; private LocalDateTime lastLogin;

View File

@@ -10,6 +10,7 @@ import net.gepafin.tendermanagement.model.response.LoginResponse;
import net.gepafin.tendermanagement.model.response.RoleResponseBean; import net.gepafin.tendermanagement.model.response.RoleResponseBean;
import net.gepafin.tendermanagement.model.util.JWTToken; import net.gepafin.tendermanagement.model.util.JWTToken;
import net.gepafin.tendermanagement.repositories.UserRepository; 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.CustomValidationException;
import net.gepafin.tendermanagement.web.rest.api.errors.Status; import net.gepafin.tendermanagement.web.rest.api.errors.Status;
import org.slf4j.Logger; 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.Authentication;
import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
@Service @Service
public class AuthenticationService { public class AuthenticationService {
@@ -52,16 +54,37 @@ public class AuthenticationService {
log.error("User not found for email: {}", loginReq.getEmail()); log.error("User not found for email: {}", loginReq.getEmail());
throw new CustomValidationException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.USER_NOT_FOUND_MSG)); 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); String token = tokenProvider.createToken(authentication, loginReq.getRememberMe(), user);
log.info("JWT token generated for email: {}", loginReq.getEmail()); log.info("JWT token generated for email: {}", loginReq.getEmail());
RoleResponseBean roleResponseBean = roleDao.convertRoleEntityToRoleResponse(user.getRoleEntity()); 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(), LoginResponse loginResponse = getLoginResponse(user, roleResponseBean);
user.getCountry(), user.getStatus(), user.getCity(), user.getLastLogin(), user.getCreatedDate(),
user.getUpdatedDate())); JWTToken jwtToken = new JWTToken(token, loginResponse);
log.info("Login successful for email: {}", loginReq.getEmail()); log.info("Login successful for email: {}", loginReq.getEmail());
return jwtToken; 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;
}
} }