From ba71b77f179382f5f1afb4ec84e48955b01b4ba7 Mon Sep 17 00:00:00 2001 From: piyushkag Date: Mon, 25 Nov 2024 11:14:12 +0530 Subject: [PATCH] Added user action and versoining for evaluation criteria. --- .../dao/EvaluationCriteriaDao.java | 168 +++++++++++------- .../enums/UserActionContextEnum.java | 8 +- .../impl/EvaluationCriteriaApiController.java | 23 +++ 3 files changed, 135 insertions(+), 64 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EvaluationCriteriaDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EvaluationCriteriaDao.java index 86a7693f..8f7897c4 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EvaluationCriteriaDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EvaluationCriteriaDao.java @@ -1,17 +1,22 @@ 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; @@ -35,72 +40,109 @@ public class EvaluationCriteriaDao { @Autowired private CriteriaFormFieldRepository criteriaFormFieldRepository; - public EvaluationCriteriaResponseBean createEvaluationCriteria( - EvaluationCriteriaRequest evaluationCriteriaRequest) { - EvaluationCriteriaEntity entity = convertEvaluationCriteriaRequestToEvaluationCriteriaEntity( - evaluationCriteriaRequest); - return convertEvaluationCriteriaEntityEvaluationCriteriaToResponseBean(entity); - } + @Autowired + private LoggingUtil loggingUtil; - private EvaluationCriteriaEntity convertEvaluationCriteriaRequestToEvaluationCriteriaEntity( - EvaluationCriteriaRequest evaluationCriteriaRequest) { - EvaluationCriteriaEntity entity = new EvaluationCriteriaEntity(); - CallEntity callEntity = callService.validateCall(evaluationCriteriaRequest.getCallId()); - LookUpDataEntity looDataEntity = lookUpDataService - .validateLookUpData(evaluationCriteriaRequest.getLookUpDataId()); - entity.setCall(callEntity); - entity.setLookupData(looDataEntity); - entity.setScore(0L); - if (evaluationCriteriaRequest.getScore() != null) { - entity.setScore(evaluationCriteriaRequest.getScore()); - } - entity = evaluationCriteriaRepository.save(entity); - return entity; - } + @Autowired + private HttpServletRequest request; - 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 createEvaluationCriteria(EvaluationCriteriaRequest evaluationCriteriaRequest) { - public EvaluationCriteriaResponseBean updateEvaluationCriteria(Long id, EvaluationCriteriaRequest request) { - EvaluationCriteriaEntity entity = evaluationCriteriaRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, - Translator.toLocale(GepafinConstant.EVALUATION_CRITERIA_NOT_FOUND))); - entity = convertEvaluationCriteriaRequestToEvaluationCriteriaEntity(request); - return convertEvaluationCriteriaEntityEvaluationCriteriaToResponseBean(entity); - } + EvaluationCriteriaEntity entity = convertEvaluationCriteriaRequestToEvaluationCriteriaEntity(evaluationCriteriaRequest, VersionActionTypeEnum.INSERT, null); + return convertEvaluationCriteriaEntityEvaluationCriteriaToResponseBean(entity); + } - public void deleteEvaluationCriteria(Long id) { - evaluationCriteriaRepository.deleteById(id); - EvaluationCriteriaEntity evaluationCriteriaEntity = validateEvaluationCriteria(id); - evaluationCriteriaEntity.setIsDeleted(Boolean.TRUE); - evaluationCriteriaRepository.save(evaluationCriteriaEntity); - List list = criteriaFormFieldRepository.findByEvaluationCriteriaIdAndIsDeletedFalse(evaluationCriteriaEntity.getId()) - .stream() - .peek(data -> data.setIsDeleted(Boolean.TRUE)) - .toList();; - criteriaFormFieldRepository.saveAll(list); - } + private EvaluationCriteriaEntity convertEvaluationCriteriaRequestToEvaluationCriteriaEntity(EvaluationCriteriaRequest evaluationCriteriaRequest, + VersionActionTypeEnum actionType, EvaluationCriteriaEntity evaluationCriteriaEntity) { - 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; - } + 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 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 updatedList = criteriaFormFieldRepository.findByEvaluationCriteriaIdAndIsDeletedFalse(evaluationCriteriaEntity.getId()).stream() + .peek(data -> data.setIsDeleted(Boolean.TRUE)).toList(); + + List 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; + } } diff --git a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java index cd567918..0864ac4d 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java @@ -116,7 +116,13 @@ public enum UserActionContextEnum { /** Dashboard action context **/ GET_DASHBOARD_WIDGET_FOR_SUPER_ADMIN("GET_DASHBOARD_WIDGET_FOR_SUPER_ADMIN"), - GET_DASHBOARD_WIDGET_FOR_BENEFICIARY("GET_DASHBOARD_WIDGET_FOR_BENEFICIARY"); + GET_DASHBOARD_WIDGET_FOR_BENEFICIARY("GET_DASHBOARD_WIDGET_FOR_BENEFICIARY"), + + /** Evaluation criteria action context **/ + GET_EVALUATION_CRITERIA("GET_EVALUATION_CRITERIA"), + UPDATE_EVALUATION_CRITERIA("UPDATE_EVALUATION_CRITERIA"), + DELETE_EVALUATION_CRITERIA("DELETE_EVALUATION_CRITERIA"), + CREATE_EVALUATION_CRITERIA("CREATE_EVALUATION_CRITERIA"); private final String value; diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/EvaluationCriteriaApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/EvaluationCriteriaApiController.java index 37e8b7a6..cc64b15c 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/EvaluationCriteriaApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/EvaluationCriteriaApiController.java @@ -2,10 +2,14 @@ package net.gepafin.tendermanagement.web.rest.api.impl; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; +import net.gepafin.tendermanagement.enums.UserActionContextEnum; +import net.gepafin.tendermanagement.enums.UserActionLogsEnum; import net.gepafin.tendermanagement.model.request.EvaluationCriteriaRequest; +import net.gepafin.tendermanagement.model.request.UserActionRequest; import net.gepafin.tendermanagement.model.response.EvaluationCriteriaResponseBean; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.service.EvaluationCriteriaService; +import net.gepafin.tendermanagement.util.LoggingUtil; import net.gepafin.tendermanagement.web.rest.api.EvaluationCriteriaApi; import net.gepafin.tendermanagement.web.rest.api.errors.Status; import org.springframework.beans.factory.annotation.Autowired; @@ -24,8 +28,15 @@ public class EvaluationCriteriaApiController implements EvaluationCriteriaApi { @Autowired private EvaluationCriteriaService service; + @Autowired + private LoggingUtil loggingUtil; + @Override public ResponseEntity> createEvaluationCriteria(HttpServletRequest request, EvaluationCriteriaRequest evaluationCriteriaRequest) { + + /** This code is responsible for creating user action logs for the "create evaluation criteria" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.INSERT).actionContext(UserActionContextEnum.CREATE_EVALUATION_CRITERIA).build()); + EvaluationCriteriaResponseBean responseBean = service.createEvaluationCriteria(request,evaluationCriteriaRequest); return ResponseEntity.status(HttpStatus.CREATED) .body(new Response<>(responseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.EVALUATION_CRITERIA_CREATED_SUCCESSFULLY))); @@ -33,6 +44,10 @@ public class EvaluationCriteriaApiController implements EvaluationCriteriaApi { @Override public ResponseEntity> getEvaluationCriteriaById(HttpServletRequest request, Long id) { + + /** This code is responsible for creating user action logs for the "get evaluation criteria" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_EVALUATION_CRITERIA).build()); + EvaluationCriteriaResponseBean responseBean = service.getEvaluationCriteria(request,id); if (responseBean != null) { return ResponseEntity.status(HttpStatus.OK) @@ -46,6 +61,10 @@ public class EvaluationCriteriaApiController implements EvaluationCriteriaApi { @Override @Transactional(rollbackFor=Exception.class) public ResponseEntity> updateEvaluationCriteria(HttpServletRequest request, Long id, EvaluationCriteriaRequest evaluationCriteriaRequest) { + + /** This code is responsible for creating user action logs for the "Update evaluation criteria" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.UPDATE).actionContext(UserActionContextEnum.UPDATE_EVALUATION_CRITERIA).build()); + EvaluationCriteriaResponseBean responseBean = service.updateEvaluationCriteria(request,id, evaluationCriteriaRequest); if (responseBean != null) { return ResponseEntity.status(HttpStatus.OK) @@ -58,6 +77,10 @@ public class EvaluationCriteriaApiController implements EvaluationCriteriaApi { @Override public ResponseEntity> deleteEvaluationCriteria(HttpServletRequest request, Long id) { + + /** This code is responsible for creating user action logs for the "deleting evaluation criteria" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.DELETE).actionContext(UserActionContextEnum.DELETE_EVALUATION_CRITERIA).build()); + service.deleteEvaluationCriteria(request,id); return ResponseEntity.status(HttpStatus.OK)