diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FlowDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FlowDao.java index b4db5ff5..c298cbd4 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/FlowDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/FlowDao.java @@ -6,9 +6,11 @@ import net.gepafin.tendermanagement.entities.CallEntity; import net.gepafin.tendermanagement.entities.FlowDataEntity; import net.gepafin.tendermanagement.entities.FlowEdgesEntity; import net.gepafin.tendermanagement.enums.CallStatusEnum; +import net.gepafin.tendermanagement.enums.VersionActionTypeEnum; import net.gepafin.tendermanagement.model.request.FlowDataRequestBean; import net.gepafin.tendermanagement.model.request.FlowEdgesRequestBean; import net.gepafin.tendermanagement.model.request.FlowRequestBean; +import net.gepafin.tendermanagement.model.request.VersionHistoryRequest; import net.gepafin.tendermanagement.model.response.FlowDataResponseBean; import net.gepafin.tendermanagement.model.response.FlowEdgesResponseBean; import net.gepafin.tendermanagement.model.response.FlowResponseBean; @@ -19,11 +21,17 @@ import net.gepafin.tendermanagement.service.CallService; import net.gepafin.tendermanagement.service.FormService; import net.gepafin.tendermanagement.util.DateTimeUtil; import net.gepafin.tendermanagement.util.FieldValidator; +import net.gepafin.tendermanagement.util.LoggingUtil; +import net.gepafin.tendermanagement.util.Utils; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.Status; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import com.itextpdf.text.pdf.PdfStructTreeController.returnType; + +import jakarta.servlet.http.HttpServletRequest; + import java.time.LocalDateTime; import java.util.List; import java.util.stream.Collectors; @@ -47,7 +55,10 @@ public class FlowDao { private FormService formService; @Autowired - private CallDao callDao; + private LoggingUtil loggingUtil; + + @Autowired + private HttpServletRequest request; public FlowResponseBean createOrUpdateFlow(FlowRequestBean flowRequestBean, Long callId) { validateFlowRequestBean(flowRequestBean); @@ -76,11 +87,43 @@ public class FlowDao { List flowDataEntities = flowDataRepository.findByCallId(call.getId()); List flowEdgesEntities = flowEdgesRepository.findByCallId(call.getId()); if (Boolean.FALSE.equals(flowDataEntities.isEmpty()) || Boolean.FALSE.equals(flowEdgesEntities.isEmpty())) { - call.setInitialForm(null); - call.setFinalForm(null); - call=callRepository.save(call); + if (call.getInitialForm() != null || call.getInitialForm() != null) { + CallEntity oldCallEntity = Utils.getClonedEntityForData(call); + call.setInitialForm(null); + call.setFinalForm(null); + call = callRepository.save(call); + + /** + * This code is responsible for adding a version history log for the "update + * call for flow" operation. + **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request) + .actionType(VersionActionTypeEnum.UPDATE).oldData(oldCallEntity).newData(call).build()); + + } flowDataRepository.deleteAll(flowDataEntities); flowEdgesRepository.deleteAll(flowEdgesEntities); + + flowDataEntities.forEach(data->{ + /** + * This code is responsible for adding a version history log for the "update + * call for flow" operation. + **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request) + .actionType(VersionActionTypeEnum.DELETE).oldData(data).newData(null).build()); + }); + + flowEdgesEntities.forEach(data->{ + /** + * This code is responsible for adding a version history log for the "update + * call for flow" operation. + **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request) + .actionType(VersionActionTypeEnum.DELETE).oldData(data).newData(null).build()); + + }); + + } } @@ -110,20 +153,38 @@ public class FlowDao { return flowResponseBean; } - private CallEntity setInitialAndFinalFormInCall(FlowRequestBean flowRequestBean, CallEntity call) { - call.setInitialForm(flowRequestBean.getInitialForm()); - call.setFinalForm(flowRequestBean.getFinalForm()); - call.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); - call = callRepository.save(call); - return call; - } + private CallEntity setInitialAndFinalFormInCall(FlowRequestBean flowRequestBean, CallEntity call) { + + CallEntity oldCallEntity = Utils.getClonedEntityForData(call); + call.setInitialForm(flowRequestBean.getInitialForm()); + call.setFinalForm(flowRequestBean.getFinalForm()); + call.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); + call = callRepository.save(call); + + /** + * This code is responsible for adding a version history log for the "update + * call for flow" operation. + **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request) + .actionType(VersionActionTypeEnum.UPDATE).oldData(oldCallEntity).newData(call).build()); + return call; + } public List createFlowData(FlowRequestBean flowRequestBean, CallEntity call) { if (flowRequestBean.getFlowData() != null || !flowRequestBean.getFlowEdges().isEmpty()) { List flowDataEntities = flowRequestBean.getFlowData().stream() .map(flowDataRequestBean -> createFlowDataEntity(flowDataRequestBean, call)) .collect(Collectors.toList()); - return flowDataRepository.saveAll(flowDataEntities); + flowDataEntities = flowDataRepository.saveAll(flowDataEntities); + flowDataEntities.forEach(data->{ + + /** + * This code is responsible for adding a version history log for the "delete flow data" operation. + **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request) + .actionType(VersionActionTypeEnum.INSERT).oldData(null).newData(data).build()); + }); + return flowDataEntities; } return null; } @@ -145,7 +206,16 @@ public class FlowDao { List flowEdgesEntities = flowRequestBean.getFlowEdges().stream() .map(flowEdgesRequestBean -> createFlowEdgesEntity(flowEdgesRequestBean, call)) .collect(Collectors.toList()); - return flowEdgesRepository.saveAll(flowEdgesEntities); + flowEdgesEntities = flowEdgesRepository.saveAll(flowEdgesEntities); + flowEdgesEntities.forEach(data->{ + /** + * This code is responsible for adding a version history log for the "update + * call for flow" operation. + **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request) + .actionType(VersionActionTypeEnum.INSERT).oldData(null).newData(data).build()); + }); + return flowEdgesEntities; } public FlowEdgesEntity createFlowEdgesEntity(FlowEdgesRequestBean flowEdgesRequestBean,CallEntity call) {