Added user action and versoining for evaluation criteria.

This commit is contained in:
piyushkag
2024-11-25 11:14:12 +05:30
parent 9a0a8fe93a
commit ba71b77f17
3 changed files with 135 additions and 64 deletions

View File

@@ -1,17 +1,22 @@
package net.gepafin.tendermanagement.dao; package net.gepafin.tendermanagement.dao;
import jakarta.servlet.http.HttpServletRequest;
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.CallEntity; import net.gepafin.tendermanagement.entities.CallEntity;
import net.gepafin.tendermanagement.entities.CriteriaFormFieldEntity; import net.gepafin.tendermanagement.entities.CriteriaFormFieldEntity;
import net.gepafin.tendermanagement.entities.EvaluationCriteriaEntity; import net.gepafin.tendermanagement.entities.EvaluationCriteriaEntity;
import net.gepafin.tendermanagement.entities.LookUpDataEntity; 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.EvaluationCriteriaRequest;
import net.gepafin.tendermanagement.model.request.VersionHistoryRequest;
import net.gepafin.tendermanagement.model.response.EvaluationCriteriaResponseBean; import net.gepafin.tendermanagement.model.response.EvaluationCriteriaResponseBean;
import net.gepafin.tendermanagement.repositories.CriteriaFormFieldRepository; import net.gepafin.tendermanagement.repositories.CriteriaFormFieldRepository;
import net.gepafin.tendermanagement.repositories.EvaluationCriteriaRepository; import net.gepafin.tendermanagement.repositories.EvaluationCriteriaRepository;
import net.gepafin.tendermanagement.service.CallService; import net.gepafin.tendermanagement.service.CallService;
import net.gepafin.tendermanagement.service.LookUpDataService; 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.ResourceNotFoundException;
import net.gepafin.tendermanagement.web.rest.api.errors.Status; import net.gepafin.tendermanagement.web.rest.api.errors.Status;
@@ -35,72 +40,109 @@ public class EvaluationCriteriaDao {
@Autowired @Autowired
private CriteriaFormFieldRepository criteriaFormFieldRepository; private CriteriaFormFieldRepository criteriaFormFieldRepository;
public EvaluationCriteriaResponseBean createEvaluationCriteria( @Autowired
EvaluationCriteriaRequest evaluationCriteriaRequest) { private LoggingUtil loggingUtil;
EvaluationCriteriaEntity entity = convertEvaluationCriteriaRequestToEvaluationCriteriaEntity(
evaluationCriteriaRequest);
return convertEvaluationCriteriaEntityEvaluationCriteriaToResponseBean(entity);
}
private EvaluationCriteriaEntity convertEvaluationCriteriaRequestToEvaluationCriteriaEntity( @Autowired
EvaluationCriteriaRequest evaluationCriteriaRequest) { private HttpServletRequest request;
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;
}
public EvaluationCriteriaResponseBean getEvaluationCriteriaById(Long id) { public EvaluationCriteriaResponseBean createEvaluationCriteria(EvaluationCriteriaRequest evaluationCriteriaRequest) {
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) { EvaluationCriteriaEntity entity = convertEvaluationCriteriaRequestToEvaluationCriteriaEntity(evaluationCriteriaRequest, VersionActionTypeEnum.INSERT, null);
return evaluationCriteriaRepository.findById(id) return convertEvaluationCriteriaEntityEvaluationCriteriaToResponseBean(entity);
.orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, }
Translator.toLocale(GepafinConstant.EVALUATION_CRITERIA_NOT_FOUND)));
}
public EvaluationCriteriaResponseBean updateEvaluationCriteria(Long id, EvaluationCriteriaRequest request) { private EvaluationCriteriaEntity convertEvaluationCriteriaRequestToEvaluationCriteriaEntity(EvaluationCriteriaRequest evaluationCriteriaRequest,
EvaluationCriteriaEntity entity = evaluationCriteriaRepository.findById(id) VersionActionTypeEnum actionType, EvaluationCriteriaEntity evaluationCriteriaEntity) {
.orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND,
Translator.toLocale(GepafinConstant.EVALUATION_CRITERIA_NOT_FOUND)));
entity = convertEvaluationCriteriaRequestToEvaluationCriteriaEntity(request);
return convertEvaluationCriteriaEntityEvaluationCriteriaToResponseBean(entity);
}
public void deleteEvaluationCriteria(Long id) { EvaluationCriteriaEntity entity;
evaluationCriteriaRepository.deleteById(id); if (evaluationCriteriaEntity != null && evaluationCriteriaEntity.getId() != null) {
EvaluationCriteriaEntity evaluationCriteriaEntity = validateEvaluationCriteria(id); entity = evaluationCriteriaEntity;
evaluationCriteriaEntity.setIsDeleted(Boolean.TRUE); } else {
evaluationCriteriaRepository.save(evaluationCriteriaEntity); entity = new EvaluationCriteriaEntity();
List<CriteriaFormFieldEntity> list = criteriaFormFieldRepository.findByEvaluationCriteriaIdAndIsDeletedFalse(evaluationCriteriaEntity.getId()) }
.stream() //cloned for old data
.peek(data -> data.setIsDeleted(Boolean.TRUE)) EvaluationCriteriaEntity oldEvaluationCriteriaData = Utils.getClonedEntityForData(entity);
.toList();;
criteriaFormFieldRepository.saveAll(list);
}
private EvaluationCriteriaResponseBean convertEvaluationCriteriaEntityEvaluationCriteriaToResponseBean( CallEntity callEntity = callService.validateCall(evaluationCriteriaRequest.getCallId());
EvaluationCriteriaEntity entity) { LookUpDataEntity lookupDataEntity = lookUpDataService.getOrCreateLookUpDataEntity(evaluationCriteriaRequest, LookUpDataEntity.LookUpDataTypeEnum.EVALUATION_CRITERIA);
EvaluationCriteriaResponseBean response = new EvaluationCriteriaResponseBean(); entity.setCall(callEntity);
response.setId(entity.getId()); entity.setLookupData(lookupDataEntity);
response.setScore(entity.getScore()); entity.setScore(0L);
response.setCreatedDate(entity.getCreatedDate()); if (evaluationCriteriaRequest.getScore() != null) {
response.setUpdatedDate(entity.getUpdatedDate()); entity.setScore(evaluationCriteriaRequest.getScore());
response.setLookUpDataId(entity.getLookupData().getId()); }
response.setTitle(entity.getLookupData().getTitle()); entity = evaluationCriteriaRepository.save(entity);
response.setValue(entity.getLookupData().getValue());
return response; /** 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;
}
} }

View File

@@ -116,7 +116,13 @@ public enum UserActionContextEnum {
/** Dashboard action context **/ /** Dashboard action context **/
GET_DASHBOARD_WIDGET_FOR_SUPER_ADMIN("GET_DASHBOARD_WIDGET_FOR_SUPER_ADMIN"), 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; private final String value;

View File

@@ -2,10 +2,14 @@ package net.gepafin.tendermanagement.web.rest.api.impl;
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.enums.UserActionContextEnum;
import net.gepafin.tendermanagement.enums.UserActionLogsEnum;
import net.gepafin.tendermanagement.model.request.EvaluationCriteriaRequest; 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.response.EvaluationCriteriaResponseBean;
import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.model.util.Response;
import net.gepafin.tendermanagement.service.EvaluationCriteriaService; 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.EvaluationCriteriaApi;
import net.gepafin.tendermanagement.web.rest.api.errors.Status; import net.gepafin.tendermanagement.web.rest.api.errors.Status;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -24,8 +28,15 @@ public class EvaluationCriteriaApiController implements EvaluationCriteriaApi {
@Autowired @Autowired
private EvaluationCriteriaService service; private EvaluationCriteriaService service;
@Autowired
private LoggingUtil loggingUtil;
@Override @Override
public ResponseEntity<Response<EvaluationCriteriaResponseBean>> createEvaluationCriteria(HttpServletRequest request, EvaluationCriteriaRequest evaluationCriteriaRequest) { public ResponseEntity<Response<EvaluationCriteriaResponseBean>> 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); EvaluationCriteriaResponseBean responseBean = service.createEvaluationCriteria(request,evaluationCriteriaRequest);
return ResponseEntity.status(HttpStatus.CREATED) return ResponseEntity.status(HttpStatus.CREATED)
.body(new Response<>(responseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.EVALUATION_CRITERIA_CREATED_SUCCESSFULLY))); .body(new Response<>(responseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.EVALUATION_CRITERIA_CREATED_SUCCESSFULLY)));
@@ -33,6 +44,10 @@ public class EvaluationCriteriaApiController implements EvaluationCriteriaApi {
@Override @Override
public ResponseEntity<Response<EvaluationCriteriaResponseBean>> getEvaluationCriteriaById(HttpServletRequest request, Long id) { public ResponseEntity<Response<EvaluationCriteriaResponseBean>> 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); EvaluationCriteriaResponseBean responseBean = service.getEvaluationCriteria(request,id);
if (responseBean != null) { if (responseBean != null) {
return ResponseEntity.status(HttpStatus.OK) return ResponseEntity.status(HttpStatus.OK)
@@ -46,6 +61,10 @@ public class EvaluationCriteriaApiController implements EvaluationCriteriaApi {
@Override @Override
@Transactional(rollbackFor=Exception.class) @Transactional(rollbackFor=Exception.class)
public ResponseEntity<Response<EvaluationCriteriaResponseBean>> updateEvaluationCriteria(HttpServletRequest request, Long id, EvaluationCriteriaRequest evaluationCriteriaRequest) { public ResponseEntity<Response<EvaluationCriteriaResponseBean>> 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); EvaluationCriteriaResponseBean responseBean = service.updateEvaluationCriteria(request,id, evaluationCriteriaRequest);
if (responseBean != null) { if (responseBean != null) {
return ResponseEntity.status(HttpStatus.OK) return ResponseEntity.status(HttpStatus.OK)
@@ -58,6 +77,10 @@ public class EvaluationCriteriaApiController implements EvaluationCriteriaApi {
@Override @Override
public ResponseEntity<Response<Void>> deleteEvaluationCriteria(HttpServletRequest request, Long id) { public ResponseEntity<Response<Void>> 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); service.deleteEvaluationCriteria(request,id);
return ResponseEntity.status(HttpStatus.OK) return ResponseEntity.status(HttpStatus.OK)