134 lines
7.3 KiB
Java
134 lines
7.3 KiB
Java
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.model.request.RegionReq;
|
|
import net.gepafin.tendermanagement.model.response.RegionResponseBean;
|
|
import net.gepafin.tendermanagement.repositories.RegionRepository;
|
|
import net.gepafin.tendermanagement.util.Utils;
|
|
import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException;
|
|
import net.gepafin.tendermanagement.web.rest.api.errors.Status;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Repository;
|
|
|
|
import java.util.List;
|
|
import java.util.stream.Collectors;
|
|
|
|
import static net.gepafin.tendermanagement.util.Utils.setIfUpdated;
|
|
|
|
@Repository
|
|
public class RegionDao {
|
|
private final Logger log = LoggerFactory.getLogger(RegionDao.class);
|
|
|
|
@Autowired
|
|
private RegionRepository regionRepository;
|
|
|
|
public RegionResponseBean createRegion(RegionReq regionReq) {
|
|
log.info("Creating new region with details: {}", regionReq);
|
|
RegionEntity regionEntity = convertRegionRequestToRegionEntity(regionReq);
|
|
regionEntity = regionRepository.save(regionEntity);
|
|
log.info("Region created with ID: {}", regionEntity.getId());
|
|
return convertRegionEntityToRegionResponse(regionEntity);
|
|
}
|
|
|
|
private RegionEntity convertRegionRequestToRegionEntity(RegionReq regionReq) {
|
|
RegionEntity regionEntity = new RegionEntity();
|
|
regionEntity.setCountry(regionReq.getCountry());
|
|
regionEntity.setDescription(regionReq.getDescription());
|
|
regionEntity.setGdp(regionReq.getGdp());
|
|
regionEntity.setRegionName(regionReq.getRegionName());
|
|
regionEntity.setAreaSize(regionReq.getAreaSize());
|
|
regionEntity.setPopulation(regionReq.getPopulation());
|
|
regionEntity.setEnvironmentalScore(regionReq.getEnvironmentalScore());
|
|
regionEntity.setStatus(regionReq.getStatus().getValue());
|
|
regionEntity.setHealthcareAccess(regionReq.getHealthcareAccess());
|
|
regionEntity.setInfrastructureScore(regionReq.getInfrastructureScore());
|
|
regionEntity.setPriorityArea(regionReq.getPriorityArea());
|
|
regionEntity.setUnemploymentRate(regionReq.getUnemploymentRate());
|
|
regionEntity.setEducationLevel(regionReq.getEducationLevel());
|
|
return regionEntity;
|
|
}
|
|
|
|
public RegionResponseBean convertRegionEntityToRegionResponse(RegionEntity regionEntity) {
|
|
RegionResponseBean regionResponseBean = new RegionResponseBean();
|
|
regionResponseBean.setId(regionEntity.getId());
|
|
regionResponseBean.setCreatedDate(regionEntity.getCreatedDate());
|
|
regionResponseBean.setUpdatedDate(regionEntity.getUpdatedDate());
|
|
regionResponseBean.setCountry(regionEntity.getCountry());
|
|
regionResponseBean.setDescription(regionEntity.getDescription());
|
|
regionResponseBean.setGdp(regionEntity.getGdp());
|
|
regionResponseBean.setRegionName(regionEntity.getRegionName());
|
|
regionResponseBean.setAreaSize(regionEntity.getAreaSize());
|
|
regionResponseBean.setPopulation(regionEntity.getPopulation());
|
|
regionResponseBean.setEnvironmentalScore(regionEntity.getEnvironmentalScore());
|
|
regionResponseBean.setStatus(RegionStatusEnum.valueOf(regionEntity.getStatus()));
|
|
regionResponseBean.setHealthcareAccess(regionEntity.getHealthcareAccess());
|
|
regionResponseBean.setInfrastructureScore(regionEntity.getInfrastructureScore());
|
|
regionResponseBean.setPriorityArea(regionEntity.getPriorityArea());
|
|
regionResponseBean.setUnemploymentRate(regionEntity.getUnemploymentRate());
|
|
regionResponseBean.setEducationLevel(regionEntity.getEducationLevel());
|
|
return regionResponseBean;
|
|
}
|
|
|
|
public RegionResponseBean updateRegion(Long id, RegionReq regionReq) {
|
|
log.info("Updating region with ID: {}", id);
|
|
RegionEntity existingRegion = validateRegion(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::getPriorityArea, existingRegion::setPriorityArea, regionReq.getPriorityArea());
|
|
setIfUpdated(existingRegion::getPopulation, existingRegion::setPopulation, regionReq.getPopulation());
|
|
setIfUpdated(existingRegion::getAreaSize, existingRegion::setAreaSize, regionReq.getAreaSize());
|
|
setIfUpdated(existingRegion::getGdp, existingRegion::setGdp, regionReq.getGdp());
|
|
setIfUpdated(existingRegion::getUnemploymentRate, existingRegion::setUnemploymentRate, regionReq.getUnemploymentRate());
|
|
setIfUpdated(existingRegion::getInfrastructureScore, existingRegion::setInfrastructureScore, regionReq.getInfrastructureScore());
|
|
setIfUpdated(existingRegion::getEducationLevel, existingRegion::setEducationLevel, regionReq.getEducationLevel());
|
|
setIfUpdated(existingRegion::getHealthcareAccess, existingRegion::setHealthcareAccess, regionReq.getHealthcareAccess());
|
|
setIfUpdated(existingRegion::getEnvironmentalScore, existingRegion::setEnvironmentalScore, regionReq.getEnvironmentalScore());
|
|
|
|
existingRegion = regionRepository.save(existingRegion);
|
|
|
|
log.info("Region updated with ID: {}", existingRegion.getId());
|
|
return Utils.convertObject(existingRegion, RegionResponseBean.class);
|
|
}
|
|
|
|
public RegionEntity validateRegion(Long id) {
|
|
log.info("Fetching region with ID: {}", id);
|
|
RegionEntity regionEntity = regionRepository.findById(id)
|
|
.orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.REGION_NOT_FOUND_MSG)));
|
|
log.info("Region found: {}", regionEntity);
|
|
return regionEntity;
|
|
}
|
|
public RegionResponseBean getRegionById(Long id) {
|
|
log.info("Fetching region with ID: {}", id);
|
|
RegionEntity regionEntity = validateRegion(id);
|
|
return convertRegionEntityToRegionResponse(regionEntity);
|
|
}
|
|
public void deleteById(Long id) {
|
|
log.info("Deleting region with ID: {}", id);
|
|
validateRegion(id);
|
|
regionRepository.deleteById(id);
|
|
log.info("Region deleted with ID: {}", id);
|
|
}
|
|
|
|
public List<RegionResponseBean> getAllRegions() {
|
|
log.info("Fetching all regions");
|
|
List<RegionResponseBean> regions = regionRepository.findAll()
|
|
.stream()
|
|
.map(regionEntity -> Utils.convertObject(regionEntity, RegionResponseBean.class))
|
|
.collect(Collectors.toList());
|
|
log.info("Total regions found: {}", regions.size());
|
|
return regions;
|
|
}
|
|
}
|