Added audit for assigned application

This commit is contained in:
rajesh
2024-11-23 22:56:17 +05:30
parent 5581146888
commit 281848208a
3 changed files with 101 additions and 46 deletions

View File

@@ -1,20 +1,26 @@
package net.gepafin.tendermanagement.dao; package net.gepafin.tendermanagement.dao;
import jakarta.persistence.criteria.Predicate; import jakarta.persistence.criteria.Predicate;
import jakarta.servlet.http.HttpServletRequest; 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.ApplicationEntity; import net.gepafin.tendermanagement.entities.ApplicationEntity;
import net.gepafin.tendermanagement.entities.AssignedApplicationsEntity; import net.gepafin.tendermanagement.entities.AssignedApplicationsEntity;
import net.gepafin.tendermanagement.entities.FaqEntity;
import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.entities.UserEntity;
import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
import net.gepafin.tendermanagement.enums.AssignedApplicationEnum; import net.gepafin.tendermanagement.enums.AssignedApplicationEnum;
import net.gepafin.tendermanagement.enums.VersionActionTypeEnum;
import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest;
import net.gepafin.tendermanagement.model.request.VersionHistoryRequest;
import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse; import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse;
import net.gepafin.tendermanagement.repositories.ApplicationRepository; import net.gepafin.tendermanagement.repositories.ApplicationRepository;
import net.gepafin.tendermanagement.repositories.AssignedApplicationsRepository; import net.gepafin.tendermanagement.repositories.AssignedApplicationsRepository;
import net.gepafin.tendermanagement.service.ApplicationService; import net.gepafin.tendermanagement.service.ApplicationService;
import net.gepafin.tendermanagement.service.UserService; import net.gepafin.tendermanagement.service.UserService;
import net.gepafin.tendermanagement.util.DateTimeUtil; import net.gepafin.tendermanagement.util.DateTimeUtil;
import net.gepafin.tendermanagement.util.LoggingUtil;
import net.gepafin.tendermanagement.util.Utils;
import net.gepafin.tendermanagement.util.Validator; import net.gepafin.tendermanagement.util.Validator;
import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException;
import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException; import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException;
@@ -47,6 +53,11 @@ public class AssignedApplicationsDao {
@Autowired @Autowired
private Validator validator; private Validator validator;
@Autowired
private LoggingUtil loggingUtil;
@Autowired
private HttpServletRequest request;
public AssignedApplicationsResponse createAssignedApplications(Long applicationId, Long userId, UserEntity assignedByUser, AssignedApplicationsRequest assignedApplicationsRequest) { public AssignedApplicationsResponse createAssignedApplications(Long applicationId, Long userId, UserEntity assignedByUser, AssignedApplicationsRequest assignedApplicationsRequest) {
log.info("Assigning application to pre-Instructor with details: {}", applicationId, userId); log.info("Assigning application to pre-Instructor with details: {}", applicationId, userId);
@@ -64,8 +75,13 @@ public class AssignedApplicationsDao {
Translator.toLocale(GepafinConstant.INVALID_APPLICATION_STATUS) Translator.toLocale(GepafinConstant.INVALID_APPLICATION_STATUS)
); );
} }
ApplicationEntity oldApplicationEntity = Utils.getClonedEntityForData(application);
application.setStatus(ApplicationStatusTypeEnum.EVALUATION.getValue()); application.setStatus(ApplicationStatusTypeEnum.EVALUATION.getValue());
applicationRepository.save(application); applicationRepository.save(application);
/** This code is responsible for adding a version history log for the "Create Application" operation. **/
loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplicationEntity).newData(application).build());
UserEntity user = userService.validateUser(userId); UserEntity user = userService.validateUser(userId);
AssignedApplicationsEntity assignment = createAssignmentEntity(application, user.getId(), assignedByUser, assignedApplicationsRequest); AssignedApplicationsEntity assignment = createAssignmentEntity(application, user.getId(), assignedByUser, assignedApplicationsRequest);
AssignedApplicationsResponse assignApplicationToInstructorResponse = convertEntityToResponse(assignment); AssignedApplicationsResponse assignApplicationToInstructorResponse = convertEntityToResponse(assignment);
@@ -86,12 +102,18 @@ public class AssignedApplicationsDao {
assignApplication.setNote(assignedApplicationsRequest.getNote()); assignApplication.setNote(assignedApplicationsRequest.getNote());
assignApplication.setIsDeleted(false); assignApplication.setIsDeleted(false);
assignApplication.setAssignedAt(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); assignApplication.setAssignedAt(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
AssignedApplicationsEntity assignedApplicationsEntity = saveAssignedApplication(assignApplication);
AssignedApplicationsEntity assignedApplicationsEntity = saveAssignedApplication(assignApplication, null, VersionActionTypeEnum.INSERT);
return assignedApplicationsEntity; return assignedApplicationsEntity;
} }
public AssignedApplicationsEntity saveAssignedApplication(AssignedApplicationsEntity assignedApplicationsEntity){
public AssignedApplicationsEntity saveAssignedApplication(AssignedApplicationsEntity assignedApplicationsEntity, AssignedApplicationsEntity oldAssignedApplicationEntity, VersionActionTypeEnum actionTypeEnum) {
AssignedApplicationsEntity assignedApplication = assignedApplicationsRepository.save(assignedApplicationsEntity); AssignedApplicationsEntity assignedApplication = assignedApplicationsRepository.save(assignedApplicationsEntity);
/** This code is responsible for adding a version history log for the "Create Application" operation. **/
loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(actionTypeEnum).oldData(oldAssignedApplicationEntity).newData(assignedApplication).build());
return assignedApplication; return assignedApplication;
} }
@@ -146,8 +168,9 @@ public class AssignedApplicationsDao {
log.info("Deleting assigned application with ID: {}", id); log.info("Deleting assigned application with ID: {}", id);
AssignedApplicationsEntity assignedApplicationsEntity = validateAssignedApplication(id); AssignedApplicationsEntity assignedApplicationsEntity = validateAssignedApplication(id);
validator.validatePreInstructor(request, assignedApplicationsEntity.getUserId()); validator.validatePreInstructor(request, assignedApplicationsEntity.getUserId());
AssignedApplicationsEntity oldAssignedApplicationEntity = Utils.getClonedEntityForData(assignedApplicationsEntity);
assignedApplicationsEntity.setIsDeleted(true); assignedApplicationsEntity.setIsDeleted(true);
assignedApplicationsEntity= saveAssignedApplication(assignedApplicationsEntity); assignedApplicationsEntity = saveAssignedApplication(assignedApplicationsEntity, oldAssignedApplicationEntity, VersionActionTypeEnum.DELETE);
log.info("Assigned Application deleted with ID: {}", id); log.info("Assigned Application deleted with ID: {}", id);
} }
@@ -165,6 +188,7 @@ public class AssignedApplicationsDao {
.map(entity -> convertEntityToResponse(entity)) .map(entity -> convertEntityToResponse(entity))
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
private Specification<AssignedApplicationsEntity> search(Long hubId, Long userId) { private Specification<AssignedApplicationsEntity> search(Long hubId, Long userId) {
return (root, query, builder) -> { return (root, query, builder) -> {
Predicate predicate = builder.isFalse(root.get("isDeleted")); Predicate predicate = builder.isFalse(root.get("isDeleted"));
@@ -183,13 +207,16 @@ public class AssignedApplicationsDao {
log.info("Updating assigned application with ID: {}", id); log.info("Updating assigned application with ID: {}", id);
AssignedApplicationsEntity existingAssignment = validateAssignedApplication(id); AssignedApplicationsEntity existingAssignment = validateAssignedApplication(id);
validator.validatePreInstructor(request, existingAssignment.getUserId()); validator.validatePreInstructor(request, existingAssignment.getUserId());
AssignedApplicationsEntity oldAssignedApplicationEntity = Utils.getClonedEntityForData(existingAssignment);
setIfUpdated(existingAssignment::getNote, existingAssignment::setNote, updateRequest.getNote()); setIfUpdated(existingAssignment::getNote, existingAssignment::setNote, updateRequest.getNote());
setIfUpdated(existingAssignment::getStatus, existingAssignment::setStatus, updateRequest.getStatus().name()); setIfUpdated(existingAssignment::getStatus, existingAssignment::setStatus, updateRequest.getStatus().name());
setIfUpdated(existingAssignment::getAssignedBy, existingAssignment::setAssignedBy, updatedByUser.getId()); setIfUpdated(existingAssignment::getAssignedBy, existingAssignment::setAssignedBy, updatedByUser.getId());
existingAssignment.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); existingAssignment.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
AssignedApplicationsEntity updatedAssignment = saveAssignedApplication(existingAssignment); AssignedApplicationsEntity updatedAssignment = saveAssignedApplication(existingAssignment, oldAssignedApplicationEntity, VersionActionTypeEnum.UPDATE);
AssignedApplicationsResponse response = convertEntityToResponse(updatedAssignment); AssignedApplicationsResponse response = convertEntityToResponse(updatedAssignment);
log.info("Assigned application updated successfully: {}", response); log.info("Assigned application updated successfully: {}", response);
return response; return response;

View File

@@ -29,7 +29,13 @@ public enum UserActionContextEnum {
CREATE_FAQ("CREATE_FAQ"), CREATE_FAQ("CREATE_FAQ"),
GET_FAQ("GET_FAQ"), GET_FAQ("GET_FAQ"),
UPDATE_FAQ_DETAILS("UPDATE_FAQ_DETAILS"), UPDATE_FAQ_DETAILS("UPDATE_FAQ_DETAILS"),
DELETE_FAQ("DELETE_FAQ") DELETE_FAQ("DELETE_FAQ"),
/** Assigned Application action context **/
CREATE_ASSIGNED_APPLICATION("CREATE_ASSIGNED_APPLICATION"),
DELETE_ASSIGNED_APPLICATION("DELETE_ASSIGNED_APPLICATION"),
GET_ASSIGNED_APPLICATION("GET_ASSIGNED_APPLICATION"),
UPDATE_ASSIGNED_APPLICATION_DETAILS("UPDATE_ASSIGNED_APPLICATION_DETAILS")
; ;
private final String value; private final String value;

View File

@@ -4,10 +4,14 @@ import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
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.AssignedApplicationsRequest; import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest;
import net.gepafin.tendermanagement.model.request.UserActionRequest;
import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse; import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse;
import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.model.util.Response;
import net.gepafin.tendermanagement.service.AssignedApplicationsService; import net.gepafin.tendermanagement.service.AssignedApplicationsService;
import net.gepafin.tendermanagement.util.LoggingUtil;
import net.gepafin.tendermanagement.web.rest.api.AssignedApplicationsApi; import net.gepafin.tendermanagement.web.rest.api.AssignedApplicationsApi;
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;
@@ -25,10 +29,15 @@ public class AssignedApplicationsController implements AssignedApplicationsApi {
@Autowired @Autowired
AssignedApplicationsService assignedApplicationsService; AssignedApplicationsService assignedApplicationsService;
@Autowired
private LoggingUtil loggingUtil;
@Override @Override
public ResponseEntity<Response<AssignedApplicationsResponse>> createAssignedApplications(HttpServletRequest request, Long applicationId, Long userId, AssignedApplicationsRequest assignedApplicationsRequest) { public ResponseEntity<Response<AssignedApplicationsResponse>> createAssignedApplications(HttpServletRequest request, Long applicationId, Long userId, AssignedApplicationsRequest assignedApplicationsRequest) {
log.info("Assigning Application To PreInstructor"); log.info("Assigning Application To PreInstructor");
/** This code is responsible for creating user action logs for the "Create Assigned Applications" operation. **/
loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.INSERT)
.actionContext(UserActionContextEnum.CREATE_ASSIGNED_APPLICATION).build());
AssignedApplicationsResponse responseData = assignedApplicationsService.createAssignedApplications(request, applicationId, userId, assignedApplicationsRequest); AssignedApplicationsResponse responseData = assignedApplicationsService.createAssignedApplications(request, applicationId, userId, assignedApplicationsRequest);
return ResponseEntity.status(HttpStatus.CREATED) return ResponseEntity.status(HttpStatus.CREATED)
.body(new Response<>(responseData, Status.SUCCESS, Translator.toLocale(GepafinConstant.APPLICATION_ASSIGNED))); .body(new Response<>(responseData, Status.SUCCESS, Translator.toLocale(GepafinConstant.APPLICATION_ASSIGNED)));
@@ -37,6 +46,9 @@ public class AssignedApplicationsController implements AssignedApplicationsApi {
@Override @Override
public ResponseEntity<Response<Void>> deleteAssignedApplication(HttpServletRequest request, Long id) { public ResponseEntity<Response<Void>> deleteAssignedApplication(HttpServletRequest request, Long id) {
log.info("Delete Assigned Application - Assigned Application ID: {}", id); log.info("Delete Assigned Application - Assigned Application ID: {}", id);
/** This code is responsible for creating user action logs for the "Delete Assigned Applications" operation. **/
loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.DELETE).actionContext(UserActionContextEnum.DELETE_ASSIGNED_APPLICATION).build());
assignedApplicationsService.deleteApplication(request, id); assignedApplicationsService.deleteApplication(request, id);
return ResponseEntity.status(HttpStatus.OK) return ResponseEntity.status(HttpStatus.OK)
.body(new Response<>(null, Status.SUCCESS, Translator.toLocale(GepafinConstant.DELETE_ASSIGNED_APPLICATION_SUCCESS_MSG))); .body(new Response<>(null, Status.SUCCESS, Translator.toLocale(GepafinConstant.DELETE_ASSIGNED_APPLICATION_SUCCESS_MSG)));
@@ -45,6 +57,9 @@ public class AssignedApplicationsController implements AssignedApplicationsApi {
@Override @Override
public ResponseEntity<Response<List<AssignedApplicationsResponse>>> getAllAssignedApplications(HttpServletRequest request, Long userId) { public ResponseEntity<Response<List<AssignedApplicationsResponse>>> getAllAssignedApplications(HttpServletRequest request, Long userId) {
log.info("Get All Assigned Applications"); log.info("Get All Assigned Applications");
/** This code is responsible for creating user action logs for the "get Assigned Applications" operation. **/
loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW)
.actionContext(UserActionContextEnum.GET_ASSIGNED_APPLICATION).build());
List<AssignedApplicationsResponse> applications = assignedApplicationsService.getAllAssignedApplications(request, userId); List<AssignedApplicationsResponse> applications = assignedApplicationsService.getAllAssignedApplications(request, userId);
return ResponseEntity.status(HttpStatus.OK) return ResponseEntity.status(HttpStatus.OK)
.body(new Response<>(applications, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_ASSIGNED_APPLICATION_SUCCESS_MSG))); .body(new Response<>(applications, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_ASSIGNED_APPLICATION_SUCCESS_MSG)));
@@ -53,6 +68,9 @@ public class AssignedApplicationsController implements AssignedApplicationsApi {
@Override @Override
public ResponseEntity<Response<AssignedApplicationsResponse>> updateAssignedApplication(HttpServletRequest request, Long id, AssignedApplicationsRequest updateAssignedApplicationRequest) { public ResponseEntity<Response<AssignedApplicationsResponse>> updateAssignedApplication(HttpServletRequest request, Long id, AssignedApplicationsRequest updateAssignedApplicationRequest) {
log.info("Update Assigned Application"); log.info("Update Assigned Application");
/** This code is responsible for "Updating Assigned Applications details" operation. **/
loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.UPDATE)
.actionContext(UserActionContextEnum.UPDATE_ASSIGNED_APPLICATION_DETAILS).build());
AssignedApplicationsResponse updateAssignedApplication = assignedApplicationsService.updateAssignedApplication(request, id, updateAssignedApplicationRequest); AssignedApplicationsResponse updateAssignedApplication = assignedApplicationsService.updateAssignedApplication(request, id, updateAssignedApplicationRequest);
return ResponseEntity.status(HttpStatus.CREATED) return ResponseEntity.status(HttpStatus.CREATED)
.body(new Response<>(updateAssignedApplication, Status.SUCCESS, Translator.toLocale(GepafinConstant.ASSIGNED_APPLICATION_UPDATE_SUCCESSFULLY_MSG))); .body(new Response<>(updateAssignedApplication, Status.SUCCESS, Translator.toLocale(GepafinConstant.ASSIGNED_APPLICATION_UPDATE_SUCCESSFULLY_MSG)));
@@ -61,6 +79,10 @@ public class AssignedApplicationsController implements AssignedApplicationsApi {
@Override @Override
public ResponseEntity<Response<AssignedApplicationsResponse>> getAssignedApplicationById(HttpServletRequest request, Long id) { public ResponseEntity<Response<AssignedApplicationsResponse>> getAssignedApplicationById(HttpServletRequest request, Long id) {
log.info("Get Assigned Applications By Id"); log.info("Get Assigned Applications By Id");
/** This code is responsible for creating user action logs for the "get Assigned Applications by id" operation. **/
loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW)
.actionContext(UserActionContextEnum.GET_ASSIGNED_APPLICATION).build());
AssignedApplicationsResponse application = assignedApplicationsService.getAssignedApplicationById(request, id); AssignedApplicationsResponse application = assignedApplicationsService.getAssignedApplicationById(request, id);
return ResponseEntity.status(HttpStatus.OK) return ResponseEntity.status(HttpStatus.OK)
.body(new Response<>(application, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_ASSIGNED_APPLICATION_SUCCESS_MSG))); .body(new Response<>(application, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_ASSIGNED_APPLICATION_SUCCESS_MSG)));