From 0b9eebb9e9ca137956573f7c532ce49389cb853c Mon Sep 17 00:00:00 2001 From: piyushkag Date: Sun, 24 Nov 2024 18:34:34 +0530 Subject: [PATCH 1/6] Added user action and versioning for company. --- .../tendermanagement/dao/CompanyDao.java | 119 +++++++++++++----- .../tendermanagement/dao/DelegationDao.java | 46 +++++-- .../tendermanagement/dao/VatCheckDao.java | 19 ++- .../enums/UserActionContextEnum.java | 18 ++- .../service/impl/CompanyServiceImpl.java | 5 +- .../rest/api/impl/CompanyApiController.java | 92 ++++++++++---- 6 files changed, 232 insertions(+), 67 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/CompanyDao.java b/src/main/java/net/gepafin/tendermanagement/dao/CompanyDao.java index 84b01021..38e856c0 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/CompanyDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/CompanyDao.java @@ -2,10 +2,14 @@ package net.gepafin.tendermanagement.dao; import java.util.List; +import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.entities.*; import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; +import net.gepafin.tendermanagement.enums.VersionActionTypeEnum; +import net.gepafin.tendermanagement.model.request.VersionHistoryRequest; import net.gepafin.tendermanagement.repositories.ApplicationRepository; import net.gepafin.tendermanagement.repositories.FaqRepository; +import net.gepafin.tendermanagement.util.LoggingUtil; import net.gepafin.tendermanagement.web.rest.api.errors.*; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -38,25 +42,38 @@ public class CompanyDao { @Autowired private FaqRepository faqRepository; + @Autowired + private LoggingUtil loggingUtil; + + @Autowired + private HttpServletRequest request; public CompanyResponse createCompany(UserEntity userEntity, CompanyRequest companyRequest) { + CompanyEntity existingCompany = companyRepository.findByVatNumberAndHubId(companyRequest.getVatNumber(), userEntity.getHub().getId()); UserWithCompanyEntity userWithCompanyEntity = null; if (existingCompany != null) { - UserWithCompanyEntity existingRelation = userWithCompanyRepository.findByUserIdAndCompanyIdAndIsDeletedFalse(userEntity.getId(), existingCompany.getId()) - .orElse(null); + UserWithCompanyEntity existingRelation = userWithCompanyRepository.findByUserIdAndCompanyIdAndIsDeletedFalse(userEntity.getId(), existingCompany.getId()).orElse(null); if (existingRelation == null) { userWithCompanyEntity = createUserWithCompanyRelation(userEntity, existingCompany, companyRequest.getIsLegalRepresentant()); + + /** This code is responsible for adding a version history log for "adding user with company" operation. **/ + loggingUtil.addVersionHistory( + VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.INSERT).oldData(null).newData(userWithCompanyEntity).build()); } else { - throw new CustomValidationException(Status.VALIDATION_ERROR, - Translator.toLocale(GepafinConstant.USER_ALREADY_CONNECTED_TO_COMPANY)); + throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.USER_ALREADY_CONNECTED_TO_COMPANY)); } return convertCompanyEntityToCompanyResponse(existingCompany, userWithCompanyEntity); } else { validateCompany(userEntity, companyRequest); CompanyEntity companyEntity = convertCompanyRequestToCompanyEntity(userEntity, companyRequest); - companyRepository.save(companyEntity); + CompanyEntity companyData = companyRepository.save(companyEntity); + + /** This code is responsible for adding a version history log for "creating company" operation. **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.INSERT).oldData(null).newData(companyData).build()); + userWithCompanyEntity = createUserWithCompanyRelation(userEntity, companyEntity, companyRequest.getIsLegalRepresentant()); + return convertCompanyEntityToCompanyResponse(companyEntity, userWithCompanyEntity); } } @@ -80,6 +97,7 @@ public class CompanyDao { } private UserWithCompanyEntity createUserWithCompanyRelation(UserEntity userEntity, CompanyEntity companyEntity, Boolean isLegalRepresentant) { + UserWithCompanyEntity userWithCompanyEntity = new UserWithCompanyEntity(); if (userEntity.getBeneficiary() != null) { userWithCompanyEntity.setBeneficiaryId(userEntity.getBeneficiary().getId()); @@ -88,7 +106,11 @@ public class CompanyDao { userWithCompanyEntity.setCompanyId(companyEntity.getId()); userWithCompanyEntity.setUserId(userEntity.getId()); userWithCompanyEntity.setIsLegalRepresentant(isLegalRepresentant); - return userWithCompanyRepository.save(userWithCompanyEntity); + UserWithCompanyEntity userWithCompany = userWithCompanyRepository.save(userWithCompanyEntity); + + /** This code is responsible for adding a version history log for the "adding user with company" operation. **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.INSERT).oldData(null).newData(userWithCompany).build()); + return userWithCompany; } private CompanyEntity convertCompanyRequestToCompanyEntity(UserEntity userEntity, CompanyRequest request) { @@ -139,32 +161,43 @@ public class CompanyDao { } public CompanyResponse updateCompany(UserEntity userEntity, Long companyId, CompanyRequest companyRequest) { + CompanyEntity companyEntity = validateCompany(companyId); - setIfUpdated(companyEntity::getCompanyName, companyEntity::setCompanyName, - companyRequest.getCompanyName()); + //cloned entity for old data + CompanyEntity oldCompanyData = Utils.getClonedEntityForData(companyEntity); + + setIfUpdated(companyEntity::getCompanyName, companyEntity::setCompanyName, companyRequest.getCompanyName()); setIfUpdated(companyEntity::getVatNumber, companyEntity::setVatNumber, companyRequest.getVatNumber()); - setIfUpdated(companyEntity::getCodiceFiscale, companyEntity::setCodiceFiscale, - companyRequest.getCodiceFiscale()); + setIfUpdated(companyEntity::getCodiceFiscale, companyEntity::setCodiceFiscale, companyRequest.getCodiceFiscale()); setIfUpdated(companyEntity::getAddress, companyEntity::setAddress, companyRequest.getAddress()); - setIfUpdated(companyEntity::getPhoneNumber, companyEntity::setPhoneNumber, - companyRequest.getPhoneNumber()); + setIfUpdated(companyEntity::getPhoneNumber, companyEntity::setPhoneNumber, companyRequest.getPhoneNumber()); setIfUpdated(companyEntity::getCity, companyEntity::setCity, companyRequest.getCity()); setIfUpdated(companyEntity::getProvince, companyEntity::setProvince, companyRequest.getProvince()); setIfUpdated(companyEntity::getCap, companyEntity::setCap, companyRequest.getCap()); setIfUpdated(companyEntity::getCountry, companyEntity::setCountry, companyRequest.getCountry()); setIfUpdated(companyEntity::getPec, companyEntity::setPec, companyRequest.getPec()); setIfUpdated(companyEntity::getEmail, companyEntity::setEmail, companyRequest.getEmail()); - setIfUpdated(companyEntity::getNumberOfEmployees, companyEntity::setNumberOfEmployees, - companyRequest.getNumberOfEmployees()); - setIfUpdated(companyEntity::getAnnualRevenue, companyEntity::setAnnualRevenue, - companyRequest.getAnnualRevenue()); - setIfUpdated(companyEntity::getContactName,companyEntity::setContactName,companyRequest.getContactName()); - setIfUpdated(companyEntity::getContactEmail,companyEntity::setContactEmail,companyRequest.getContactEmail()); + setIfUpdated(companyEntity::getNumberOfEmployees, companyEntity::setNumberOfEmployees, companyRequest.getNumberOfEmployees()); + setIfUpdated(companyEntity::getAnnualRevenue, companyEntity::setAnnualRevenue, companyRequest.getAnnualRevenue()); + setIfUpdated(companyEntity::getContactName, companyEntity::setContactName, companyRequest.getContactName()); + setIfUpdated(companyEntity::getContactEmail, companyEntity::setContactEmail, companyRequest.getContactEmail()); companyRepository.save(companyEntity); + + /** This code is responsible for adding a version history log for the "Update company" operation. **/ + loggingUtil.addVersionHistory( + VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldCompanyData).newData(companyEntity).build()); + UserWithCompanyEntity userWithCompanyEntity = getUserWithCompany(userEntity.getId(), companyId); - Utils.setIfUpdated(userWithCompanyEntity::getIsLegalRepresentant, userWithCompanyEntity::setIsLegalRepresentant, - companyRequest.getIsLegalRepresentant()); - userWithCompanyRepository.save(userWithCompanyEntity); + //cloned entity for old data + UserWithCompanyEntity oldUserWithCompanyData = Utils.getClonedEntityForData(userWithCompanyEntity); + + Utils.setIfUpdated(userWithCompanyEntity::getIsLegalRepresentant, userWithCompanyEntity::setIsLegalRepresentant, companyRequest.getIsLegalRepresentant()); + userWithCompanyEntity = userWithCompanyRepository.save(userWithCompanyEntity); + + /** This code is responsible for adding a version history log for the "Update company" operation. **/ + loggingUtil.addVersionHistory( + VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldUserWithCompanyData).newData(userWithCompanyEntity).build()); + return convertCompanyEntityToCompanyResponse(companyEntity, userWithCompanyEntity); } @@ -179,8 +212,20 @@ public class CompanyDao { } public void deleteCompany(UserEntity userEntity, Long companyId) { + CompanyEntity companyEntity = validateCompany(companyId); + + /** This code is responsible for adding a version history log for the "delete company" operation. **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.DELETE).oldData(companyEntity).newData(null).build()); + companyRepository.delete(companyEntity); + + UserWithCompanyEntity userWithCompanyEntity = getUserWithCompany(userEntity.getId(), companyId); + + /** This code is responsible for adding a version history log for the "delete user with company" operation. **/ + loggingUtil.addVersionHistory( + VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.DELETE).oldData(userWithCompanyEntity).newData(null).build()); + userWithCompanyRepository.deleteByCompanyIdAndIsDeletedFalse(companyId); } @@ -204,26 +249,44 @@ public class CompanyDao { () -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.USER_COMPANY_RELATION_NOT_FOUND))); } public void removeCompanyFromList(UserEntity userEntity, Long companyId) { + CompanyEntity companyEntity = validateCompany(companyId); UserWithCompanyEntity existingRelation = userWithCompanyRepository.findByUserIdAndCompanyIdAndIsDeletedFalse(userEntity.getId(), companyEntity.getId()) - .orElseThrow(() -> new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.USER_ALREADY_CONNECTED_TO_COMPANY))); + .orElseThrow(() -> new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.USER_ALREADY_CONNECTED_TO_COMPANY))); List userApplications = applicationRepository.findByCompanyIdAndUserIdAndIsDeletedFalse(companyEntity.getId(), userEntity.getId()); List faqs = faqRepository.findByCompanyIdAndUserIdAndIsDeletedFalse(companyEntity.getId(), userEntity.getId()); for (ApplicationEntity application : userApplications) { - if(Boolean.TRUE.equals(application.getStatus().equals(ApplicationStatusTypeEnum.SUBMIT.getValue()))) { - throw new CustomValidationException(Status.BAD_REQUEST,Translator.toLocale(GepafinConstant.CANNOT_DELETE_COMPANY_WITH_APPLICATION_SUBMITT)); + if (Boolean.TRUE.equals(application.getStatus().equals(ApplicationStatusTypeEnum.SUBMIT.getValue()))) { + throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.CANNOT_DELETE_COMPANY_WITH_APPLICATION_SUBMITT)); } - if(Boolean.TRUE.equals(application.getStatus().equals(ApplicationStatusTypeEnum.DRAFT.getValue()))) { + if (Boolean.TRUE.equals(application.getStatus().equals(ApplicationStatusTypeEnum.DRAFT.getValue()))) { + + //cloned entity for old data + ApplicationEntity oldApplicationData = Utils.getClonedEntityForData(application); application.setIsDeleted(Boolean.TRUE); applicationRepository.save(application); + + /** This code is responsible for adding a version history log for the "" operation. **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.SOFT_DELETE).oldData(oldApplicationData).newData(application).build()); } } - for(FaqEntity faq:faqs) { - faq.setIsDeleted(Boolean.TRUE); - faqRepository.save(faq); + for (FaqEntity faq : faqs) { + //cloned for old data + FaqEntity oldFaqEntityData = Utils.getClonedEntityForData(faq); + faq.setIsDeleted(Boolean.TRUE); + faqRepository.save(faq); + + /** This code is responsible for adding a version history log for the "soft deleting faq" operation. **/ + loggingUtil.addVersionHistory( + VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.SOFT_DELETE).oldData(oldFaqEntityData).newData(faq).build()); } + UserWithCompanyEntity oldUserWithCompanyData = Utils.getClonedEntityForData(existingRelation); existingRelation.setIsDeleted(Boolean.TRUE); userWithCompanyRepository.save(existingRelation); + + /** This code is responsible for adding a version history log for the "soft deleting existing user relation" operation. **/ + loggingUtil.addVersionHistory( + VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.SOFT_DELETE).oldData(oldUserWithCompanyData).newData(existingRelation).build()); } } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/DelegationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/DelegationDao.java index dfc65ec7..5c2c7e70 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/DelegationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/DelegationDao.java @@ -9,6 +9,9 @@ import java.util.function.Function; import net.gepafin.tendermanagement.enums.DocOtherSourceTypeEnum; +import net.gepafin.tendermanagement.enums.VersionActionTypeEnum; +import net.gepafin.tendermanagement.model.request.VersionHistoryRequest; +import net.gepafin.tendermanagement.util.LoggingUtil; import org.apache.commons.lang3.StringUtils; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.springframework.beans.factory.annotation.Autowired; @@ -67,6 +70,12 @@ public class DelegationDao { @Autowired private Validator validator; + @Autowired + private LoggingUtil loggingUtil; + + @Autowired + private HttpServletRequest request; + public ByteArrayOutputStream generateDocument(Map placeholders, String templateName) { try { String s3Folder = s3ConfigBean.generateDocumentPathForOther(DocOtherSourceTypeEnum.TEMPLATE, 0L, 0L); @@ -176,18 +185,22 @@ public class DelegationDao { placeholders.put(key, formatter.apply(value)); } } - public CompanyDelegationResponse uploadCompanyDelegation(UserEntity userEntity, Long companyId, MultipartFile file) { + companyDao.validateCompany(companyId); companyDao.getUserWithCompany(userEntity.getId(), companyId); validateFileType(file); - UserCompanyDelegationEntity userCompanyDelegationEntity = userCompanyDelegationRepository - .findByUserIdAndCompanyIdAndStatus(userEntity.getId(), companyId, - UserCompanyDelegationStatusEnum.ACTIVE.getValue()); + UserCompanyDelegationEntity userCompanyDelegationEntity = userCompanyDelegationRepository.findByUserIdAndCompanyIdAndStatus(userEntity.getId(), companyId, + UserCompanyDelegationStatusEnum.ACTIVE.getValue()); + UserCompanyDelegationEntity oldUserCompanyDelegationEntity = Utils.getClonedEntityForData(userCompanyDelegationEntity); if (userCompanyDelegationEntity != null) { userCompanyDelegationEntity.setStatus(UserCompanyDelegationStatusEnum.INACTIVE.getValue()); userCompanyDelegationRepository.save(userCompanyDelegationEntity); + + /** This code is responsible for adding a version history log for the "update user company delegation status" operation. **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldUserCompanyDelegationEntity) + .newData(userCompanyDelegationEntity).build()); } UploadFileOnAmazonS3Response uploadFileOnAmazonS3Response = uploadFileOnAmazonS3ForCompanyDelegation(file); userCompanyDelegationEntity = new UserCompanyDelegationEntity(); @@ -200,8 +213,14 @@ public class DelegationDao { userCompanyDelegationEntity.setFileName(uploadFileOnAmazonS3Response.getFileName()); userCompanyDelegationEntity.setFilePath(uploadFileOnAmazonS3Response.getFilePath()); userCompanyDelegationRepository.save(userCompanyDelegationEntity); + + /** This code is responsible for adding a version history log for the "Insert or upload user company delegation" operation. **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.INSERT).oldData(null) + .newData(userCompanyDelegationEntity).build()); + return convertUserCompanyDelegationToCompanyDelegationResponse(userCompanyDelegationEntity); } + private UploadFileOnAmazonS3Response uploadFileOnAmazonS3ForCompanyDelegation(MultipartFile file) { try { String s3Path = generateS3PathForDelegation(); @@ -247,15 +266,22 @@ public class DelegationDao { } public void deleteCompanyDelegation(UserEntity userEntity, Long companyId) { - UserCompanyDelegationEntity userCompanyDelegationEntity = userCompanyDelegationRepository - .findByUserIdAndCompanyIdAndStatus(userEntity.getId(), companyId, - UserCompanyDelegationStatusEnum.ACTIVE.getValue()); + + UserCompanyDelegationEntity userCompanyDelegationEntity = userCompanyDelegationRepository.findByUserIdAndCompanyIdAndStatus(userEntity.getId(), companyId, + UserCompanyDelegationStatusEnum.ACTIVE.getValue()); companyDao.getUserWithCompany(userEntity.getId(), companyId); - if(userCompanyDelegationEntity == null) { - throw new ResourceNotFoundException(Status.NOT_FOUND, - Translator.toLocale(GepafinConstant.DELEGATION_NOT_FOUND)); + //cloned entity for old data + UserCompanyDelegationEntity oldUserCompanyDelegation = Utils.getClonedEntityForData(userCompanyDelegationEntity); + + if (userCompanyDelegationEntity == null) { + throw new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.DELEGATION_NOT_FOUND)); } userCompanyDelegationEntity.setStatus(UserCompanyDelegationStatusEnum.INACTIVE.getValue()); userCompanyDelegationRepository.save(userCompanyDelegationEntity); + + /** This code is responsible for adding a version history log for the "Soft Deleting company delegation " operation. **/ + loggingUtil.addVersionHistory( + VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.SOFT_DELETE).oldData(oldUserCompanyDelegation).newData(userCompanyDelegationEntity) + .build()); } } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/VatCheckDao.java b/src/main/java/net/gepafin/tendermanagement/dao/VatCheckDao.java index f4a07849..1a4c110d 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/VatCheckDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/VatCheckDao.java @@ -1,9 +1,14 @@ package net.gepafin.tendermanagement.dao; import feign.FeignException; +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.UserActionRequest; import net.gepafin.tendermanagement.service.feignClient.VatCheckService; +import net.gepafin.tendermanagement.util.LoggingUtil; import net.gepafin.tendermanagement.util.Utils; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.Status; @@ -38,9 +43,14 @@ public class VatCheckDao { public final Logger log = LoggerFactory.getLogger(VatCheckDao.class); + @Autowired + private LoggingUtil loggingUtil; + @Autowired + private HttpServletRequest request; public Map checkVatNumberApi(String vatNumber) { + if (Boolean.TRUE.equals(Boolean.parseBoolean(isVatCheckGloballyDisabled))) { return new HashMap<>(); } @@ -50,11 +60,14 @@ public class VatCheckDao { headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); headers.setContentType(MediaType.APPLICATION_JSON); headers.set(GepafinConstant.AUTHORIZATION, "Bearer " + vatCheckNewToken); - headers.add(org.apache.http.HttpHeaders.USER_AGENT, - "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0"); + headers.add(org.apache.http.HttpHeaders.USER_AGENT, "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0"); URI baseUrl = URI.create(GepafinConstant.CHECK_VATNUMBER_V2_NEW_URL); - ResponseEntity> response = vatCheckService.checkVatNumber(baseUrl,vatNumber, headers); + ResponseEntity> response = vatCheckService.checkVatNumber(baseUrl, vatNumber, headers); + + /** This code is responsible for creating user action logs for the "Download company delegation" operation. **/ + loggingUtil.logUserAction( + UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.CHECK_COMPANY_VAT_NUMBER).build()); if (response.getStatusCode() == HttpStatus.OK && response.hasBody()) { log.info("Successfully checked vat number"); diff --git a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java index c269e62f..7a694931 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java @@ -45,6 +45,19 @@ public enum UserActionContextEnum { UPDATE_FAQ_DETAILS("UPDATE_FAQ_DETAILS"), DELETE_FAQ("DELETE_FAQ"), + /** company action context **/ + CREATE_COMPANY("CREATE_COMPANY"), + GET_COMPANY("GET_COMPANY"), + UPDATE_COMPANY("UPDATE_COMPANY"), + DELETE_COMPANY("DELETE_COMPANY"), + UPLOAD_COMPANY_DELEGATION("UPLOAD_COMPANY_DELEGATION"), + DOWNLOAD_COMPANY_DELEGATION_TEMPLATE("DOWNLOAD_COMPANY_DELEGATION_TEMPLATE"), + GET_COMPANY_DELEGATION("GET_COMPANY_DELEGATION"), + DELETE_COMPANY_DELEGATION("DELETE_COMPANY_DELEGATION"), + CHECK_COMPANY_VAT_NUMBER("CHECK_COMPANY_VAT_NUMBER"), + GET_COMPANY_BY_USER("GET_COMPANY_BY_USER"), + REMOVE_COMPANY_FROM_USER("REMOVE_COMPANY_FROM_USER"), + /** LookUpData action context **/ CREATE_LOOKUP_DATA("CREATE_LOOKUP_DATA"), DELETE_LOOKUP_DATA("DELETE_LOOKUP_DATA"), @@ -70,13 +83,12 @@ public enum UserActionContextEnum { DELETE_BENEFICIARY_PREFERRED_CALL("DELETE_BENEFICIARY_PREFERRED_CALL"), GET_BENEFICIARY_PREFERRED_CALL("GET_BENEFICIARY_PREFERRED_CALL"), UPDATE_BENEFICIARY_PREFERRED_CALL("UPDATE_BENEFICIARY_PREFERRED_CALL"), - + /** 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") - ; + UPDATE_ASSIGNED_APPLICATION_DETAILS("UPDATE_ASSIGNED_APPLICATION_DETAILS"); private final String value; diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/CompanyServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/CompanyServiceImpl.java index 5ab99b13..c6bcc2f1 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/CompanyServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/CompanyServiceImpl.java @@ -106,7 +106,7 @@ public class CompanyServiceImpl implements CompanyService { } @Override - @Transactional(readOnly = true) + @Transactional public CompanyDelegationResponse getCompanyDelegation(HttpServletRequest request, Long companyId) { UserEntity userEntity =validator.validateUser(request); return delegationDao.getCompanyDelegation(userEntity, companyId); @@ -114,7 +114,8 @@ public class CompanyServiceImpl implements CompanyService { @Override @Transactional(rollbackFor = Exception.class) public void deleteCompanyDelegation(HttpServletRequest request, Long companyId) { - UserEntity userEntity =validator.validateUser(request); + + UserEntity userEntity = validator.validateUser(request); delegationDao.deleteCompanyDelegation(userEntity, companyId); } public UserWithCompanyEntity getUserWithCompanyEntity(Long userId,Long companyId){ diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/CompanyApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/CompanyApiController.java index 55fd6cef..ef73e985 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/CompanyApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/CompanyApiController.java @@ -4,6 +4,10 @@ import java.io.ByteArrayOutputStream; import java.util.List; import java.util.Map; +import net.gepafin.tendermanagement.enums.UserActionContextEnum; +import net.gepafin.tendermanagement.enums.UserActionLogsEnum; +import net.gepafin.tendermanagement.model.request.UserActionRequest; +import net.gepafin.tendermanagement.util.LoggingUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -30,71 +34,101 @@ import net.gepafin.tendermanagement.web.rest.api.errors.Status; @RestController @RequestMapping("${openapi.gepafin.base-path:/v1/company}") public class CompanyApiController implements CompanyApi{ - + private final Logger log = LoggerFactory.getLogger(CompanyApiController.class); - + @Autowired private CompanyService companyService; + @Autowired + private LoggingUtil loggingUtil; + @Override public ResponseEntity> createCompany(HttpServletRequest request, CompanyRequest companyRequest) { log.info("Create company with - Request Body: {}", companyRequest); + + /** This code is responsible for creating user action logs for "Creating company" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.INSERT).actionContext(UserActionContextEnum.CREATE_COMPANY).build()); + CompanyResponse data = companyService.createCompany(request, companyRequest); return ResponseEntity.status(HttpStatus.CREATED) .body(new Response<>(data, Status.SUCCESS, Translator.toLocale(GepafinConstant.COMPANY_CREATED_SUCCESS_MSG))); } - + @Override public ResponseEntity> updateCompany(HttpServletRequest request, Long companyId, CompanyRequest companyRequest) { log.info("Update company with - Request Body: {}", companyRequest); + + /** This code is responsible for creating user action logs for the "update company" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.UPDATE).actionContext(UserActionContextEnum.UPDATE_COMPANY).build()); + CompanyResponse data = companyService.updateCompany(request, companyId, companyRequest); - + return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(data, Status.SUCCESS, Translator.toLocale(GepafinConstant.COMPANY_UPDATED_SUCCESS_MSG))); } - + @Override public ResponseEntity> getCompany(HttpServletRequest request, Long companyId) { - + log.info("Get company with id: {}", companyId); + + /** This code is responsible for creating user action logs for the "get company" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_COMPANY).build()); + CompanyResponse data = companyService.getCompany(request, companyId); - - return ResponseEntity.status(HttpStatus.OK) - .body(new Response<>(data, Status.SUCCESS, Translator.toLocale(GepafinConstant.COMPANY_GET_SUCCESS_MSG))); + + return ResponseEntity.status(HttpStatus.OK).body(new Response<>(data, Status.SUCCESS, Translator.toLocale(GepafinConstant.COMPANY_GET_SUCCESS_MSG))); } - + @Override public ResponseEntity> deleteCompany(HttpServletRequest request, Long companyId) { log.info("Delete company with id: {}", companyId); + + /** This code is responsible for creating user action logs for the "delete company" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.DELETE).actionContext(UserActionContextEnum.DELETE_COMPANY).build()); + companyService.deleteCompany(request, companyId); - + return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(null, Status.SUCCESS, Translator.toLocale(GepafinConstant.COMPANY_DELETE_SUCCESS_MSG))); } - + @Override public ResponseEntity>> getCompanyByUserId(HttpServletRequest request, Long userId) { log.info("Get company with userId: {}", userId); + + /** This code is responsible for creating user action logs for the "Get company by user id" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_COMPANY_BY_USER).build()); + List data = companyService.getCompanyByUserId(request, userId); - + return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(data, Status.SUCCESS, Translator.toLocale(GepafinConstant.COMPANY_GET_SUCCESS_MSG))); } - + @Override public ResponseEntity>> checkVatNumber(HttpServletRequest request, String vatNumber) { log.info("check VatNumber with: {}", vatNumber); + + /** This code is responsible for creating user action logs for the "Check vat number" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.CHECK_COMPANY_VAT_NUMBER).build()); + Map data = companyService.checkVatNumber(request, vatNumber); return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(data, Status.SUCCESS, Translator.toLocale(GepafinConstant.CHECK_VATNUMBER_SUCCESS_MSG))); } - + @Override public ResponseEntity downloadCompanyDelegation(HttpServletRequest request, Long companyId, CompanyDelegationRequest companyDelegationRequest) { log.info("download company delegation with companyId: {}", companyId); + + /** This code is responsible for creating user action logs for the "Download company delegation" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.DOWNLOAD).actionContext(UserActionContextEnum.DOWNLOAD_COMPANY_DELEGATION_TEMPLATE).build()); + ByteArrayOutputStream data = companyService.downloadCompanyDelegation(request, companyId, companyDelegationRequest); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); @@ -102,35 +136,51 @@ public class CompanyApiController implements CompanyApi{ return new ResponseEntity<>(data.toByteArray(), headers, HttpStatus.OK); } - + @Override public ResponseEntity> uploadCompanyDelegation(HttpServletRequest request, Long companyId, MultipartFile file) { log.info("upload company delegation with companyId: {}", companyId); + + /** This code is responsible for creating user action logs for the "Uploading company delegation document" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.UPLOAD).actionContext(UserActionContextEnum.UPLOAD_COMPANY_DELEGATION).build()); + CompanyDelegationResponse companyDelegationResponse = companyService.uploadCompanyDelegation(request, companyId, file); return ResponseEntity.status(HttpStatus.CREATED) .body(new Response<>(companyDelegationResponse, Status.SUCCESS, Translator.toLocale(GepafinConstant.DELEGATION_FILE_UPLOAD_SUCCESS))); } - + @Override public ResponseEntity> getCompanyDelegation(HttpServletRequest request, Long companyId) { log.info("get company delegation with companyId: {}", companyId); + + /** This code is responsible for creating user action logs for the "Get company delegation" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_COMPANY_DELEGATION).build()); + CompanyDelegationResponse companyDelegationResponse = companyService.getCompanyDelegation(request, companyId); return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(companyDelegationResponse, Status.SUCCESS, Translator.toLocale(GepafinConstant.DELEGATION_FETCH_SUCCESS))); } @Override - public ResponseEntity> deleteCompanyDelegation(HttpServletRequest request, - Long companyId) { + public ResponseEntity> deleteCompanyDelegation(HttpServletRequest request, Long companyId) { + log.info("delete company delegation with companyId: {}", companyId); + + /** This code is responsible for creating user action logs for the "delete company delegation" operation. **/ + loggingUtil.logUserAction( + UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.DELETE).actionContext(UserActionContextEnum.DELETE_COMPANY_DELEGATION).build()); + companyService.deleteCompanyDelegation(request, companyId); - return ResponseEntity.status(HttpStatus.OK) - .body(new Response<>(null, Status.SUCCESS, Translator.toLocale(GepafinConstant.DELEGATION_DELETE_SUCCESS))); + return ResponseEntity.status(HttpStatus.OK).body(new Response<>(null, Status.SUCCESS, Translator.toLocale(GepafinConstant.DELEGATION_DELETE_SUCCESS))); } @Override public ResponseEntity> removeCompanyFromList(HttpServletRequest request, Long companyId) { log.info("Api to remove a company from user's list"); + + /** This code is responsible for creating user action logs for the "Remove company from user list" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.DELETE).actionContext(UserActionContextEnum.REMOVE_COMPANY_FROM_USER).build()); + companyService.removeCompanyFromList(request, companyId); return ResponseEntity.status(HttpStatus.OK) From 5f5321c71ee90fd81202f8113586980a3357b6b5 Mon Sep 17 00:00:00 2001 From: piyushkag Date: Sun, 24 Nov 2024 20:48:08 +0530 Subject: [PATCH 2/6] Added user action and versioning for document. --- .../tendermanagement/dao/DocumentDao.java | 71 ++++++++++++++++++- .../enums/UserActionContextEnum.java | 12 +++- .../rest/api/impl/DocumentApiController.java | 38 ++++++++-- 3 files changed, 113 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/DocumentDao.java b/src/main/java/net/gepafin/tendermanagement/dao/DocumentDao.java index 6f8e3243..3a6503a3 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/DocumentDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/DocumentDao.java @@ -2,9 +2,15 @@ package net.gepafin.tendermanagement.dao; import java.util.stream.Collectors; +import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import net.gepafin.tendermanagement.enums.DocumentSourceTypeEnum; +import net.gepafin.tendermanagement.enums.UserActionContextEnum; +import net.gepafin.tendermanagement.enums.VersionActionTypeEnum; +import net.gepafin.tendermanagement.model.request.VersionHistoryRequest; import net.gepafin.tendermanagement.repositories.ApplicationRepository; +import net.gepafin.tendermanagement.util.LoggingUtil; +import net.gepafin.tendermanagement.util.Utils; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -47,11 +53,18 @@ public class DocumentDao { @Autowired private ApplicationRepository applicationFormRepository; + + @Autowired + private LoggingUtil loggingUtil; + + @Autowired + private HttpServletRequest request; // @Value("${aws.s3.url.folder}") // private String s3Folder; public List uploadFiles(List files, Long sourceId, DocumentSourceTypeEnum sourceType, DocumentTypeEnum fileType) { + List documentEntities = new ArrayList<>(); Long source = resolveSourceId(sourceId, sourceType); for (MultipartFile file : files) { @@ -68,8 +81,44 @@ public class DocumentDao { } } documentRepository.saveAll(documentEntities); + + /** This code is responsible for adding a version history log for the "Upload call or application document based on source type" operation. **/ + + documentEntities.forEach(entity -> loggingUtil.addVersionHistory( + VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.INSERT).oldData(null).newData(entity).build())); + return documentEntities.stream().map(callDao::convertToDocumentResponseBean).collect(Collectors.toList()); } + + public UserActionContextEnum getUserActionContextEnum(DocumentSourceTypeEnum sourceType, DocumentTypeEnum fileType) { + + UserActionContextEnum userActionContext = null; + + if (fileType.equals(DocumentTypeEnum.DOCUMENT) && sourceType.equals(DocumentSourceTypeEnum.CALL)) { + userActionContext = UserActionContextEnum.UPLOAD_CALL_DOCUMENT; + } else if (fileType.equals(DocumentTypeEnum.IMAGES) && sourceType.equals(DocumentSourceTypeEnum.CALL)) { + userActionContext = UserActionContextEnum.UPLOAD_CALL_IMAGES; + } else if (fileType.equals(DocumentTypeEnum.DOCUMENT) && sourceType.equals(DocumentSourceTypeEnum.APPLICATION)) { + userActionContext = UserActionContextEnum.UPLOAD_APPLICATION_DOCUMENT; + } else if (fileType.equals(DocumentTypeEnum.IMAGES) && sourceType.equals(DocumentSourceTypeEnum.APPLICATION)) { + userActionContext = UserActionContextEnum.UPLOAD_APPLICATION_IMAGES; + } + + return userActionContext; + } + + public UserActionContextEnum getUserActionContextForUpdatingDocOrImage(DocumentTypeEnum documentTypeEnum) { + + UserActionContextEnum userActionContext; + + if (DocumentTypeEnum.DOCUMENT.equals(documentTypeEnum)) { + userActionContext = UserActionContextEnum.UPDATE_DOCUMENT; + } else{ + userActionContext = UserActionContextEnum.UPDATE_IMAGES; + } + return userActionContext; + } + private UploadFileOnAmazonS3Response uploadFileOnAmazonS3(MultipartFile file, DocumentSourceTypeEnum type, Long sourceId) { Long applicationId = 0L; @@ -109,11 +158,19 @@ public class DocumentDao { } public void deleteFile(Long documentId) { + DocumentEntity documentEntity = validateDocument(documentId); -// String fileName= Utils.extractFileName(documentEntity.getFilePath()); -// deleteFileOnAmazonS3(fileName); + //cloned for old data + DocumentEntity oldDocumentEntity = Utils.getClonedEntityForData(documentEntity); + + // String fileName= Utils.extractFileName(documentEntity.getFilePath()); + // deleteFileOnAmazonS3(fileName); documentEntity.setIsDeleted(true); documentRepository.save(documentEntity); + + /** This code is responsible for adding a version history log for the "Soft delete document" operation. **/ + loggingUtil.addVersionHistory( + VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.SOFT_DELETE).oldData(oldDocumentEntity).newData(documentEntity).build()); } @@ -123,16 +180,24 @@ public class DocumentDao { } public DocumentResponseBean updateDocument(Long documentId, MultipartFile file, DocumentTypeEnum documentTypeEnum) { + DocumentEntity documentEntity = validateDocument(documentId); + //cloned entity for old data + DocumentEntity oldDocumentData = Utils.getClonedEntityForData(documentEntity); + String type = documentEntity.getSource(); UploadFileOnAmazonS3Response uploadFileOnAmazonS3Response = updateFileOnAmazonS3(file, DocumentSourceTypeEnum.valueOf(type), documentEntity.getSourceId()); - if (uploadFileOnAmazonS3Response != null) { + if (uploadFileOnAmazonS3Response != null) { documentEntity.setFileName(uploadFileOnAmazonS3Response.getFileName()); documentEntity.setFilePath(uploadFileOnAmazonS3Response.getFilePath()); documentEntity.setType(documentTypeEnum.getValue()); documentEntity.setSource(documentEntity.getSource()); documentEntity.setSourceId(documentEntity.getSourceId()); documentRepository.save(documentEntity); + + /** This code is responsible for adding a version history log for the "updating doc or image" operation. **/ + loggingUtil.addVersionHistory( + VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldDocumentData).newData(documentEntity).build()); } return callDao.convertToDocumentResponseBean(documentEntity); } diff --git a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java index 7a694931..868a6e5b 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java @@ -88,7 +88,17 @@ public enum UserActionContextEnum { 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"); + UPDATE_ASSIGNED_APPLICATION_DETAILS("UPDATE_ASSIGNED_APPLICATION_DETAILS"), + + /** Document action context **/ + UPLOAD_CALL_DOCUMENT("UPLOAD_CALL_DOCUMENT"), + UPLOAD_CALL_IMAGES("UPLOAD_CALL_IMAGES"), + UPLOAD_APPLICATION_DOCUMENT("UPLOAD_APPLICATION_DOCUMENT"), + UPLOAD_APPLICATION_IMAGES("UPLOAD_APPLICATION_IMAGES"), + DELETE_DOCUMENT("DELETE_DOCUMENT"), + UPDATE_DOCUMENT("UPDATE_DOCUEMENT"), + UPDATE_IMAGES("UPDATE_IMAGES"), + GET_DOCUMENT("GET_DOCUMENT"); private final String value; diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/DocumentApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/DocumentApiController.java index 34caa9fd..9d42ab53 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/DocumentApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/DocumentApiController.java @@ -3,11 +3,16 @@ 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.dao.DocumentDao; import net.gepafin.tendermanagement.enums.DocumentSourceTypeEnum; import net.gepafin.tendermanagement.enums.DocumentTypeEnum; +import net.gepafin.tendermanagement.enums.UserActionContextEnum; +import net.gepafin.tendermanagement.enums.UserActionLogsEnum; +import net.gepafin.tendermanagement.model.request.UserActionRequest; import net.gepafin.tendermanagement.model.response.DocumentResponseBean; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.service.DocumentService; +import net.gepafin.tendermanagement.util.LoggingUtil; import net.gepafin.tendermanagement.web.rest.api.DocumentApi; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.Status; @@ -27,10 +32,21 @@ DocumentApiController implements DocumentApi { @Autowired private DocumentService documentService; + @Autowired + private LoggingUtil loggingUtil; + + @Autowired + private DocumentDao documentDao; + @Override public ResponseEntity>> uploadFile(HttpServletRequest httpServletRequest, Long sourceId, DocumentSourceTypeEnum sourceType, List files, DocumentTypeEnum fileType) { try { + UserActionContextEnum userActionContext = documentDao.getUserActionContextEnum(sourceType, fileType); + + /** This code is responsible for creating user action logs for the "upload document for call or application" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(httpServletRequest).actionType(UserActionLogsEnum.UPLOAD).actionContext(userActionContext).build()); + List responseBeans = documentService.uploadFile(files, sourceId, sourceType, fileType); return ResponseEntity.status(HttpStatus.CREATED) .body(new Response>(responseBeans, Status.SUCCESS, Translator.toLocale(GepafinConstant.FILES_UPLOADED_MSG))); @@ -40,6 +56,10 @@ DocumentApiController implements DocumentApi { } @Override public ResponseEntity> deleteFile(HttpServletRequest httpServletRequest, Long documentId) { + + /** This code is responsible for creating user action logs for the "delete document" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(httpServletRequest).actionType(UserActionLogsEnum.DELETE).actionContext(UserActionContextEnum.DELETE_DOCUMENT).build()); + documentService.deleteFile(documentId); return ResponseEntity.status(HttpStatus.CREATED) .body(new Response(null, Status.SUCCESS, Translator.toLocale(GepafinConstant.FILE_DELETED_SUCCESSFULLY_MSG))); @@ -47,6 +67,12 @@ DocumentApiController implements DocumentApi { @Override public ResponseEntity> updateDocument(HttpServletRequest httpServletRequest, Long documentId, MultipartFile file, DocumentTypeEnum documentTypeEnum) { + + UserActionContextEnum userActionContext = documentDao.getUserActionContextForUpdatingDocOrImage(documentTypeEnum); + + /** This code is responsible for creating user action logs for the "update document or image" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(httpServletRequest).actionType(UserActionLogsEnum.UPDATE).actionContext(userActionContext).build()); + DocumentResponseBean responseBeans = documentService.updateDocument(httpServletRequest, documentId, file, documentTypeEnum); return ResponseEntity.status(HttpStatus.CREATED) .body(new Response(responseBeans, Status.SUCCESS, Translator.toLocale(GepafinConstant.DOCUMENT_UPDATED_SUCCESSFULLY))); @@ -54,8 +80,12 @@ DocumentApiController implements DocumentApi { @Override public ResponseEntity> getDocumentById(HttpServletRequest request, Long id) { - DocumentResponseBean documentResponseBean= documentService.getDocument(request,id); - return ResponseEntity.status(HttpStatus.CREATED) - .body(new Response(documentResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.DOCUMENT_FETCHED_SUCCESSFULLY))); -} + + /** This code is responsible for creating user action logs for the "Get Document" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_DOCUMENT).build()); + + DocumentResponseBean documentResponseBean = documentService.getDocument(request, id); + return ResponseEntity.status(HttpStatus.CREATED) + .body(new Response(documentResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.DOCUMENT_FETCHED_SUCCESSFULLY))); + } } \ No newline at end of file From 64919a455c845423cce8b485a86115e3c46c366f Mon Sep 17 00:00:00 2001 From: piyushkag Date: Sun, 24 Nov 2024 21:29:32 +0530 Subject: [PATCH 3/6] Added user action and versioning for login attempt. --- .../tendermanagement/dao/LoginAttemptDao.java | 12 +++--------- .../enums/UserActionContextEnum.java | 6 +++++- .../rest/api/impl/LoginAttemptApiController.java | 15 +++++++++++++++ 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/LoginAttemptDao.java b/src/main/java/net/gepafin/tendermanagement/dao/LoginAttemptDao.java index a4629584..75bbdde5 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/LoginAttemptDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/LoginAttemptDao.java @@ -38,18 +38,12 @@ public class LoginAttemptDao { public LoginAttemptEntity createLoginAttempt(LoginAttemptEntity loginAttemptEntity) { VersionActionTypeEnum actionType; - LoginAttemptEntity oldLoginAttemptEntity = Utils.getClonedEntityForData(loginAttemptEntity); loginAttemptEntity.setAttemptDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); - if(loginAttemptEntity.getId() != null ) { - actionType = VersionActionTypeEnum.UPDATE; - }else{ - actionType = VersionActionTypeEnum.INSERT; - oldLoginAttemptEntity = null; - } - loginAttemptEntity = loginAttemptRepository.save(loginAttemptEntity); + loginAttemptEntity = loginAttemptRepository.save(loginAttemptEntity); /** This code is responsible for adding a version history log for "Create Login Attempt" operation. **/ - loggingUtil.addVersionHistoryWithoutToken(VersionHistoryRequest.builder().actionType(actionType).request(request).oldData(oldLoginAttemptEntity).newData(loginAttemptEntity).build()); + loggingUtil.addVersionHistoryWithoutToken( + VersionHistoryRequest.builder().actionType(VersionActionTypeEnum.INSERT).request(request).oldData(null).newData(loginAttemptEntity).build()); return loginAttemptEntity; } diff --git a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java index 868a6e5b..6987ae0f 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java @@ -98,7 +98,11 @@ public enum UserActionContextEnum { DELETE_DOCUMENT("DELETE_DOCUMENT"), UPDATE_DOCUMENT("UPDATE_DOCUEMENT"), UPDATE_IMAGES("UPDATE_IMAGES"), - GET_DOCUMENT("GET_DOCUMENT"); + GET_DOCUMENT("GET_DOCUMENT"), + + /** Login attempt action context **/ + GET_LOGIN_ATTEMPT_LIST("GET_LOGIN_ATTEMPT_LIST"), + ADD_LOGIN_ATTEMPT("ADD_LOGIN_ATTEMPT"); private final String value; diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/LoginAttemptApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/LoginAttemptApiController.java index cfd601b3..e28cf4a7 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/LoginAttemptApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/LoginAttemptApiController.java @@ -5,11 +5,15 @@ import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.entities.LoginAttemptEntity; import net.gepafin.tendermanagement.entities.UserEntity; +import net.gepafin.tendermanagement.enums.UserActionContextEnum; +import net.gepafin.tendermanagement.enums.UserActionLogsEnum; import net.gepafin.tendermanagement.model.request.LoginAttemptReq; +import net.gepafin.tendermanagement.model.request.UserActionRequest; import net.gepafin.tendermanagement.model.response.LoginAttemptPageableResponseBean; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.service.LoginAttemptService; import net.gepafin.tendermanagement.service.UserService; +import net.gepafin.tendermanagement.util.LoggingUtil; import net.gepafin.tendermanagement.util.Validator; import net.gepafin.tendermanagement.web.rest.api.LoginAttemptApi; import net.gepafin.tendermanagement.web.rest.api.errors.Status; @@ -38,8 +42,15 @@ public class LoginAttemptApiController implements LoginAttemptApi { @Autowired private UserService userService; + @Autowired + private LoggingUtil loggingUtil; + @Override public ResponseEntity>> getLoginAttemptsList(HttpServletRequest request, Integer pageNo, Integer pageLimit) { + + /** This code is responsible for creating user action logs for the "Get login attempt list" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_LOGIN_ATTEMPT_LIST).build()); + LoginAttemptPageableResponseBean> response = loginAttemptService.getLoginAttemptsList(request, pageNo, pageLimit); return ResponseEntity.status(HttpStatus.OK).body(response); } @@ -50,6 +61,10 @@ public class LoginAttemptApiController implements LoginAttemptApi { String userIdString = (String) userInfo.get("userId"); UserEntity currentUser = userService.getUserEntityById(Long.parseLong(userIdString)); loginAttemptReq.setUserName(currentUser.getEmail()); + + /** This code is responsible for creating user action logs for the "add login attempt" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.INSERT).actionContext(UserActionContextEnum.ADD_LOGIN_ATTEMPT).build()); + loginAttemptService.createLoginAttempt(loginAttemptReq, request); return ResponseEntity.status(HttpStatus.CREATED).body(new Response(null, Status.SUCCESS, Translator.toLocale(GepafinConstant.LOGIN_ATTEMPTED_CREATED_SUCCESSFULLY))); } From 580167e93270b0fac626f722f61517eb0df44f37 Mon Sep 17 00:00:00 2001 From: rajesh Date: Sun, 24 Nov 2024 21:37:32 +0530 Subject: [PATCH 4/6] Added user action and versioning for Form field controller --- .../tendermanagement/dao/FormFieldDao.java | 39 ++++++++++++++++--- .../enums/UserActionContextEnum.java | 6 +++ .../rest/api/impl/FormFieldApiController.java | 32 +++++++++++++++ 3 files changed, 71 insertions(+), 6 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FormFieldDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FormFieldDao.java index 57f67694..d2d3cef6 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/FormFieldDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/FormFieldDao.java @@ -3,12 +3,15 @@ package net.gepafin.tendermanagement.dao; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.entities.FormFieldEntity; +import net.gepafin.tendermanagement.enums.VersionActionTypeEnum; import net.gepafin.tendermanagement.model.request.FormFieldRequest; import net.gepafin.tendermanagement.model.request.SettingRequestBean; +import net.gepafin.tendermanagement.model.request.VersionHistoryRequest; import net.gepafin.tendermanagement.model.response.FormFieldResponseBean; import net.gepafin.tendermanagement.model.response.SettingResponseBean; import net.gepafin.tendermanagement.repositories.FormFieldRepository; import net.gepafin.tendermanagement.util.DateTimeUtil; +import net.gepafin.tendermanagement.util.LoggingUtil; import net.gepafin.tendermanagement.util.Utils; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException; @@ -16,6 +19,8 @@ import net.gepafin.tendermanagement.web.rest.api.errors.Status; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import jakarta.servlet.http.HttpServletRequest; + import java.time.LocalDateTime; import java.util.List; import java.util.stream.Collectors; @@ -25,6 +30,12 @@ public class FormFieldDao { @Autowired private FormFieldRepository formFieldRepository; + + @Autowired + private LoggingUtil loggingUtil; + + @Autowired + private HttpServletRequest request; public FormFieldEntity convertFormFieldRequestToFormFieldEntity(FormFieldRequest formFieldRequest) { FormFieldEntity formFieldEntity = new FormFieldEntity(); @@ -34,7 +45,11 @@ public class FormFieldDao { formFieldEntity.setSortOrder(formFieldRequest.getSortOrder()); formFieldEntity.setValidators(Utils.convertMapIntoJsonString(formFieldRequest.getValidators())); formFieldEntity.setSettings(setSettingRequestBean(formFieldRequest.getSettings())); - formFieldEntity = saveFormFieldEntity(formFieldEntity); + formFieldEntity = formFieldRepository.save(formFieldEntity); + + /** This code is responsible for adding a version history log for the "Create FormField" operation. **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.INSERT).oldData(null).newData(formFieldEntity).build()); + return formFieldEntity; } @@ -51,10 +66,10 @@ public class FormFieldDao { return formFieldResponseBean; } - public FormFieldEntity saveFormFieldEntity(FormFieldEntity formFieldEntity) { - formFieldEntity = formFieldRepository.save(formFieldEntity); - return formFieldEntity; - } +// public FormFieldEntity saveFormFieldEntity(FormFieldEntity formFieldEntity) { +// formFieldEntity = formFieldRepository.save(formFieldEntity); +// return formFieldEntity; +// } public void validateFormField(FormFieldRequest formFieldRequest) { if (formFieldRequest.getSettings() == null || formFieldRequest.getLabel() == null) { @@ -71,6 +86,7 @@ public class FormFieldDao { public FormFieldResponseBean updateFormField(Long formFieldId, FormFieldRequest formFieldRequest) { FormFieldEntity formFieldEntity = validateFormField(formFieldId); + FormFieldEntity oldFormFieldEntity = Utils.getClonedEntityForData(formFieldEntity); Utils.setIfUpdated(formFieldEntity::getName, formFieldEntity::setName, formFieldRequest.getName()); Utils.setIfUpdated(formFieldEntity::getLabel, formFieldEntity::setLabel, formFieldRequest.getLabel()); Utils.setIfUpdated(formFieldEntity::getDescription, formFieldEntity::setDescription, formFieldRequest.getDescription()); @@ -80,7 +96,13 @@ public class FormFieldDao { Utils.setIfUpdated(formFieldEntity::getValidators, formFieldEntity::setValidators, Utils.convertMapIntoJsonString(formFieldRequest.getValidators())); formFieldEntity.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); - formFieldEntity = saveFormFieldEntity(formFieldEntity); + + formFieldEntity = formFieldRepository.save(formFieldEntity); + + /** This code is responsible for adding a version history log for the "Update FormField" operation. **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldFormFieldEntity).newData(formFieldEntity).build()); + + return convertFormFieldEntityToFormFieldResponseBean(formFieldEntity); } @@ -99,6 +121,11 @@ public class FormFieldDao { public void deleteFormById(Long formFieldId) { FormFieldEntity formEntity = validateFormField(formFieldId); formFieldRepository.delete(formEntity); + + /** This code is responsible for adding a version history log for the "Delete FormField" operation. **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.DELETE).oldData(formEntity).newData(null).build()); + + } public String setSettingRequestBean(List settingRequestBeans) { diff --git a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java index 868a6e5b..d452fd32 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java @@ -89,6 +89,12 @@ public enum UserActionContextEnum { DELETE_ASSIGNED_APPLICATION("DELETE_ASSIGNED_APPLICATION"), GET_ASSIGNED_APPLICATION("GET_ASSIGNED_APPLICATION"), UPDATE_ASSIGNED_APPLICATION_DETAILS("UPDATE_ASSIGNED_APPLICATION_DETAILS"), + + /** Assigned form field context **/ + CREATE_FORM_FIELD("CREATE_FORM_FIELD"), + UPDATE_FORM_FIELD("UPDATE_FORM_FIELD"), + GET_FORM_FIELD("GET_FORM_FIELD"), + DELETE_FORM_FIELD("DELETE_FORM_FIELD"), /** Document action context **/ UPLOAD_CALL_DOCUMENT("UPLOAD_CALL_DOCUMENT"), diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/FormFieldApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/FormFieldApiController.java index e491d498..485d9387 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/FormFieldApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/FormFieldApiController.java @@ -3,10 +3,14 @@ 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.FormFieldRequest; +import net.gepafin.tendermanagement.model.request.UserActionRequest; import net.gepafin.tendermanagement.model.response.FormFieldResponseBean; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.service.FormFieldService; +import net.gepafin.tendermanagement.util.LoggingUtil; import net.gepafin.tendermanagement.web.rest.api.FormFieldApi; import net.gepafin.tendermanagement.web.rest.api.errors.Status; import org.springframework.beans.factory.annotation.Autowired; @@ -23,9 +27,17 @@ public class FormFieldApiController implements FormFieldApi { @Autowired private FormFieldService formFieldService; + + @Autowired + private LoggingUtil loggingUtil; @Override public ResponseEntity> createFormField(HttpServletRequest request, FormFieldRequest formFieldRequest) { + + /** This code is responsible for creating user action logs for the "Create Form field" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.INSERT) + .actionContext(UserActionContextEnum.CREATE_FORM_FIELD).build()); + FormFieldResponseBean formFieldResponseBean=formFieldService.createFormField(request,formFieldRequest); return ResponseEntity.status(HttpStatus.CREATED) .body(new Response<>(formFieldResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.FORM_FIELD_CREATED_SUCCESSFULLY))); @@ -33,6 +45,11 @@ public class FormFieldApiController implements FormFieldApi { @Override public ResponseEntity> updateFormField(HttpServletRequest request, Long formFieldId, FormFieldRequest formFieldRequest) { + + /** This code is responsible for creating user action logs for the "Update Form field" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.UPDATE) + .actionContext(UserActionContextEnum.UPDATE_FORM_FIELD).build()); + FormFieldResponseBean formFieldResponseBean=formFieldService.updateFormField(request,formFieldId,formFieldRequest); return ResponseEntity.status(HttpStatus.CREATED) .body(new Response<>(formFieldResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.FORM_FIELD_UPDATED_SUCCESSFULLY))); @@ -40,6 +57,11 @@ public class FormFieldApiController implements FormFieldApi { @Override public ResponseEntity> getFormFieldById(HttpServletRequest request, Long formFieldId) { + + /** This code is responsible for creating user action logs for the "Get Form field" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW) + .actionContext(UserActionContextEnum.GET_FORM_FIELD).build()); + FormFieldResponseBean formFieldResponseBean=formFieldService.getFormFieldById(request,formFieldId); return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(formFieldResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.FORM_FIELD_FETCHED_SUCCESSFULLY))); @@ -47,6 +69,11 @@ public class FormFieldApiController implements FormFieldApi { @Override public ResponseEntity> deleteForm(HttpServletRequest request, Long formFieldId) { + + /** This code is responsible for creating user action logs for the "Get Form field" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.DELETE) + .actionContext(UserActionContextEnum.DELETE_FORM_FIELD).build()); + formFieldService.deleteFormField(request,formFieldId); return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(null, Status.SUCCESS, Translator.toLocale(GepafinConstant.FORM_FIELD_DELETED_SUCCESSFULLY))); @@ -54,6 +81,11 @@ public class FormFieldApiController implements FormFieldApi { @Override public ResponseEntity>> getAllFormField(HttpServletRequest request) { + + /** This code is responsible for creating user action logs for the "Get all Form field" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW) + .actionContext(UserActionContextEnum.GET_FORM_FIELD).build()); + List formFieldResponseBeans=formFieldService.getAllFormField(request); return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(formFieldResponseBeans, Status.SUCCESS, Translator.toLocale(GepafinConstant.FORM_FIELD_FETCHED_SUCCESSFULLY))); From 5143795b3695df19bf8750119b1f44f6ac9e2350 Mon Sep 17 00:00:00 2001 From: rajesh Date: Sun, 24 Nov 2024 21:58:11 +0530 Subject: [PATCH 5/6] Added user action and versioning for Flow get api --- .../enums/UserActionContextEnum.java | 4 ++++ .../web/rest/api/impl/FlowApiController.java | 21 +++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java index ac171abb..9d69bf7f 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java @@ -105,6 +105,10 @@ public enum UserActionContextEnum { UPDATE_DOCUMENT("UPDATE_DOCUEMENT"), UPDATE_IMAGES("UPDATE_IMAGES"), GET_DOCUMENT("GET_DOCUMENT"), + + /** Assigned flow context **/ + CREATE_UPDATE_FLOW("CREATE_UPDATE_FLOW"), + GET_FLOW("GET_FLOW"), /** Login attempt action context **/ GET_LOGIN_ATTEMPT_LIST("GET_LOGIN_ATTEMPT_LIST"), diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/FlowApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/FlowApiController.java index 68cb183b..11fc5aad 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/FlowApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/FlowApiController.java @@ -3,10 +3,14 @@ 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.FlowRequestBean; +import net.gepafin.tendermanagement.model.request.UserActionRequest; import net.gepafin.tendermanagement.model.response.FlowResponseBean; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.service.FlowService; +import net.gepafin.tendermanagement.util.LoggingUtil; import net.gepafin.tendermanagement.web.rest.api.FlowApi; import net.gepafin.tendermanagement.web.rest.api.errors.Status; import org.springframework.beans.factory.annotation.Autowired; @@ -22,16 +26,29 @@ public class FlowApiController implements FlowApi { @Autowired private FlowService flowService; + + @Autowired + private LoggingUtil loggingUtil; @Override - public ResponseEntity> createOrUpdateFlow(HttpServletRequest httpServletRequest, FlowRequestBean flowRequestBean, Long callId) { - FlowResponseBean flowResponseBean=flowService.createOrUpdateFlow(httpServletRequest,flowRequestBean,callId); + public ResponseEntity> createOrUpdateFlow(HttpServletRequest request, FlowRequestBean flowRequestBean, Long callId) { + + /** This code is responsible for creating user action logs for the "Create or update Flow" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.INSERT) + .actionContext(UserActionContextEnum.CREATE_UPDATE_FLOW).build()); + + FlowResponseBean flowResponseBean=flowService.createOrUpdateFlow(request,flowRequestBean,callId); return ResponseEntity.status(HttpStatus.CREATED) .body(new Response<>(flowResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.FLOW_CREATED_SUCCESSFULLY))); } @Override public ResponseEntity> getFlowByCallId(HttpServletRequest request, Long callId) { + + /** This code is responsible for creating user action logs for the "Create or update Flow" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW) + .actionContext(UserActionContextEnum.GET_FLOW).build()); + FlowResponseBean flowResponseBean=flowService.getFlowByCallId(request,callId); return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(flowResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.FLOW_FETCHED_SUCCESSFULLY))); From ff7b4efc3d365f9e26f8255dce52543a81cf9303 Mon Sep 17 00:00:00 2001 From: piyushkag Date: Sun, 24 Nov 2024 22:00:15 +0530 Subject: [PATCH 6/6] Added user action for Dashbaord. --- .../enums/UserActionContextEnum.java | 6 +++++- .../web/rest/api/impl/DashboardApiController.java | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java index 6987ae0f..fbee7cf3 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java @@ -102,7 +102,11 @@ public enum UserActionContextEnum { /** Login attempt action context **/ GET_LOGIN_ATTEMPT_LIST("GET_LOGIN_ATTEMPT_LIST"), - ADD_LOGIN_ATTEMPT("ADD_LOGIN_ATTEMPT"); + ADD_LOGIN_ATTEMPT("ADD_LOGIN_ATTEMPT"), + + /** Dashboard action context **/ + GET_DASHBOARD_WIDGET_FOR_SUPER_ADMIN("GET_DASHBOARD_WIDGET_FOR_SUPER_ADMIN"), + GET_DASHBOARD_WIDGET_FOR_BENEFICIARY("GET_DASHBOARD_WIDGET_FOR_BENEFICIARY"); private final String value; diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/DashboardApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/DashboardApiController.java index c46258a2..7ff7be61 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/DashboardApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/DashboardApiController.java @@ -3,10 +3,14 @@ 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.UserActionRequest; import net.gepafin.tendermanagement.model.response.BeneficiaryWidgetResponseBean; import net.gepafin.tendermanagement.model.response.SuperAdminWidgetResponseBean; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.service.DashboardService; +import net.gepafin.tendermanagement.util.LoggingUtil; import net.gepafin.tendermanagement.web.rest.api.DashboardApi; import net.gepafin.tendermanagement.web.rest.api.errors.Status; import org.springframework.beans.factory.annotation.Autowired; @@ -22,14 +26,25 @@ public class DashboardApiController implements DashboardApi { @Autowired private DashboardService dashboardService; + @Autowired + private LoggingUtil loggingUtil; + @Override public ResponseEntity> getDashboardWidgetForSuperAdmin(HttpServletRequest request) { + + /** This code is responsible for creating user action logs for the "Get dashboard widget for super admin" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_DASHBOARD_WIDGET_FOR_SUPER_ADMIN).build()); + SuperAdminWidgetResponseBean widgetResponseBean= dashboardService.getDashboardWidgetForSuperAdmin(request); return ResponseEntity.status(HttpStatus.CREATED) .body(new Response<>(widgetResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.DASHBOARD_WIDGET_FETCHED_SUCCESSFULLY))); } @Override public ResponseEntity> getDashboardWidgetForBeneficiary(HttpServletRequest request, Long companyId) { + + /** This code is responsible for creating user action logs for the "Get dashboard widget for beneficiary" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.VIEW).actionContext(UserActionContextEnum.GET_DASHBOARD_WIDGET_FOR_BENEFICIARY).build()); + BeneficiaryWidgetResponseBean widgetResponseBean= dashboardService.getDashboardWidgetForBeneficiary(request, companyId); return ResponseEntity.status(HttpStatus.CREATED) .body(new Response<>(widgetResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.DASHBOARD_WIDGET_FETCHED_SUCCESSFULLY)));