From b835ee5e5acf1ae93d5a4e2f65b2eb4521e13235 Mon Sep 17 00:00:00 2001 From: piyushkag Date: Sat, 23 Nov 2024 22:27:13 +0530 Subject: [PATCH] Added audit for application and faq. --- .../tendermanagement/dao/ApplicationDao.java | 252 ++++++++++++------ .../dao/EmailNotificationDao.java | 2 +- .../gepafin/tendermanagement/dao/FaqDao.java | 28 +- .../tendermanagement/dao/ProtocolDao.java | 13 + .../enums/UserActionContextEnum.java | 19 +- .../scheduler/NotificationScheduler.java | 2 +- .../service/impl/ApplicationServiceImpl.java | 6 +- .../api/impl/ApplicationApiController.java | 116 ++++++-- .../web/rest/api/impl/FaqApiController.java | 33 +-- .../web/rest/api/impl/UserApiController.java | 14 +- .../db/changelog/db.changelog-1.0.0.xml | 8 +- 11 files changed, 343 insertions(+), 150 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index cf2e08c2..9b37ff36 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -1,6 +1,7 @@ package net.gepafin.tendermanagement.dao; import net.gepafin.tendermanagement.config.Translator; +import net.gepafin.tendermanagement.config.jwt.TokenProvider; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.entities.*; import net.gepafin.tendermanagement.entities.SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum; @@ -8,6 +9,7 @@ import net.gepafin.tendermanagement.enums.*; import net.gepafin.tendermanagement.model.request.ApplicationFormFieldRequestBean; import net.gepafin.tendermanagement.model.request.ApplicationRequest; import net.gepafin.tendermanagement.model.request.ApplicationRequestBean; +import net.gepafin.tendermanagement.model.request.VersionHistoryRequest; import net.gepafin.tendermanagement.model.response.*; import net.gepafin.tendermanagement.repositories.*; import net.gepafin.tendermanagement.service.AmazonS3Service; @@ -20,6 +22,7 @@ import net.gepafin.tendermanagement.service.SystemEmailTemplatesService; import net.gepafin.tendermanagement.service.UserService; 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.util.Validator; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; @@ -142,6 +145,14 @@ public class ApplicationDao { @Autowired private FormDao formDao; + @Autowired + private LoggingUtil loggingUtil; + + @Autowired + private HttpServletRequest request; + + @Autowired + private TokenProvider tokenProvider; public ApplicationResponseBean createApplication(HttpServletRequest request, ApplicationRequestBean applicationRequestBean, Long formId, Long applicationId) { FormEntity formEntity = formService.validateForm(formId); @@ -157,6 +168,7 @@ public class ApplicationDao { createOrUpdateMultipleFormFields(applicationRequestBean.getFormFields(), applicationFormEntity, formEntity); return getApplicationById(applicationEntity.getId(),formEntity.getId()); } + public void validateDelegation(UserEntity user, CompanyEntity company) { UserWithCompanyEntity userWithCompany = companyService.getUserWithCompanyEntity(user.getId(), company.getId()); @@ -256,12 +268,19 @@ public class ApplicationDao { } public void deleteById(HttpServletRequest request, Long id) { + log.info("Deleting application with ID: {}", id); - ApplicationEntity applicationEntity= validateApplication(id); + ApplicationEntity applicationEntity = validateApplication(id); + ApplicationEntity oldApplicationDataEntity = Utils.getClonedEntityForData(applicationEntity); validator.validateUserWithCompany(request, applicationEntity.getCompany().getId()); applicationEntity.setIsDeleted(true); - applicationEntity=saveApplicationEntity(applicationEntity); + applicationEntity = applicationRepository.save(applicationEntity); + + /** This code is responsible for adding a version history log for the "Delete application" operation. **/ + loggingUtil.addVersionHistory( + VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.SOFT_DELETE).oldData(oldApplicationDataEntity).newData(applicationEntity).build()); + log.info("Application deleted with ID: {}", id); } @@ -385,56 +404,76 @@ public class ApplicationDao { } private ApplicationFormEntity getApplicationFormOrCreate(FormEntity formEntity, ApplicationEntity applicationEntity) { + ApplicationFormEntity applicationFormEntity = applicationFormRepository.findByApplicationIdAndFormId(applicationEntity.getId(), formEntity.getId()); - if(applicationFormEntity == null){ + ApplicationFormEntity oldApplicationFormEntity = Utils.getClonedEntityForData(applicationFormEntity); + if (applicationFormEntity == null) { applicationFormEntity = createApplicationFormEntity(applicationEntity, formEntity); + + /** This code is responsible for adding a version history log for the "Create application form" operation. **/ + loggingUtil.addVersionHistory( + VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.INSERT).oldData(oldApplicationFormEntity).newData(applicationFormEntity) + .build()); } return applicationFormEntity; } - public List createOrUpdateMultipleFormFields(List formFieldResponseBeans, ApplicationFormEntity applicationFormEntity,FormEntity formEntity) { + public List createOrUpdateMultipleFormFields(List formFieldResponseBeans, + ApplicationFormEntity applicationFormEntity, FormEntity formEntity) { + List existingFields = applicationFormFieldRepository.findByApplicationFormId(applicationFormEntity.getId()); - List applicationFormFieldEntity = formFieldResponseBeans.stream() - .map(requestBean -> createOrUpdateApplicationFormField(requestBean, applicationFormEntity,existingFields,formEntity)) + return formFieldResponseBeans.stream().map(requestBean -> createOrUpdateApplicationFormField(requestBean, applicationFormEntity, existingFields, formEntity)) .collect(Collectors.toList()); - return applicationFormFieldEntity; } - public ApplicationFormFieldEntity createOrUpdateApplicationFormField(ApplicationFormFieldRequestBean applicationFormFieldRequestBean, ApplicationFormEntity applicationFormEntity,List applicationFormFieldEntities ,FormEntity formEntity) { + public ApplicationFormFieldEntity createOrUpdateApplicationFormField(ApplicationFormFieldRequestBean applicationFormFieldRequestBean, + ApplicationFormEntity applicationFormEntity, List applicationFormFieldEntities, FormEntity formEntity) { - ApplicationFormFieldEntity applicationFormFieldEntity=null; + ApplicationFormFieldEntity applicationFormFieldEntity = new ApplicationFormFieldEntity(); validateFileUploadDocuments(applicationFormFieldRequestBean, formEntity); + VersionActionTypeEnum actionType = VersionActionTypeEnum.INSERT; - if(applicationFormFieldEntities==null || applicationFormFieldEntities.isEmpty()){ - applicationFormFieldEntity = new ApplicationFormFieldEntity(); + ApplicationFormFieldEntity oldApplicationFormFieldData = null; + + if (applicationFormFieldEntities == null || applicationFormFieldEntities.isEmpty()) { applicationFormFieldEntity.setApplicationForm(applicationFormEntity); - }else { + } else { for (ApplicationFormFieldEntity applicationFormFieldEntity1 : applicationFormFieldEntities) { if (applicationFormFieldEntity1.getFieldId().equals(applicationFormFieldRequestBean.getFieldId())) { applicationFormFieldEntity = applicationFormFieldEntity1; - if(applicationFormEntity.getForm().getId().equals(applicationFormEntity.getApplication().getCall().getInitialForm())){ - validateRequiredFields(applicationFormEntity.getForm(),applicationFormEntity.getApplication(), applicationFormFieldRequestBean.getFieldId()); + oldApplicationFormFieldData = Utils.getClonedEntityForData(applicationFormFieldEntity); + if (applicationFormEntity.getForm().getId().equals(applicationFormEntity.getApplication().getCall().getInitialForm())) { + validateRequiredFields(applicationFormEntity.getForm(), applicationFormEntity.getApplication(), applicationFormFieldRequestBean.getFieldId()); } + actionType = VersionActionTypeEnum.UPDATE; break; } else { - applicationFormFieldEntity = new ApplicationFormFieldEntity(); applicationFormFieldEntity.setApplicationForm(applicationFormEntity); } } } Utils.setIfUpdated(applicationFormFieldEntity::getFieldId, applicationFormFieldEntity::setFieldId, applicationFormFieldRequestBean.getFieldId()); - if(applicationFormFieldRequestBean.getFieldValue() !=null ) { - applicationFormFieldEntity.setFieldValue(Utils.convertObjectToJsonString(applicationFormFieldRequestBean.getFieldValue())); - } - if(applicationFormFieldRequestBean.getFieldValue() ==null ) { + if (applicationFormFieldRequestBean.getFieldValue() != null) { + applicationFormFieldEntity.setFieldValue(Utils.convertObjectToJsonString(applicationFormFieldRequestBean.getFieldValue())); + } else { applicationFormFieldEntity.setFieldValue(null); } - return applicationFormFieldRepository.save(applicationFormFieldEntity); + + ApplicationFormFieldEntity applicationFormField = applicationFormFieldRepository.save(applicationFormFieldEntity); + + /** This code is responsible for adding a version history log for the "Create update application form" operation. **/ + loggingUtil.addVersionHistory( + VersionHistoryRequest.builder().request(request).actionType(actionType).oldData(oldApplicationFormFieldData).newData(applicationFormField).build()); + + log.info("Version history logged for action: {}, Field ID: {}", actionType, applicationFormFieldEntity.getFieldId()); + + return applicationFormField; } + private List validateFileUploadDocuments(ApplicationFormFieldRequestBean applicationFormFieldRequestBean, FormEntity formEntity) { List documentIds=null; // List contentResponseBeans=Utils.convertJsonStringToList(formEntity.getContent(),ContentResponseBean.class); @@ -497,8 +536,14 @@ public class ApplicationDao { applicationFormFieldResponseBean.setUpdatedDate(applicationFormFieldEntity.getUpdatedDate()); return applicationFormFieldResponseBean; } - public ApplicationEntity saveApplicationEntity(ApplicationEntity application){ - ApplicationEntity applicationEntity=applicationRepository.save(application); + + public ApplicationEntity saveApplicationEntity(ApplicationEntity application) { + + ApplicationEntity applicationEntity = applicationRepository.save(application); + + /** This code is responsible for adding a version history log for "Create application" operation. **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.INSERT).oldData(null).newData(applicationEntity).build()); + return applicationEntity; } @@ -654,8 +699,7 @@ public class ApplicationDao { ApplicationEntity applicationEntity = createApplicationEntity(userEntity, call, companyEntity); applicationEntity.setComments(applicationRequest.getComments()); applicationEntity = saveApplicationEntity(applicationEntity); - ApplicationResponse applicationResponse = getApplicationResponse(applicationEntity); - return applicationResponse; + return getApplicationResponse(applicationEntity); } public void checkIfApplicationExists(CallEntity call, CompanyEntity companyEntity, UserEntity userEntity){ Optional applicationEntity=applicationRepository.findByUserIdAndCompanyIdAndCallIdAndIsDeletedFalse(userEntity.getId(), companyEntity.getId(),call.getId()); @@ -665,24 +709,34 @@ public class ApplicationDao { } public ApplicationResponse updateApplicationStatus(HttpServletRequest request, Long applicationId, ApplicationStatusTypeEnum status) { + ApplicationEntity applicationEntity = validateApplication(applicationId); + + //cloned entity for old application data + ApplicationEntity oldApplicationEntity = Utils.getClonedEntityForData(applicationEntity); + UserEntity userEntity = userService.validateUser(applicationEntity.getUserId()); validator.validateUserWithCompany(request, applicationEntity.getCompany().getId()); if (ApplicationStatusTypeEnum.SUBMIT.getValue().equals(applicationEntity.getStatus())) { throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.APPLICATION_SUBMITTED_CANNOT_CHANGE)); } - if(Boolean.TRUE.equals(applicationEntity.getStatus().equals(status.getValue()))){ - throw new CustomValidationException(Status.BAD_REQUEST,Translator.toLocale(GepafinConstant.APPLICATION_ALREADY_IN_PREVIOUS_STATUS)); + if (Boolean.TRUE.equals(applicationEntity.getStatus().equals(status.getValue()))) { + throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.APPLICATION_ALREADY_IN_PREVIOUS_STATUS)); } - if (status.equals(ApplicationStatusTypeEnum.SUBMIT) && Boolean.TRUE.equals(applicationEntity.getStatus().equals(ApplicationStatusTypeEnum.READY.getValue()))) { + if (status.equals(ApplicationStatusTypeEnum.SUBMIT) && Boolean.TRUE.equals(applicationEntity.getStatus().equals(ApplicationStatusTypeEnum.READY.getValue()))) { callService.validatePublishedCall(applicationEntity.getCall().getId(), userEntity.getHub().getId()); Long protocolNumber = protocolDao.getProtocolNumber(userEntity.getHub()); - ProtocolEntity protocolEntity = protocolDao.createProtocolEntity(applicationEntity,protocolNumber, userEntity.getHub().getId()); + ProtocolEntity protocolEntity = protocolDao.createProtocolEntity(applicationEntity, protocolNumber, userEntity.getHub().getId()); applicationEntity.setProtocol(protocolEntity); applicationEntity.setStatus(ApplicationStatusTypeEnum.SUBMIT.getValue()); applicationEntity.setSubmissionDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); - applicationEntity = saveApplicationEntity(applicationEntity); + applicationEntity = applicationRepository.save(applicationEntity); + + /** This code is responsible for adding a version history log for "Update application status" operation. **/ + loggingUtil.addVersionHistory( + VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplicationEntity).newData(applicationEntity).build()); + sendMailToUserAndCompany(userEntity, applicationEntity); sendMailTodefaultSystemAndGepafin(userEntity, applicationEntity); applicationEntity.setStatus(status.getValue()); @@ -690,13 +744,16 @@ public class ApplicationDao { if (status.equals(ApplicationStatusTypeEnum.DRAFT) && Boolean.TRUE.equals(applicationEntity.getStatus().equals(ApplicationStatusTypeEnum.AWAITING.getValue()))) { applicationEntity.setStatus(status.getValue()); } - applicationEntity = saveApplicationEntity(applicationEntity); - + applicationEntity = applicationRepository.save(applicationEntity); + if (!status.equals(ApplicationStatusTypeEnum.SUBMIT)) { + /** This code is responsible for adding a version history log for "Update application status" operation. **/ + loggingUtil.addVersionHistory( + VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplicationEntity).newData(applicationEntity).build()); + } return getApplicationResponse(applicationEntity); } - public Integer calculateProgress(Long totalSteps, Long completedSteps) { if (FieldValidator.isNullOrZero(totalSteps)) { throw new CustomValidationException(Status.BAD_REQUEST,Translator.toLocale(GepafinConstant.TOTAL_STEPS_NOT_BE_ZERO)); @@ -765,7 +822,17 @@ public class ApplicationDao { if (nextApplicationFormEntity != null) { List nextApplicationFormFieldEntities = applicationFormFieldRepository.findByApplicationFormId(nextApplicationFormEntity.getId()); + + nextApplicationFormFieldEntities.forEach(applicationFormFieldEntityToDelete -> + /** This code is responsible for adding a version history log for "Deleting application form field" operation. **/ + loggingUtil.addVersionHistory( + VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.DELETE).oldData(applicationFormFieldEntityToDelete).build())); + applicationFormFieldRepository.deleteAll(nextApplicationFormFieldEntities); + + /** This code is responsible for adding a version history log for the "Deleting next application form" operation. **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.DELETE).oldData(nextApplicationFormEntity).build()); + applicationFormRepository.delete(nextApplicationFormEntity); } } @@ -853,30 +920,46 @@ public class ApplicationDao { emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(rinaldoEmail)); } - public ApplicationSignedDocumentResponse uploadSignedDocument(HttpServletRequest request, Long applicationId, - MultipartFile file) { - ApplicationEntity applicationEntity = validateApplication(applicationId); - validator.validateUserWithCompany(request, applicationEntity.getCompany().getId()); + + public ApplicationSignedDocumentResponse uploadSignedDocument(HttpServletRequest request, Long applicationId, MultipartFile file) { + + ApplicationEntity applicationEntity = validateApplication(applicationId); + //cloned entity for old data + ApplicationEntity oldApplicationData = Utils.getClonedEntityForData(applicationEntity); + + validator.validateUserWithCompany(request, applicationEntity.getCompany().getId()); validateFileTypeForCall(file, applicationEntity); - ApplicationSignedDocumentEntity applicationSignedDocument = applicationSignedDocumentRepository - .findByApplicationIdAndStatus(applicationId, ApplicationSignedDocumentStatusEnum.ACTIVE.getValue()); - if (applicationSignedDocument != null) { - throw new CustomValidationException(Status.BAD_REQUEST,Translator.toLocale(GepafinConstant.APPLICATION_ALREADY_ASSIGNED)); -// applicationSignedDocument.setStatus(ApplicationSignedDocumentStatusEnum.INACTIVE.getValue()); -// applicationSignedDocumentRepository.save(applicationSignedDocument); - } - UploadFileOnAmazonS3Response uploadFileOnAmazonS3 = uploadFileOnAmazonS3ForUserSignedDocument(file, - applicationEntity.getCall().getId(), applicationId); + ApplicationSignedDocumentEntity applicationSignedDocument = applicationSignedDocumentRepository.findByApplicationIdAndStatus(applicationId, + ApplicationSignedDocumentStatusEnum.ACTIVE.getValue()); + //cloned entity for old data + ApplicationSignedDocumentEntity oldApplicationSingedDocumentData = Utils.getClonedEntityForData(applicationSignedDocument); + + if (applicationSignedDocument != null) { + throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.APPLICATION_ALREADY_ASSIGNED)); + // applicationSignedDocument.setStatus(ApplicationSignedDocumentStatusEnum.INACTIVE.getValue()); + // applicationSignedDocumentRepository.save(applicationSignedDocument); + } + UploadFileOnAmazonS3Response uploadFileOnAmazonS3 = uploadFileOnAmazonS3ForUserSignedDocument(file, applicationEntity.getCall().getId(), applicationId); applicationSignedDocument = new ApplicationSignedDocumentEntity(); - applicationSignedDocument.setApplication(applicationEntity); - applicationSignedDocument.setFileName(uploadFileOnAmazonS3.getFileName()); - applicationSignedDocument.setFilePath(uploadFileOnAmazonS3.getFilePath()); - applicationSignedDocument.setStatus(ApplicationSignedDocumentStatusEnum.ACTIVE.getValue()); - applicationSignedDocumentRepository.save(applicationSignedDocument); + applicationSignedDocument.setApplication(applicationEntity); + applicationSignedDocument.setFileName(uploadFileOnAmazonS3.getFileName()); + applicationSignedDocument.setFilePath(uploadFileOnAmazonS3.getFilePath()); + applicationSignedDocument.setStatus(ApplicationSignedDocumentStatusEnum.ACTIVE.getValue()); + applicationSignedDocument = applicationSignedDocumentRepository.save(applicationSignedDocument); + + /** This code is responsible for adding a version history log for the "assign application document" operation. **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.INSERT).oldData(oldApplicationSingedDocumentData) + .newData(applicationSignedDocument).build()); + applicationEntity.setStatus(ApplicationStatusTypeEnum.READY.getValue()); - applicationRepository.save(applicationEntity); - return convertApplicationSignedDocumentToApplicationSignedDocumentResponse(applicationSignedDocument); - } + applicationEntity = applicationRepository.save(applicationEntity); + + /** This code is responsible for adding a version history log for the "Create Call" operation. **/ + loggingUtil.addVersionHistory( + VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplicationData).newData(applicationEntity).build()); + + return convertApplicationSignedDocumentToApplicationSignedDocumentResponse(applicationSignedDocument); + } private void validateFileTypeForCall(MultipartFile file, ApplicationEntity applicationEntity) { List validCallIds = Arrays.asList(callId.split(",")); @@ -942,39 +1025,56 @@ public class ApplicationDao { } return convertApplicationSignedDocumentToApplicationSignedDocumentResponse(applicationSignedDocument); } - - public void deleteSignedDocument(HttpServletRequest request, Long applicationId) { - ApplicationEntity applicationEntity = validateApplication(applicationId); - validator.validateUserWithCompany(request, applicationEntity.getCompany().getId()); - - ApplicationSignedDocumentEntity applicationSignedDocument = applicationSignedDocumentRepository - .findByApplicationIdAndStatus(applicationId, ApplicationSignedDocumentStatusEnum.ACTIVE.getValue()); - if(applicationSignedDocument == null) { - throw new ResourceNotFoundException(Status.NOT_FOUND, - Translator.toLocale(GepafinConstant.APPLICATION_SIGNED_DOCUMENT_NOT_FOUND)); - } - applicationSignedDocument.setStatus(ApplicationSignedDocumentStatusEnum.INACTIVE.getValue()); - applicationSignedDocumentRepository.save(applicationSignedDocument); - } + + public void deleteSignedDocument(HttpServletRequest request, Long applicationId) { + + ApplicationEntity applicationEntity = validateApplication(applicationId); + validator.validateUserWithCompany(request, applicationEntity.getCompany().getId()); + + ApplicationSignedDocumentEntity applicationSignedDocument = applicationSignedDocumentRepository.findByApplicationIdAndStatus(applicationId, + ApplicationSignedDocumentStatusEnum.ACTIVE.getValue()); + //cloned entity for old data + ApplicationSignedDocumentEntity oldApplicationSignedDocument = Utils.getClonedEntityForData(applicationSignedDocument); + if (applicationSignedDocument == null) { + throw new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.APPLICATION_SIGNED_DOCUMENT_NOT_FOUND)); + } + applicationSignedDocument.setStatus(ApplicationSignedDocumentStatusEnum.INACTIVE.getValue()); + applicationSignedDocument = applicationSignedDocumentRepository.save(applicationSignedDocument); + + /** This code is responsible for adding a version history log for the "Delete signed document" operation. **/ + loggingUtil.addVersionHistory( + VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplicationSignedDocument).newData(applicationSignedDocument) + .build()); + } public ApplicationResponse validateApplication(HttpServletRequest request, Long applicationId) { + ApplicationEntity applicationEntity = validateApplication(applicationId); - UserEntity userEntity = userService.validateUser(applicationEntity.getUserId()); + + ApplicationEntity oldApplicationEntity = Utils.getClonedEntityForData(applicationEntity); + + userService.validateUser(applicationEntity.getUserId()); validator.validateUserWithCompany(request, applicationEntity.getCompany().getId()); if (Boolean.FALSE.equals(ApplicationStatusTypeEnum.DRAFT.getValue().equals(applicationEntity.getStatus()))) { throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.APPLICATION_NOT_IN_DRAFT_STATUS)); } - List flowEdgesList = flowEdgesRepository.findByCallId(applicationEntity.getCall().getId()); - Long totalSteps=flowFormDao.calculateTotalSteps(flowEdgesList); - Integer completedSteps=flowFormDao.getCompletedSteps(applicationEntity); - if (totalSteps.intValue() != completedSteps) { - throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.APPLICATION_IS_INCOMPLETE_MSG)); - } + List flowEdgesList = flowEdgesRepository.findByCallId(applicationEntity.getCall().getId()); + Long totalSteps = flowFormDao.calculateTotalSteps(flowEdgesList); + Integer completedSteps = flowFormDao.getCompletedSteps(applicationEntity); + if (totalSteps.intValue() != completedSteps) { + throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.APPLICATION_IS_INCOMPLETE_MSG)); + } + + applicationEntity.setStatus(ApplicationStatusTypeEnum.AWAITING.getValue()); + applicationEntity = applicationRepository.save(applicationEntity); + + /** This code is responsible for adding a version history log for "Update application status or other details" operation. **/ + loggingUtil.addVersionHistory( + VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplicationEntity).newData(applicationEntity).build()); - applicationEntity.setStatus(ApplicationStatusTypeEnum.AWAITING.getValue()); - applicationEntity = saveApplicationEntity(applicationEntity); return getApplicationResponse(applicationEntity); } + public byte[] downloadApplicationDocumentsAsZip(HttpServletRequest request, Long applicationId) { ApplicationEntity applicationEntity = validateApplication(applicationId); validateAssignedUser(request, applicationId); diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java index ae19c380..7fea627a 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java @@ -163,7 +163,7 @@ public class EmailNotificationDao { EmailConfig emailConfig = retrieveEmailConfig(hubId); EmailService emailService = emailServiceFactory.getEmailService(emailConfig.getEmailServiceType()); - emailService.sendEmail(subject, body, recipientEmails, emailConfig); +// emailService.sendEmail(subject, body, recipientEmails, emailConfig); } public EmailConfig retrieveEmailConfig(Long hubId) { diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FaqDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FaqDao.java index 63ba57df..3cad69b9 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/FaqDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/FaqDao.java @@ -56,20 +56,20 @@ public class FaqDao { LoggingUtil loggingUtil; public FaqResponseBean createFaq(FaqReq faqRequest, UserEntity userEntity, Long callId, Long companyId) { + CallEntity callEntity = callService.validateCall(callId); - FaqEntity entity = createOrUpdateFaqEntity(faqRequest, callEntity, userEntity, - LookUpDataTypeEnum.FAQ); + FaqEntity entity = createOrUpdateFaqEntity(faqRequest, callEntity, userEntity, LookUpDataTypeEnum.FAQ); FaqEntity oldFaqEntity = Utils.getClonedEntityForData(entity); if (validator.checkIsBeneficiary() && companyId == null) { - throw new CustomValidationException(Status.VALIDATION_ERROR, - Translator.toLocale(GepafinConstant.COMPANY_ID_MANDATORY)); + throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.COMPANY_ID_MANDATORY)); } - if(companyId!=null) { + if (companyId != null) { companyService.validateCompany(companyId); entity.setCompanyId(companyId); } faqRepository.save(entity); - if(entity.getCompanyId()!=null) { + + if (entity.getCompanyId() != null) { /** This code is responsible for adding a version history log for the "Create FAQ" operation. **/ loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldFaqEntity).newData(entity).build()); } @@ -88,12 +88,15 @@ public class FaqDao { } public void deleteFaq(Long id) { + FaqEntity faqEntity = validateFaq(id); FaqEntity oldFaqEntity = Utils.getClonedEntityForData(faqEntity); faqEntity.setIsDeleted(Boolean.TRUE); faqRepository.save(faqEntity); + /** This code is responsible for adding a version history log for the "soft delete faq" operation **/ - loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.SOFT_DELETE).oldData(oldFaqEntity).newData(faqEntity).build()); + loggingUtil.addVersionHistory( + VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.SOFT_DELETE).oldData(oldFaqEntity).newData(faqEntity).build()); } public FaqEntity validateFaq(Long id) { @@ -107,16 +110,14 @@ public class FaqDao { .toList(); } - - public FaqEntity createOrUpdateFaqEntity(FaqReq faqReq, CallEntity callEntity, UserEntity userEntity, - LookUpDataTypeEnum type) { + public FaqEntity createOrUpdateFaqEntity(FaqReq faqReq, CallEntity callEntity, UserEntity userEntity, LookUpDataTypeEnum type) { + FaqEntity faqEntity = null; FaqEntity oldFaqEntity = null; VersionActionTypeEnum actionType = VersionActionTypeEnum.INSERT; if (isExistingFaq(faqReq)) { faqEntity = faqRepository.findByIdAndCallIdAndIsDeletedFalse(faqReq.getId(), callEntity.getId()) - .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, - Translator.toLocale(GepafinConstant.FAQ_NOT_FOUND))); + .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.FAQ_NOT_FOUND))); oldFaqEntity = Utils.getClonedEntityForData(faqEntity); actionType = VersionActionTypeEnum.UPDATE; } else { @@ -130,8 +131,7 @@ public class FaqDao { faqEntity.setIsDeleted(false); actionType = VersionActionTypeEnum.INSERT; } - if (faqReq.getResponse() != null && (faqEntity.getResponse() == null - || Boolean.FALSE.equals(faqReq.getResponse().equals(faqEntity.getResponse())))) { + if (faqReq.getResponse() != null && (faqEntity.getResponse() == null || Boolean.FALSE.equals(faqReq.getResponse().equals(faqEntity.getResponse())))) { faqEntity.setResponseDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); } setIfUpdated(faqEntity::getTitle, faqEntity::setTitle, faqReq.getTitle()); diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ProtocolDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ProtocolDao.java index 97ecde18..a7606c9a 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ProtocolDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ProtocolDao.java @@ -3,6 +3,10 @@ package net.gepafin.tendermanagement.dao; import java.time.LocalDateTime; import java.time.LocalTime; +import jakarta.servlet.http.HttpServletRequest; +import net.gepafin.tendermanagement.enums.VersionActionTypeEnum; +import net.gepafin.tendermanagement.model.request.VersionHistoryRequest; +import net.gepafin.tendermanagement.util.LoggingUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @@ -23,6 +27,11 @@ public class ProtocolDao { @Value("${default.hub.uuid}") private String defaultHubUuid; + @Autowired + private LoggingUtil loggingUtil; + + @Autowired + private HttpServletRequest request; public Long getProtocolNumber(HubEntity hubEntity) { Long maxProtocolNumber = protocolRepository.findMaxProtocolNumberAndHubId(hubEntity.getId()); @@ -43,6 +52,10 @@ public class ProtocolDao { protocolEntity.setApplicationId(applicationEntity.getId()); protocolEntity.setHubId(hubId); protocolRepository.save(protocolEntity); + + /** This code is responsible for adding a version history log for "create protocol" operation. **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.INSERT).oldData(null).newData(protocolEntity).build()); + return protocolEntity; } } diff --git a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java index 538a60a3..9fe07bc0 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java @@ -23,14 +23,27 @@ public enum UserActionContextEnum { VALIDATE_NEW_USER_WITH_SPID_TOKEN("VALIDATE_NEW_USER_WITH_SPID_TOKEN"), VALIDATE_EXISTING_USER_WITH_SPID_TOKEN("VALIDATE_EXISTING_USER_WITH_SPID_TOKEN"), GET_VALID_USER_DETAILS("GET_VALID_USER_DETAILS"), + GET_ALL_USERS_BY_ROLE("GET_ALL_USERS_BY_ROLE"), + + /** application action context **/ + GET_APPLICATION("GET_APPLICATION"), + CREATE_UPDATE_APPLICATION_FORM("CREATE_UPDATE_APPLICATION_FORM"), + CREATE_APPLICATION("CREATE_APPLICATION"), + DELETE_APPLICATION("DELETE_APPLICATION"), + GET_ALL_APPLICATION("GET_ALL_APPLICATION"), + UPDATE_APPLICATION_STATUS("UPDATE_APPLICATION_STATUS"), + VALIDATE_APPLICATION("VALIDATE_APPLICATION"), + UPLOAD_SIGNED_DOCUMENT("UPLOAD_SIGNED_DOCUMENT"), + DOWNLOAD_PDF("DOWNLOAD_PDF"), + GET_SIGNED_DOCUMENT("GET_SIGNED_DOCUMENT"), + GET_NEXT_PREVIOUS_FORM("GET_NEXT_PREVIOUS_FORM"), + DOWNLOAD_APPLICATION_DOC_ZIP("DOWNLOAD_APPLICATION_DOC_ZIP"), /** FAQ action context **/ - CREATE_FAQ("CREATE_FAQ"), GET_FAQ("GET_FAQ"), UPDATE_FAQ_DETAILS("UPDATE_FAQ_DETAILS"), - DELETE_FAQ("DELETE_FAQ") - ; + DELETE_FAQ("DELETE_FAQ"); private final String value; diff --git a/src/main/java/net/gepafin/tendermanagement/scheduler/NotificationScheduler.java b/src/main/java/net/gepafin/tendermanagement/scheduler/NotificationScheduler.java index 93d41c98..0426fc70 100644 --- a/src/main/java/net/gepafin/tendermanagement/scheduler/NotificationScheduler.java +++ b/src/main/java/net/gepafin/tendermanagement/scheduler/NotificationScheduler.java @@ -29,7 +29,7 @@ public class NotificationScheduler { @Autowired EmailNotificationDao emailNotificationDao; - @Scheduled(cron = "0 0 1 * * ?") +// @Scheduled(cron = "0 0 1 * * ?") void sendNotificationForRejectedApplicationToBeneficiary() { List applicationsList = applicationRepository.findByIsDeletedFalse(); diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationServiceImpl.java index 0fec17a7..87cea90b 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationServiceImpl.java @@ -76,12 +76,12 @@ public class ApplicationServiceImpl implements ApplicationService { validator.validateUserWithCompany(request, applicationEntity.getCompany().getId()); return flowFormDao.getNextOrPreviousForm(applicationEntity, formId, action); } - + @Override @Transactional(rollbackFor = Exception.class) public ApplicationResponse updateApplicationStatus(HttpServletRequest request, Long applicationId, ApplicationStatusTypeEnum status) { - return applicationDao.updateApplicationStatus(request, applicationId, status); - + + return applicationDao.updateApplicationStatus(request, applicationId, status); } @Override diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationApiController.java index 958d8096..3223dda7 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationApiController.java @@ -3,10 +3,13 @@ package net.gepafin.tendermanagement.web.rest.api.impl; import jakarta.servlet.http.HttpServletRequest; 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.ApplicationRequest; import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; import net.gepafin.tendermanagement.enums.FormActionEnum; import net.gepafin.tendermanagement.model.request.ApplicationRequestBean; +import net.gepafin.tendermanagement.model.request.UserActionRequest; import net.gepafin.tendermanagement.model.response.ApplicationGetResponseBean; import net.gepafin.tendermanagement.model.response.ApplicationResponse; import net.gepafin.tendermanagement.model.response.ApplicationResponseBean; @@ -15,6 +18,7 @@ import net.gepafin.tendermanagement.model.response.NextOrPreviousFormResponse; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.service.ApplicationService; import net.gepafin.tendermanagement.service.PdfService; +import net.gepafin.tendermanagement.util.LoggingUtil; import net.gepafin.tendermanagement.web.rest.api.ApplicationApi; import net.gepafin.tendermanagement.web.rest.api.errors.Status; import org.slf4j.LoggerFactory; @@ -43,9 +47,19 @@ public class ApplicationApiController implements ApplicationApi { @Autowired private PdfService pdfService; + @Autowired + private LoggingUtil loggingUtil; + @Override - public ResponseEntity> createApplication(HttpServletRequest request, ApplicationRequestBean applicationRequestBean, Long applicationId, Long formId) { + public ResponseEntity> createApplication(HttpServletRequest request, ApplicationRequestBean applicationRequestBean, Long applicationId, + Long formId) { + + /** This code is responsible for creating user action logs for the "Create or update application form" operation. **/ + loggingUtil.logUserAction( + UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.UPDATE).actionContext(UserActionContextEnum.CREATE_UPDATE_APPLICATION_FORM).build()); + ApplicationResponseBean applicationResponseBean = applicationService.createApplication(request, applicationRequestBean, applicationId, formId); + return ResponseEntity.status(HttpStatus.CREATED) .body(new Response<>(applicationResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.APPLICATION_CREATED_SUCCESS_MSG))); } @@ -54,38 +68,63 @@ public class ApplicationApiController implements ApplicationApi { public ResponseEntity> getApplicationByFormId(HttpServletRequest request , Long applicationId, Long formId) { log.info("Get Application by ID - Application ID: {}", applicationId); + + /** This code is responsible for creating user action logs for the "Get Application" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_APPLICATION).build()); + ApplicationGetResponseBean application = applicationService.getApplicationByFormId(request, applicationId, formId); return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(application, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_APPLICATION_SUCCESS_MSG))); } @Override - public ResponseEntity> deleteApplication(HttpServletRequest request, - Long applicationId) { + public ResponseEntity> deleteApplication(HttpServletRequest request, Long applicationId) { + log.info("Delete Application - Application ID: {}", applicationId); + + /** This code is responsible for creating user action logs for the "Delete Application" operation. **/ + loggingUtil.logUserAction( + UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.DELETE).actionContext(UserActionContextEnum.DELETE_APPLICATION).build()); + applicationService.deleteApplication(request, applicationId); - return ResponseEntity.status(HttpStatus.OK) - .body(new Response<>(null, Status.SUCCESS, Translator.toLocale(GepafinConstant.DELETE_APPLICATION_SUCCESS_MSG))); + + return ResponseEntity.status(HttpStatus.OK).body(new Response<>(null, Status.SUCCESS, Translator.toLocale(GepafinConstant.DELETE_APPLICATION_SUCCESS_MSG))); } @Override public ResponseEntity> createApplicationByCallId(HttpServletRequest request, Long companyId, ApplicationRequest applicationRequest, Long callId) { + + /** This code is responsible for creating user action logs for the "Create application" operation. **/ + loggingUtil.logUserAction( + UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.INSERT).actionContext(UserActionContextEnum.CREATE_APPLICATION).build()); + ApplicationResponse applicationResponseBean = applicationService.createApplication(request, companyId, applicationRequest, callId); + return ResponseEntity.status(HttpStatus.CREATED) .body(new Response<>(applicationResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.APPLICATION_CREATED_SUCCESS_MSG))); } @Override - public ResponseEntity>> getAllApplications(HttpServletRequest request, Long callId, Long companyId, List statusList) { - List applications = applicationService.getAllApplications(request, callId, companyId,statusList); + public ResponseEntity>> getAllApplications(HttpServletRequest request, Long callId, Long companyId, + List statusList) { + + /** This code is responsible for creating user action logs for the "Get application" operation. **/ + loggingUtil.logUserAction( + UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_ALL_APPLICATION).build()); + + List applications = applicationService.getAllApplications(request, callId, companyId, statusList); log.info("Get All Applications"); - return ResponseEntity.status(HttpStatus.OK) - .body(new Response<>(applications, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_APPLICATION_SUCCESS_MSG))); + + return ResponseEntity.status(HttpStatus.OK).body(new Response<>(applications, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_APPLICATION_SUCCESS_MSG))); } @Override public ResponseEntity> getNextOrPreviousForm(HttpServletRequest request, Long applicationId, Long formId, FormActionEnum action) { + + /** This code is responsible for creating user action logs for the "get next or previous form" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_NEXT_PREVIOUS_FORM).build()); + NextOrPreviousFormResponse data = applicationService.getNextOrPreviousForm(request, applicationId, formId, action); log.info("Get Next Or Previous Form "); return ResponseEntity.status(HttpStatus.OK) @@ -93,15 +132,24 @@ public class ApplicationApiController implements ApplicationApi { } @Override - public ResponseEntity> updateApplicationStatus(HttpServletRequest request, Long applicationId, - ApplicationStatusTypeEnum status) { + public ResponseEntity> updateApplicationStatus(HttpServletRequest request, Long applicationId, ApplicationStatusTypeEnum status) { + + /** This code is responsible for creating user action logs for the "update application status" operation. **/ + loggingUtil.logUserAction( + UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.UPDATE).actionContext(UserActionContextEnum.UPDATE_APPLICATION_STATUS).build()); + ApplicationResponse applicationResponse = applicationService.updateApplicationStatus(request, applicationId, status); + return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(applicationResponse, Status.SUCCESS, Translator.toLocale(GepafinConstant.APPLICATION_STATUS_UPDATED_SUCCESSFULLY))); } @Override public ResponseEntity generateApplicationPdf(HttpServletRequest request, Long applicationId) { + + /** This code is responsible for creating user action logs for the "Generate pdf for application" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.DOWNLOAD).actionContext(UserActionContextEnum.DOWNLOAD_PDF).build()); + byte[] pdfBytes = pdfService.generatePdf(request, applicationId); // Prepare headers for downloading the PDF @@ -114,23 +162,31 @@ public class ApplicationApiController implements ApplicationApi { .contentType(MediaType.APPLICATION_PDF) .body(pdfBytes); } - + @Override - public ResponseEntity> uploadSignedDocument(HttpServletRequest request, - Long applicationId, MultipartFile file) { - log.info("upload signed document applicationId: {}", applicationId); - ApplicationSignedDocumentResponse response = applicationService.uploadSignedDocument(request, applicationId, file); - return ResponseEntity.status(HttpStatus.OK) - .body(new Response<>(response, Status.SUCCESS, Translator.toLocale(GepafinConstant.SIGNED_DOCUMENT_FILE_UPLOAD_SUCCESS))); - } - + public ResponseEntity> uploadSignedDocument(HttpServletRequest request, Long applicationId, MultipartFile file) { + + log.info("upload signed document applicationId: {}", applicationId); + + /** This code is responsible for creating user action logs for the "Upload signed document" operation. **/ + loggingUtil.logUserAction( + UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.INSERT).actionContext(UserActionContextEnum.UPLOAD_SIGNED_DOCUMENT).build()); + + ApplicationSignedDocumentResponse response = applicationService.uploadSignedDocument(request, applicationId, file); + return ResponseEntity.status(HttpStatus.OK).body(new Response<>(response, Status.SUCCESS, Translator.toLocale(GepafinConstant.SIGNED_DOCUMENT_FILE_UPLOAD_SUCCESS))); + } + @Override - public ResponseEntity> getSignedDocument(HttpServletRequest request, - Long applicationId) { - ApplicationSignedDocumentResponse response = applicationService.getSignedDocument(request, applicationId); - log.info("get signed document applicationId: {}", applicationId); - return ResponseEntity.status(HttpStatus.OK) - .body(new Response<>(response, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_SIGNED_DOCUMENT_FILE_SUCCESS))); + public ResponseEntity> getSignedDocument(HttpServletRequest request, Long applicationId) { + + /** This code is responsible for creating user action logs for the "Get signed document" operation. **/ + loggingUtil.logUserAction( + UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_SIGNED_DOCUMENT).build()); + + ApplicationSignedDocumentResponse response = applicationService.getSignedDocument(request, applicationId); + + log.info("get signed document applicationId: {}", applicationId); + return ResponseEntity.status(HttpStatus.OK).body(new Response<>(response, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_SIGNED_DOCUMENT_FILE_SUCCESS))); } // @Override @@ -144,12 +200,20 @@ public class ApplicationApiController implements ApplicationApi { @Override public ResponseEntity> validateApplication(HttpServletRequest request, Long applicationId) { + + /** This code is responsible for creating user action logs for the "validate application" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.UPDATE).actionContext(UserActionContextEnum.VALIDATE_APPLICATION).build()); + ApplicationResponse applicationResponse = applicationService.validateApplication(request, applicationId); return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(applicationResponse, Status.SUCCESS, Translator.toLocale(GepafinConstant.APPLICATION_STATUS_UPDATED_SUCCESSFULLY))); } @Override public ResponseEntity downloadApplicationDocumentsAsZip(HttpServletRequest request, Long applicationId) { + + /** This code is responsible for creating user action logs for the "download application document as zip" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.DOWNLOAD).actionContext(UserActionContextEnum.DOWNLOAD_APPLICATION_DOC_ZIP).build()); + byte[] zipFile = applicationService.downloadApplicationDocumentsAsZip(request, applicationId); HttpHeaders headers = new HttpHeaders(); diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/FaqApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/FaqApiController.java index bf6ad305..869d3c68 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/FaqApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/FaqApiController.java @@ -29,28 +29,25 @@ public class FaqApiController implements FaqApi { @Override public ResponseEntity> createFaq(HttpServletRequest request, Long callId, Long companyId, FaqReq faqRequest) { + /** This code is responsible for creating user action logs for the "Create FAQ" operation. **/ - loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.INSERT) - .actionContext(UserActionContextEnum.CREATE_FAQ).build()); - FaqResponseBean response = faqService.createFaq(request,callId, companyId, faqRequest); - return ResponseEntity.status(HttpStatus.CREATED) - .body(new Response<>(response, Status.SUCCESS, Translator.toLocale(GepafinConstant.FAQ_CREATED_SUCCESSFULLY))); + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.INSERT).actionContext(UserActionContextEnum.CREATE_FAQ).build()); + + FaqResponseBean response = faqService.createFaq(request, callId, companyId, faqRequest); + return ResponseEntity.status(HttpStatus.CREATED).body(new Response<>(response, Status.SUCCESS, Translator.toLocale(GepafinConstant.FAQ_CREATED_SUCCESSFULLY))); } @Override public ResponseEntity> getFaqById(HttpServletRequest request, Long id) { /** This code is responsible for creating user action logs for the "get FAQ by id" operation. **/ - loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW) - .actionContext(UserActionContextEnum.GET_FAQ).build()); + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_FAQ).build()); FaqResponseBean response = faqService.getFaqById(request, id); if (response != null) { - return ResponseEntity.status(HttpStatus.OK) - .body(new Response<>(response, Status.SUCCESS, Translator.toLocale(GepafinConstant.FAQ_FETCHED_SUCCESSFULLY))); + return ResponseEntity.status(HttpStatus.OK).body(new Response<>(response, Status.SUCCESS, Translator.toLocale(GepafinConstant.FAQ_FETCHED_SUCCESSFULLY))); } else { - return ResponseEntity.status(HttpStatus.NOT_FOUND) - .body(new Response<>(null, Status.NOT_FOUND, Translator.toLocale(GepafinConstant.FAQ_NOT_FOUND))); + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new Response<>(null, Status.NOT_FOUND, Translator.toLocale(GepafinConstant.FAQ_NOT_FOUND))); } } @@ -58,25 +55,23 @@ public class FaqApiController implements FaqApi { public ResponseEntity> updateFaq(HttpServletRequest request, Long id, FaqReq faqRequest) { /** This code is responsible for "Updating FAQ details" operation. **/ - loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.UPDATE) - .actionContext(UserActionContextEnum.UPDATE_FAQ_DETAILS).build()); + loggingUtil.logUserAction( + UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.UPDATE).actionContext(UserActionContextEnum.UPDATE_FAQ_DETAILS).build()); FaqResponseBean response = faqService.updateFaq(request, id, faqRequest); if (response != null) { - return ResponseEntity.status(HttpStatus.OK) - .body(new Response<>(response, Status.SUCCESS, Translator.toLocale(GepafinConstant.FAQ_UPDATED_SUCCESSFULLY))); + return ResponseEntity.status(HttpStatus.OK).body(new Response<>(response, Status.SUCCESS, Translator.toLocale(GepafinConstant.FAQ_UPDATED_SUCCESSFULLY))); } else { - return ResponseEntity.status(HttpStatus.NOT_FOUND) - .body(new Response<>(null, Status.NOT_FOUND, Translator.toLocale(GepafinConstant.FAQ_NOT_FOUND))); + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new Response<>(null, Status.NOT_FOUND, Translator.toLocale(GepafinConstant.FAQ_NOT_FOUND))); } } @Override public ResponseEntity> deleteFaq(HttpServletRequest request, Long id) { + /** This code is responsible for creating user action logs for the "Delete FAQ" operation. **/ loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.DELETE).actionContext(UserActionContextEnum.DELETE_FAQ).build()); faqService.deleteFaq(request, id); - return ResponseEntity.status(HttpStatus.OK) - .body(new Response<>(null, Status.SUCCESS, Translator.toLocale(GepafinConstant.FAQ_DELETED_SUCCESSFULLY))); + return ResponseEntity.status(HttpStatus.OK).body(new Response<>(null, Status.SUCCESS, Translator.toLocale(GepafinConstant.FAQ_DELETED_SUCCESSFULLY))); } } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/UserApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/UserApiController.java index 0b170375..7ff12c2a 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/UserApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/UserApiController.java @@ -216,14 +216,18 @@ public class UserApiController implements UserApi { } @Override - public ResponseEntity>> getAllUsers(HttpServletRequest request, - Long roleId) { + public ResponseEntity>> getAllUsers(HttpServletRequest request, Long roleId) { + log.info("Get all Users by Role ID - Role ID: {}", roleId); + + /** This code is responsible for creating user action logs for the "Get all users by role" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_ALL_USERS_BY_ROLE).build()); + List users = userService.getAllUsers(request, roleId); - return ResponseEntity.status(HttpStatus.OK) - .body(new Response<>(users, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_USERS_SUCCESS_MSG))); + + return ResponseEntity.status(HttpStatus.OK).body(new Response<>(users, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_USERS_SUCCESS_MSG))); } - + @Override public void returnNoFavicon() { // Do nothing diff --git a/src/main/resources/db/changelog/db.changelog-1.0.0.xml b/src/main/resources/db/changelog/db.changelog-1.0.0.xml index 8c3c0413..92fa7bec 100644 --- a/src/main/resources/db/changelog/db.changelog-1.0.0.xml +++ b/src/main/resources/db/changelog/db.changelog-1.0.0.xml @@ -1788,13 +1788,17 @@ - + + + - + + +