149 lines
7.7 KiB
Java
149 lines
7.7 KiB
Java
package net.gepafin.tendermanagement.dao;
|
|
|
|
import jakarta.servlet.http.HttpServletRequest;
|
|
import net.gepafin.tendermanagement.config.Translator;
|
|
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
|
import net.gepafin.tendermanagement.entities.CallEntity;
|
|
import net.gepafin.tendermanagement.entities.CriteriaFormFieldEntity;
|
|
import net.gepafin.tendermanagement.entities.EvaluationCriteriaEntity;
|
|
import net.gepafin.tendermanagement.entities.LookUpDataEntity;
|
|
import net.gepafin.tendermanagement.enums.VersionActionTypeEnum;
|
|
import net.gepafin.tendermanagement.model.request.EvaluationCriteriaRequest;
|
|
import net.gepafin.tendermanagement.model.request.VersionHistoryRequest;
|
|
import net.gepafin.tendermanagement.model.response.EvaluationCriteriaResponseBean;
|
|
import net.gepafin.tendermanagement.repositories.CriteriaFormFieldRepository;
|
|
import net.gepafin.tendermanagement.repositories.EvaluationCriteriaRepository;
|
|
import net.gepafin.tendermanagement.service.CallService;
|
|
import net.gepafin.tendermanagement.service.LookUpDataService;
|
|
import net.gepafin.tendermanagement.util.LoggingUtil;
|
|
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 java.util.List;
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
@Component
|
|
public class EvaluationCriteriaDao {
|
|
|
|
@Autowired
|
|
private EvaluationCriteriaRepository evaluationCriteriaRepository;
|
|
|
|
@Autowired
|
|
private CallService callService;
|
|
|
|
@Autowired
|
|
private LookUpDataService lookUpDataService;
|
|
|
|
@Autowired
|
|
private CriteriaFormFieldRepository criteriaFormFieldRepository;
|
|
|
|
@Autowired
|
|
private LoggingUtil loggingUtil;
|
|
|
|
@Autowired
|
|
private HttpServletRequest request;
|
|
|
|
public EvaluationCriteriaResponseBean createEvaluationCriteria(EvaluationCriteriaRequest evaluationCriteriaRequest) {
|
|
|
|
EvaluationCriteriaEntity entity = convertEvaluationCriteriaRequestToEvaluationCriteriaEntity(evaluationCriteriaRequest, VersionActionTypeEnum.INSERT, null);
|
|
return convertEvaluationCriteriaEntityEvaluationCriteriaToResponseBean(entity);
|
|
}
|
|
|
|
private EvaluationCriteriaEntity convertEvaluationCriteriaRequestToEvaluationCriteriaEntity(EvaluationCriteriaRequest evaluationCriteriaRequest,
|
|
VersionActionTypeEnum actionType, EvaluationCriteriaEntity evaluationCriteriaEntity) {
|
|
|
|
EvaluationCriteriaEntity entity;
|
|
if (evaluationCriteriaEntity != null && evaluationCriteriaEntity.getId() != null) {
|
|
entity = evaluationCriteriaEntity;
|
|
} else {
|
|
entity = new EvaluationCriteriaEntity();
|
|
}
|
|
//cloned for old data
|
|
EvaluationCriteriaEntity oldEvaluationCriteriaData = Utils.getClonedEntityForData(entity);
|
|
|
|
CallEntity callEntity = callService.validateCall(evaluationCriteriaRequest.getCallId());
|
|
LookUpDataEntity lookupDataEntity = lookUpDataService.getOrCreateLookUpDataEntity(evaluationCriteriaRequest, LookUpDataEntity.LookUpDataTypeEnum.EVALUATION_CRITERIA);
|
|
entity.setCall(callEntity);
|
|
entity.setLookupData(lookupDataEntity);
|
|
entity.setScore(0L);
|
|
if (evaluationCriteriaRequest.getScore() != null) {
|
|
entity.setScore(evaluationCriteriaRequest.getScore());
|
|
}
|
|
entity = evaluationCriteriaRepository.save(entity);
|
|
|
|
/** This code is responsible for adding a version history log for the "updating or creating evaluation criteria" operation. **/
|
|
loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(actionType).oldData(oldEvaluationCriteriaData).newData(entity).build());
|
|
|
|
return entity;
|
|
}
|
|
|
|
public EvaluationCriteriaResponseBean getEvaluationCriteriaById(Long id) {
|
|
|
|
return evaluationCriteriaRepository.findById(id).map(this::convertEvaluationCriteriaEntityEvaluationCriteriaToResponseBean)
|
|
.orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.EVALUATION_CRITERIA_NOT_FOUND)));
|
|
}
|
|
|
|
public EvaluationCriteriaEntity validateEvaluationCriteria(Long id) {
|
|
|
|
return evaluationCriteriaRepository.findById(id)
|
|
.orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.EVALUATION_CRITERIA_NOT_FOUND)));
|
|
}
|
|
|
|
public EvaluationCriteriaResponseBean updateEvaluationCriteria(Long id, EvaluationCriteriaRequest evaluationCriteriaRequest) {
|
|
|
|
EvaluationCriteriaEntity entity = evaluationCriteriaRepository.findById(id)
|
|
.orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.EVALUATION_CRITERIA_NOT_FOUND)));
|
|
|
|
entity = convertEvaluationCriteriaRequestToEvaluationCriteriaEntity(evaluationCriteriaRequest, VersionActionTypeEnum.UPDATE, entity);
|
|
return convertEvaluationCriteriaEntityEvaluationCriteriaToResponseBean(entity);
|
|
}
|
|
|
|
public void deleteEvaluationCriteria(Long id) {
|
|
// evaluationCriteriaRepository.deleteById(id); // Not needed if setting isDeleted TRUE in the next line after fetching evaluation criteria
|
|
EvaluationCriteriaEntity evaluationCriteriaEntity = validateEvaluationCriteria(id);
|
|
|
|
// Clone the evaluation criteria entity for old data
|
|
EvaluationCriteriaEntity oldEvaluationCriteriaData = Utils.getClonedEntityForData(evaluationCriteriaEntity);
|
|
|
|
List<CriteriaFormFieldEntity> oldList = criteriaFormFieldRepository.findByEvaluationCriteriaIdAndIsDeletedFalse(evaluationCriteriaEntity.getId()).stream()
|
|
.map(Utils::getClonedEntityForData).toList();
|
|
|
|
evaluationCriteriaEntity.setIsDeleted(Boolean.TRUE);
|
|
evaluationCriteriaEntity = evaluationCriteriaRepository.save(evaluationCriteriaEntity);
|
|
|
|
/** This code is responsible for adding a version history log for the "updating evaluation criteria" operation. **/
|
|
loggingUtil.addVersionHistory(
|
|
VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.SOFT_DELETE).oldData(oldEvaluationCriteriaData).newData(evaluationCriteriaEntity)
|
|
.build());
|
|
|
|
List<CriteriaFormFieldEntity> updatedList = criteriaFormFieldRepository.findByEvaluationCriteriaIdAndIsDeletedFalse(evaluationCriteriaEntity.getId()).stream()
|
|
.peek(data -> data.setIsDeleted(Boolean.TRUE)).toList();
|
|
|
|
List<CriteriaFormFieldEntity> softDeletingSavedList = criteriaFormFieldRepository.saveAll(updatedList);
|
|
|
|
softDeletingSavedList.forEach(data -> {
|
|
CriteriaFormFieldEntity oldFieldData = oldList.stream().filter(old -> old.getId().equals(data.getId())).findFirst().orElse(null);
|
|
|
|
/** This code is responsible for adding a version history log for the "Soft deleting criteria form field" operation. **/
|
|
loggingUtil.addVersionHistory(
|
|
VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.SOFT_DELETE).oldData(oldFieldData).newData(data).build());
|
|
});
|
|
}
|
|
|
|
private EvaluationCriteriaResponseBean convertEvaluationCriteriaEntityEvaluationCriteriaToResponseBean(EvaluationCriteriaEntity entity) {
|
|
|
|
EvaluationCriteriaResponseBean response = new EvaluationCriteriaResponseBean();
|
|
response.setId(entity.getId());
|
|
response.setScore(entity.getScore());
|
|
response.setCreatedDate(entity.getCreatedDate());
|
|
response.setUpdatedDate(entity.getUpdatedDate());
|
|
response.setLookUpDataId(entity.getLookupData().getId());
|
|
response.setTitle(entity.getLookupData().getTitle());
|
|
response.setValue(entity.getLookupData().getValue());
|
|
return response;
|
|
}
|
|
}
|