Resolve Conflict

This commit is contained in:
harish
2024-10-27 13:37:47 +05:30
103 changed files with 3817 additions and 879 deletions

View File

@@ -0,0 +1,21 @@
package net.gepafin.tendermanagement.service;
import jakarta.servlet.http.HttpServletRequest;
import net.gepafin.tendermanagement.enums.ApplicationEvaluationStatusTypeEnum;
import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
import net.gepafin.tendermanagement.model.request.ApplicationEvaluationRequest;
import net.gepafin.tendermanagement.model.request.UpdateApplicationEvaluationRequest;
import net.gepafin.tendermanagement.model.response.ApplicationEvaluationResponse;
import net.gepafin.tendermanagement.model.response.ApplicationResponse;
import java.util.List;
public interface ApplicationEvaluationService {
ApplicationEvaluationResponse createOrUpdateApplicationEvaluation(HttpServletRequest request, ApplicationEvaluationRequest applicationEvaluationRequest,Long assignedApplicationsId);
void deleteApplicationEvaluation(HttpServletRequest request,Long id);
ApplicationEvaluationResponse getApplicationEvaluationByApplicationId(HttpServletRequest request,Long applicationId,Long assignedApplicationId);
ApplicationEvaluationResponse updateApplicationEvaluationStatus(HttpServletRequest request, Long applicationEvaluationId, ApplicationEvaluationStatusTypeEnum status);
}

View File

@@ -13,7 +13,7 @@ public interface AssignedApplicationsService {
void deleteApplication(HttpServletRequest request, Long id);
List<AssignedApplicationsResponse> getAllAssignedApplications(Long userId);
List<AssignedApplicationsResponse> getAllAssignedApplications(HttpServletRequest request, Long userId);
AssignedApplicationsResponse updateAssignedApplication(HttpServletRequest request, Long id, AssignedApplicationsRequest assignedApplicationsRequest);
AssignedApplicationsResponse getAssignedApplicationById(Long id);
AssignedApplicationsResponse getAssignedApplicationById(HttpServletRequest request, Long id);
}

View File

@@ -29,6 +29,6 @@ public interface CallService {
CallEntity validateCall(Long callId);
CallEntity validatePublishedCall(Long callId);
byte[] downloadCallDocumentsAsZip(Long callId);
CallEntity validatePublishedCall(Long callId, Long hubId);
byte[] downloadCallDocumentsAsZip(HttpServletRequest request, Long callId);
}

View File

@@ -9,7 +9,7 @@ import java.util.List;
public interface LoginAttemptService {
LoginAttemptPageableResponseBean<List<LoginAttemptEntity>> getLoginAttemptsList(Integer pageNo, Integer pageLimit);
LoginAttemptPageableResponseBean<List<LoginAttemptEntity>> getLoginAttemptsList(HttpServletRequest request, Integer pageNo, Integer pageLimit);
void createLoginAttempt(LoginAttemptReq loginAttemptReq, HttpServletRequest request);
}

View File

@@ -0,0 +1,19 @@
package net.gepafin.tendermanagement.service;
import net.gepafin.tendermanagement.entities.S3ConfigEntity;
import net.gepafin.tendermanagement.model.request.S3ConfigReq;
import net.gepafin.tendermanagement.model.response.S3ConfigBean;
import org.springframework.stereotype.Component;
import java.util.Optional;
@Component
public interface S3ConfigService {
S3ConfigBean addS3Path(S3ConfigReq s3Path);
Optional<S3ConfigEntity> getS3PathByType(String type);
S3ConfigEntity deleteS3PathById(Long id);
S3ConfigBean updateS3PathConfiguration(S3ConfigReq s3PathConfigurationReq, Long id);
}

View File

@@ -17,11 +17,11 @@ import java.util.List;
public interface UserService {
JWTToken createUser(HttpServletRequest request, String tempToken, UserReq userReq);
UserResponseBean updateUser(Long userId, UpdateUserReq userReq);
UserResponseBean updateUser(HttpServletRequest request, Long userId, UpdateUserReq userReq);
UserResponseBean getUserById(Long userId);
UserResponseBean getUserById(HttpServletRequest request, Long userId);
void deleteUser(Long userId);
void deleteUser(HttpServletRequest request, Long userId);
JWTToken login(LoginReq loginReq,HttpServletRequest request);

View File

@@ -0,0 +1,87 @@
package net.gepafin.tendermanagement.service.impl;
import jakarta.servlet.http.HttpServletRequest;
import net.gepafin.tendermanagement.config.Translator;
import net.gepafin.tendermanagement.constants.GepafinConstant;
import net.gepafin.tendermanagement.dao.ApplicationEvaluationDao;
import net.gepafin.tendermanagement.entities.AssignedApplicationsEntity;
import net.gepafin.tendermanagement.entities.UserEntity;
import net.gepafin.tendermanagement.enums.ApplicationEvaluationStatusTypeEnum;
import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
import net.gepafin.tendermanagement.model.request.ApplicationEvaluationRequest;
import net.gepafin.tendermanagement.model.request.UpdateApplicationEvaluationRequest;
import net.gepafin.tendermanagement.model.response.ApplicationEvaluationResponse;
import net.gepafin.tendermanagement.model.response.ApplicationResponse;
import net.gepafin.tendermanagement.repositories.AssignedApplicationsRepository;
import net.gepafin.tendermanagement.service.ApplicationEvaluationService;
import net.gepafin.tendermanagement.util.Validator;
import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException;
import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException;
import net.gepafin.tendermanagement.web.rest.api.errors.Status;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Optional;
@Service
public class ApplicationEvaluationServiceImpl implements ApplicationEvaluationService {
@Autowired
private ApplicationEvaluationDao applicationEvaluationDao;
@Autowired
private Validator validator;
@Autowired
private AssignedApplicationsRepository assignedApplicationsRepository;
@Override
@Transactional(rollbackFor = Exception.class)
public ApplicationEvaluationResponse createOrUpdateApplicationEvaluation(HttpServletRequest request, ApplicationEvaluationRequest req,Long assignedApplicationsId) {
AssignedApplicationsEntity assignedApplication = assignedApplicationsRepository.findByIdAndIsDeletedFalse(assignedApplicationsId).orElseThrow(()->
new ResourceNotFoundException(Status.NOT_FOUND,Translator.toLocale(GepafinConstant.ASSIGNED_APPLICATION_NOT_FOUND_MSG)));
UserEntity user=validator.validatePreInstructor(request,assignedApplication.getUserId());
return applicationEvaluationDao.createOrUpdateApplicationEvaluation(user,req,assignedApplication.getApplication().getId());
}
@Override
@Transactional(readOnly = true)
public ApplicationEvaluationResponse getApplicationEvaluationByApplicationId(
HttpServletRequest request, Long applicationId, Long assignedApplicationId) {
Optional<AssignedApplicationsEntity> assignedApplicationsOptional =
assignedApplicationsRepository.findByApplicationIdOrId(applicationId, assignedApplicationId);
AssignedApplicationsEntity assignedApplications = assignedApplicationsOptional
.orElseThrow(() -> new CustomValidationException(
Status.BAD_REQUEST,
Translator.toLocale(GepafinConstant.ASSIGNED_APPLICATION_NOT_FOUND_WITH_ID_MSG)
));
UserEntity user = validator.validatePreInstructor(request, assignedApplications.getUserId());
return applicationEvaluationDao.getApplicationEvaluationByApplicationId(
user,
assignedApplications.getApplication().getId(),
assignedApplications.getId()
);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteApplicationEvaluation(HttpServletRequest request,Long id) {
validator.getUserIdFromToken(request);
applicationEvaluationDao.deleteById(id);
}
@Override
@Transactional(rollbackFor = Exception.class)
public ApplicationEvaluationResponse updateApplicationEvaluationStatus(HttpServletRequest request, Long applicationId, ApplicationEvaluationStatusTypeEnum status) {
AssignedApplicationsEntity assignedApplications = assignedApplicationsRepository.findByApplicationIdAndIsDeletedFalse(applicationId).orElse(null);
if(assignedApplications==null){
throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.ASSIGNED_APPLICATION_NOT_FOUND_WITH_ID_MSG));
}
validator.validatePreInstructor(request, assignedApplications.getUserId());
return applicationEvaluationDao.updateApplicationEvaluationStatus(applicationId, status);
}
}

View File

@@ -65,6 +65,7 @@ public class ApplicationServiceImpl implements ApplicationService {
public ApplicationResponse createApplication(HttpServletRequest request, Long companyId, ApplicationRequest applicationRequest, Long callId) {
UserEntity userEntity = validator.validateUser(request);
CompanyEntity companyEntity = validator.validateUserWithCompany(request, companyId);
validator.validateUserWithCall(userEntity, callId);
return applicationDao.createApplicationByCallId(companyEntity, applicationRequest, callId, userEntity);
}
@@ -114,7 +115,6 @@ public class ApplicationServiceImpl implements ApplicationService {
@Transactional(rollbackFor = Exception.class)
public ApplicationResponse validateApplication(HttpServletRequest request, Long applicationId) {
return applicationDao.validateApplication(request, applicationId);
}

View File

@@ -26,32 +26,32 @@ public class AssignedApplicationsServiceImpl implements AssignedApplicationsServ
@Transactional(rollbackFor = Exception.class)
public AssignedApplicationsResponse createAssignedApplications(HttpServletRequest request, Long applicationId, Long userId, AssignedApplicationsRequest assignedApplicationsRequest) {
UserEntity assignedByUser= validator.validateUser(request);
validator.validatePreInstructor(request, userId);
return assignedApplicationsDao.createAssignedApplications(applicationId,userId,assignedByUser, assignedApplicationsRequest);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteApplication(HttpServletRequest request, Long id) {
assignedApplicationsDao.deleteById(id);
assignedApplicationsDao.deleteById(request, id);
}
@Override
@Transactional(readOnly = true)
public List<AssignedApplicationsResponse> getAllAssignedApplications(Long userId) {
return assignedApplicationsDao.getAllAssignedApplications(userId);
public List<AssignedApplicationsResponse> getAllAssignedApplications(HttpServletRequest request, Long userId) {
return assignedApplicationsDao.getAllAssignedApplications(request, userId);
}
@Override
@Transactional(rollbackFor = Exception.class)
public AssignedApplicationsResponse updateAssignedApplication(HttpServletRequest request, Long id , AssignedApplicationsRequest updatedAssignedApplicationRequest) {
UserEntity updatedByUser= validator.validateUser(request);
return assignedApplicationsDao.updateAssignedApplication(id,updatedAssignedApplicationRequest,updatedByUser);
public AssignedApplicationsResponse updateAssignedApplication(HttpServletRequest request, Long id, AssignedApplicationsRequest updatedAssignedApplicationRequest) {
return assignedApplicationsDao.updateAssignedApplication(request, id, updatedAssignedApplicationRequest);
}
@Override
@Transactional(readOnly = true)
public AssignedApplicationsResponse getAssignedApplicationById(Long id) {
return assignedApplicationsDao.getAssignedApplicationById(id);
public AssignedApplicationsResponse getAssignedApplicationById(HttpServletRequest request, Long id) {
return assignedApplicationsDao.getAssignedApplicationById(request, id);
}
}

View File

@@ -77,7 +77,7 @@ public class AuthenticationService {
public JWTToken login(LoginReq loginReq, HttpServletRequest request) {
UserEntity user=null;
LoginAttemptEntity loginAttemptEntity = prepareLoginAttemptEntity(loginReq, request);
log.info("Attempting login for email: {}", loginReq.getEmail());
String emailWithHubId = loginReq.getEmail()+":"+loginReq.getHubUuid();
@@ -211,10 +211,11 @@ public class AuthenticationService {
throw new CustomValidationException(Status.VALIDATION_ERROR,
Translator.toLocale(GepafinConstant.INVALID_TOKEN_MSG));
}
HubEntity hub = hubService.getHubByUuid(samlResponseLogEntity.getHubUuid());
Map<String, List<Object>> userAttributes = Utils
.convertStringIntoMap(samlResponseLogEntity.getAuthenticationObject());
String cf = userAttributes.get("CodiceFiscale").get(0).toString();
if (userRepository.existsByBeneficiaryCodiceFiscale(cf)) {
if (userRepository.existsByBeneficiaryCodiceFiscaleAndHubId(cf, hub.getId())) {
throw new ResourceNotFoundException(Status.NOT_FOUND,
Translator.toLocale(GepafinConstant.USER_ALREADY_EXIST_MSG));
}

View File

@@ -9,7 +9,6 @@ import net.gepafin.tendermanagement.enums.BeneficiaryCallStatus;
import net.gepafin.tendermanagement.model.request.BeneficiaryPreferredCallReq;
import net.gepafin.tendermanagement.model.response.BeneficiaryPreferredCallResponseBean;
import net.gepafin.tendermanagement.repositories.UserRepository;
import net.gepafin.tendermanagement.service.BeneficiaryPreferredCallService;
import net.gepafin.tendermanagement.service.UserService;
import net.gepafin.tendermanagement.util.Validator;
@@ -17,7 +16,6 @@ import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationExceptio
import net.gepafin.tendermanagement.web.rest.api.errors.Status;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import java.util.List;
@@ -26,10 +24,10 @@ public class BeneficiaryPreferredCallServiceImpl implements BeneficiaryPreferred
@Autowired
private BeneficiaryPreferredCallDao beneficiaryPreferredCallDao;
@Autowired
private Validator validator;
@Autowired
private UserRepository userRepository;
@Autowired
private UserService userService;
@@ -37,22 +35,22 @@ public class BeneficiaryPreferredCallServiceImpl implements BeneficiaryPreferred
@Override
public BeneficiaryPreferredCallResponseBean createBeneficiaryPreferredCall(HttpServletRequest request, BeneficiaryPreferredCallReq beneficiaryPreferredCallRequest) {
UserEntity userEntity = validator.validateUser(request);
return beneficiaryPreferredCallDao.createBeneficiaryPreferredCall(beneficiaryPreferredCallRequest,userEntity);
return beneficiaryPreferredCallDao.createBeneficiaryPreferredCall(request, beneficiaryPreferredCallRequest,userEntity);
}
@Override
public BeneficiaryPreferredCallResponseBean getBeneficiaryPreferredCallById(HttpServletRequest request, Long id) {
return beneficiaryPreferredCallDao.getBeneficiaryPreferredCallById(id);
return beneficiaryPreferredCallDao.getBeneficiaryPreferredCallById(request, id);
}
@Override
public void deleteBeneficiaryPreferredCall(HttpServletRequest request, Long id) {
beneficiaryPreferredCallDao.deleteBeneficiaryPreferredCallById(id);
beneficiaryPreferredCallDao.deleteBeneficiaryPreferredCallById(request, id);
}
@Override
public List<BeneficiaryPreferredCallResponseBean> getAllBeneficiaryPreferredCalls(HttpServletRequest request) {
return beneficiaryPreferredCallDao.getAllBeneficiaryPreferredCalls();
return beneficiaryPreferredCallDao.getAllBeneficiaryPreferredCalls(request);
}
// @Override
@@ -68,6 +66,7 @@ public class BeneficiaryPreferredCallServiceImpl implements BeneficiaryPreferred
@Override
public List<BeneficiaryPreferredCallResponseBean> getBeneficiaryPreferredCallByUserId(HttpServletRequest request,Long userId,Long beneficiaryId,Long companyId) {
UserEntity userEntity =validateGetBeneficiaryPreferredCallrequest(request,userId,beneficiaryId);
validator.validateUserId(request, userEntity.getId());
return beneficiaryPreferredCallDao.getBeneficiaryPreferredCallByUserId(userEntity,companyId);
}
@@ -81,7 +80,7 @@ public class BeneficiaryPreferredCallServiceImpl implements BeneficiaryPreferred
}
if(beneficiaryId!=null){
UserEntity user = userService.getUserByBeneficiaryId(beneficiaryId);
return validator.validateUserId(request,user.getId());
return validator.validateUserId(request, user.getId());
}
else{
return validator.validateUserId(request, userId);

View File

@@ -91,13 +91,15 @@ public class CallServiceImpl implements CallService {
}
@Override
public CallEntity validatePublishedCall(Long callId) {
return callDao.validatePublishedCall(callId);
public CallEntity validatePublishedCall(Long callId, Long hubId) {
return callDao.validatePublishedCall(callId, hubId);
}
@Override
@Transactional(readOnly = true)
public byte[] downloadCallDocumentsAsZip(Long callId) {
public byte[] downloadCallDocumentsAsZip(HttpServletRequest request, Long callId) {
UserEntity user = validator.validateUser(request);
validator.validateUserWithCall(user, callId);
return callDao.downloadCallDocumentsAsZip(callId);
}

View File

@@ -49,6 +49,7 @@ public class CompanyServiceImpl implements CompanyService {
@Transactional(rollbackFor = Exception.class)
public CompanyResponse updateCompany(HttpServletRequest request, Long companyId, CompanyRequest companyRequest) {
UserEntity userEntity =validator.validateUser(request);
validator.validateUserWithCompany(request, companyId);
return companyDao.updateCompany(userEntity, companyId, companyRequest);
}
@@ -56,6 +57,7 @@ public class CompanyServiceImpl implements CompanyService {
@Transactional(readOnly = true)
public CompanyResponse getCompany(HttpServletRequest request, Long companyId) {
UserEntity userEntity =validator.validateUser(request);
validator.validateUserWithCompany(request, companyId);
return companyDao.getCompany(userEntity, companyId);
}
@@ -63,13 +65,14 @@ public class CompanyServiceImpl implements CompanyService {
@Transactional(rollbackFor = Exception.class)
public void deleteCompany(HttpServletRequest request, Long companyId) {
UserEntity userEntity =validator.validateUser(request);
validator.validateUserWithCompany(request, companyId);
companyDao.deleteCompany(userEntity, companyId);
}
@Override
@Transactional(readOnly = true)
public List<CompanyResponse> getCompanyByUserId(HttpServletRequest request, Long userId) {
validator.validateUser(request);
validator.validateUserId(request, userId);
return companyDao.getCompanyByUserId(userId);
}
@@ -91,8 +94,7 @@ public class CompanyServiceImpl implements CompanyService {
@Override
@Transactional(readOnly = true)
public ByteArrayOutputStream downloadCompanyDelegation(HttpServletRequest request, Long companyId, CompanyDelegationRequest companyDelegationRequest) {
UserEntity userEntity =validator.validateUser(request);
return delegationDao.downloadCompanyDelegation(userEntity, companyId, companyDelegationRequest);
return delegationDao.downloadCompanyDelegation(request, companyId, companyDelegationRequest);
}
@Override

View File

@@ -34,7 +34,7 @@ public class DocumentServiceImpl implements DocumentService {
@Override
public DocumentResponseBean updateDocument(HttpServletRequest httpServletRequest, Long documentId, MultipartFile file, DocumentTypeEnum documentTypeEnum) {
return documentDao.updateDocument(documentId,file,documentTypeEnum);
return documentDao.updateDocument(documentId, file,documentTypeEnum);
}
@Override

View File

@@ -5,6 +5,8 @@ import net.gepafin.tendermanagement.dao.FlowDao;
import net.gepafin.tendermanagement.model.request.FlowRequestBean;
import net.gepafin.tendermanagement.model.response.FlowResponseBean;
import net.gepafin.tendermanagement.service.FlowService;
import net.gepafin.tendermanagement.util.Validator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -14,16 +16,21 @@ public class FlowServiceImpl implements FlowService {
@Autowired
private FlowDao flowDao;
@Autowired
private Validator validator;
@Override
@Transactional(rollbackFor = Exception.class)
public FlowResponseBean createOrUpdateFlow(HttpServletRequest httpServletRequest, FlowRequestBean flowRequestBean, Long callId) {
validator.validateUserWithCall(validator.validateUser(httpServletRequest), callId);
return flowDao.createOrUpdateFlow(flowRequestBean,callId);
}
@Override
@org.springframework.transaction.annotation.Transactional(readOnly = true)
public FlowResponseBean getFlowByCallId(HttpServletRequest request, Long callId) {
validator.validateUserWithCall(validator.validateUser(request), callId);
return flowDao.getFlowByCallId(callId);
}
}

View File

@@ -3,12 +3,15 @@ package net.gepafin.tendermanagement.service.impl;
import jakarta.servlet.http.HttpServletRequest;
import net.gepafin.tendermanagement.dao.LoginAttemptDao;
import net.gepafin.tendermanagement.entities.LoginAttemptEntity;
import net.gepafin.tendermanagement.entities.UserEntity;
import net.gepafin.tendermanagement.enums.LoginAttemptResultEnum;
import net.gepafin.tendermanagement.enums.LoginAttemptTypeEnum;
import net.gepafin.tendermanagement.model.request.LoginAttemptReq;
import net.gepafin.tendermanagement.model.response.LoginAttemptPageableResponseBean;
import net.gepafin.tendermanagement.service.LoginAttemptService;
import net.gepafin.tendermanagement.util.Utils;
import net.gepafin.tendermanagement.util.Validator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -19,22 +22,30 @@ public class LoginAttemptServiceImpl implements LoginAttemptService {
@Autowired
LoginAttemptDao loginAttemptDao;
@Autowired
private Validator validator;
@Override
public LoginAttemptPageableResponseBean<List<LoginAttemptEntity>> getLoginAttemptsList(Integer pageNo, Integer pageLimit) {
return loginAttemptDao.getLoginAttemptsList(pageNo, pageLimit);
public LoginAttemptPageableResponseBean<List<LoginAttemptEntity>> getLoginAttemptsList(HttpServletRequest request, Integer pageNo, Integer pageLimit) {
return loginAttemptDao.getLoginAttemptsList(validator.validateUser(request), pageNo, pageLimit);
}
@Override
public void createLoginAttempt(LoginAttemptReq loginAttemptReq, HttpServletRequest request) {
String ipAddress = Utils.getClientIpAddress(request);
String userAgent = request.getHeader("user-agent");
LoginAttemptEntity loginAttemptEntity = new LoginAttemptEntity();
loginAttemptEntity.setType(LoginAttemptTypeEnum.SWITCH.getValue());
loginAttemptEntity.setIpAddress(ipAddress);
loginAttemptEntity.setUserAgent(userAgent);
loginAttemptEntity.setUsername(loginAttemptReq.getUserName());
loginAttemptEntity.setResult(LoginAttemptResultEnum.SUCCESS.getValue());
if(loginAttemptReq.getUserId() != null) {
UserEntity userEntity = validator.validateUserId(request, loginAttemptReq.getUserId());
loginAttemptEntity.setUserId(userEntity.getId());
}
loginAttemptDao.createLoginAttempt(loginAttemptEntity);
}
}

View File

@@ -0,0 +1,41 @@
package net.gepafin.tendermanagement.service.impl;
import jakarta.transaction.Transactional;
import net.gepafin.tendermanagement.dao.S3ConfigDao;
import net.gepafin.tendermanagement.entities.S3ConfigEntity;
import net.gepafin.tendermanagement.model.request.S3ConfigReq;
import net.gepafin.tendermanagement.model.response.S3ConfigBean;
import net.gepafin.tendermanagement.service.S3ConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Optional;
@Service
public class S3ConfigServiceImpl implements S3ConfigService {
@Autowired
S3ConfigDao s3ConfigDao;
@Override
public S3ConfigBean addS3Path(S3ConfigReq s3Path) {
return s3ConfigDao.addS3Path(s3Path);
}
@Override
public Optional<S3ConfigEntity> getS3PathByType(String type) {
return s3ConfigDao.getS3PathByType(type);
}
@Override
@Transactional
public S3ConfigEntity deleteS3PathById(Long id) {
return s3ConfigDao.deleteS3PathConfigById(id);
}
@Override
@Transactional
public S3ConfigBean updateS3PathConfiguration(S3ConfigReq s3PathConfigurationReq, Long id) {
return s3ConfigDao.updateS3PathConfiguration(s3PathConfigurationReq, id);
}
}

View File

@@ -0,0 +1,197 @@
package net.gepafin.tendermanagement.service.impl;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.GetObjectRequest;
import com.amazonaws.services.s3.model.ObjectMetadata;
import lombok.extern.slf4j.Slf4j;
import net.gepafin.tendermanagement.dao.S3PathConfig;
import net.gepafin.tendermanagement.entities.DocumentEntity;
import net.gepafin.tendermanagement.enums.DocumentSourceTypeEnum;
import net.gepafin.tendermanagement.repositories.ApplicationRepository;
import net.gepafin.tendermanagement.repositories.ApplicationSignedDocumentRepository;
import net.gepafin.tendermanagement.repositories.DocumentRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
@Slf4j
@Service
public class S3ReUploadMigrationService {
private static final String OLD_BUCKET = "mementoresources";
private static final String SECURE_KEY = "267163962963";
@Autowired
private DocumentRepository documentRepository;
@Autowired
private AmazonS3Client s3Client;
@Autowired
private S3PathConfig s3ConfigBean;
@Autowired
private ApplicationRepository applicationRepository;
@Autowired
private ApplicationSignedDocumentRepository applicationSignedDocumentRepository;
@Autowired
private AmazonS3 amazonS3;
@Value("${aws.s3.url}")
private String s3Url;
private boolean migrationCompleted = false;
public String reUploadAndMigrateDocuments(String providedKey) {
if (migrationCompleted) {
return "Migration already completed.";
}
// Validate the provided key
if (!isValidKey(providedKey)) {
return "Invalid or missing migration key.";
}
List<DocumentEntity> documents = documentRepository.findAllByIsDeleteFalse();
if (documents.isEmpty()) {
return "No documents found to migrate.";
}
for (DocumentEntity document : documents) {
String oldUrl = document.getFilePath(); // This should contain the full URL
log.info("Processing {}", oldUrl);
try {
File localFile = downloadFileFromS3(oldUrl);
String newKey = generateNewS3Path(document); // Make sure this generates the correct new path
String uploadedPath = uploadFileToNewBucket(localFile, newKey);
updateDocumentPathAndDeleteOldEntry(document, uploadedPath);
} catch (Exception e) {
log.error("Error processing document {}: {}", document.getId(), e.getMessage());
}
}
return "Migrated Successfully.";
}
private boolean isValidKey(String providedKey) {
return providedKey != null && providedKey.equals(SECURE_KEY);
}
private File downloadFileFromS3(String fileUrl) throws Exception {
String key = extractS3KeyFromUrl(fileUrl); // Get the S3 key from the URL
File localFile = new File("/tmp/" + extractFileName(key)); // Save file locally
GetObjectRequest getObjectRequest = new GetObjectRequest(OLD_BUCKET, key); // Use the key
try (InputStream s3Stream = s3Client.getObject(getObjectRequest).getObjectContent(); FileOutputStream outputStream = new FileOutputStream(localFile)) {
s3Stream.transferTo(outputStream);
}
log.info("Downloaded file from old S3 bucket: {}", key);
return localFile;
}
private String extractS3KeyFromUrl(String url) {
// Assuming the URL structure is consistent
return url.replace("https://mementoresources.s3.eu-west-1.amazonaws.com/", "");
}
private String uploadFileToNewBucket(File localFile, String s3Folder) {
InputStream inputStream = null; // Declare the InputStream here for cleanup
try {
// Extract file name from the local file
String fileName = extractFileName(localFile.getAbsolutePath()); // Get the file name
String path = s3Folder + "/" + fileName; // Construct the S3 path
// Create InputStream from the local file
inputStream = new FileInputStream(localFile);
// Set up object metadata
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentType("application/octet-stream");
objectMetadata.setContentLength(localFile.length());
// Upload to S3
s3Client.putObject(OLD_BUCKET, path, inputStream, objectMetadata);
// Construct the full S3 URL
String fullUrl = String.format("https://%s.s3.%s.amazonaws.com/%s", OLD_BUCKET, "eu-west-1", path);
log.info("File '{}' uploaded successfully to Amazon S3 with URL: {}", fileName, fullUrl);
return fullUrl;
} catch (IOException e) {
log.error("IOException occurred during file upload for '{}': {}", localFile.getName(), e.getMessage());
throw new RuntimeException("Upload failed for: " + s3Folder + "/" + localFile.getName(), e);
} catch (AmazonServiceException e) {
log.error("Amazon service exception while uploading file '{}': {}", localFile.getName(), e.getMessage());
throw new RuntimeException("Upload failed for: " + s3Folder + "/" + localFile.getName(), e);
} catch (SdkClientException e) {
log.error("SDK client exception while uploading file '{}': {}", localFile.getName(), e.getMessage());
throw new RuntimeException("Upload failed for: " + s3Folder + "/" + localFile.getName(), e);
} finally {
// Close InputStream if it was opened
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
log.warn("Failed to close InputStream for file '{}': {}", localFile.getName(), e.getMessage());
}
}
}
}
private String generateNewS3Path(DocumentEntity document) {
DocumentSourceTypeEnum sourceType = DocumentSourceTypeEnum.valueOf(document.getSource());
Long callId;
if (sourceType.equals(DocumentSourceTypeEnum.CALL)) {
return s3ConfigBean.generateDocumentPath(sourceType, document.getSourceId(), 0L);
} else {
callId = applicationRepository.findCallIdById(document.getSourceId());
return s3ConfigBean.generateDocumentPath(sourceType, callId, document.getSourceId());
}
}
private String extractFileName(String filePath) {
String[] parts = filePath.split("/");
return parts[parts.length - 1];
}
private void updateDocumentPathAndDeleteOldEntry(DocumentEntity document, String newPath) {
String fileName = extractFileName(newPath);
DocumentEntity newDocument = new DocumentEntity();
newDocument.setFilePath(newPath);
newDocument.setSource(document.getSource());
newDocument.setType(document.getType());
newDocument.setIsDeleted(false);
newDocument.setSourceId(document.getSourceId());
newDocument.setFileName(fileName);
documentRepository.save(newDocument);
documentRepository.delete(document);
log.info("Migrated document ID: {} to new path: {}", document.getId(), newPath);
}
}

View File

@@ -40,19 +40,22 @@ public class UserServiceImpl implements UserService {
@Override
@Transactional(rollbackFor = Exception.class)
public UserResponseBean updateUser(Long userId, UpdateUserReq userReq) {
public UserResponseBean updateUser(HttpServletRequest request, Long userId, UpdateUserReq userReq) {
validator.validateUserId(request, userId);
return userDao.updateUser(userId, userReq);
}
@Override
@Transactional(readOnly = true)
public UserResponseBean getUserById(Long userId) {
public UserResponseBean getUserById(HttpServletRequest request, Long userId) {
validator.validateUserId(request, userId);
return userDao.getUserById(userId);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteUser(Long userId) {
public void deleteUser(HttpServletRequest request, Long userId) {
validator.validateUserId(request, userId);
userDao.deleteUser(userId);
}

View File

@@ -0,0 +1,261 @@
package net.gepafin.tendermanagement.service.impl;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.GetObjectRequest;
import com.amazonaws.services.s3.model.ObjectMetadata;
import lombok.extern.slf4j.Slf4j;
import net.gepafin.tendermanagement.dao.S3PathConfig;
import net.gepafin.tendermanagement.entities.ApplicationSignedDocumentEntity;
import net.gepafin.tendermanagement.entities.UserCompanyDelegationEntity;
import net.gepafin.tendermanagement.enums.DocOtherSourceTypeEnum;
import net.gepafin.tendermanagement.repositories.ApplicationRepository;
import net.gepafin.tendermanagement.repositories.ApplicationSignedDocumentRepository;
import net.gepafin.tendermanagement.repositories.S3ConfigRepository;
import net.gepafin.tendermanagement.repositories.UserCompanyDelegationRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@Service
public class UserSignedAndDelegationServiceImpl {
private static final String OLD_BUCKET = "mementoresources";
private static final String NEW_BUCKET = "mementoresources";
private static final String SECURE_KEY = "267163962963";
@Autowired
private UserCompanyDelegationRepository userCompanyDelegationRepository;
@Autowired
private AmazonS3Client s3Client;
@Autowired
private S3PathConfig s3ConfigBean;
@Autowired
private ApplicationSignedDocumentRepository applicationSignedDocumentRepository;
@Autowired
ApplicationRepository applicationRepository;
@Autowired
S3ConfigRepository s3ConfigRepository;
@Value("${aws.s3.url}")
private String s3Url;
private boolean migrationCompleted = false;
public String migrateUserDelegatedDocuments(String providedKey) {
if (migrationCompleted) {
return "Migration already completed.";
}
// Validate the provided key
if (isValidKey(providedKey)) {
return "Invalid or missing migration key.";
}
List<UserCompanyDelegationEntity> documents = userCompanyDelegationRepository.findAllByStatus("ACTIVE");
if (documents.isEmpty()) {
return "No documents found to migrate.";
}
for (UserCompanyDelegationEntity document : documents) {
String oldUrl = document.getFilePath();
log.info("Processing user designated document: {}", oldUrl);
try {
File localFile = downloadFileFromS3(oldUrl);
String newKey = generateNewS3PathForDelegationDoc();
String uploadedPath = uploadFileToNewBucket(localFile, newKey);
updateDelegatedDocumentPathAndDeleteOldEntry(document, uploadedPath);
} catch (Exception e) {
log.error("Error processing user designated document {}: {}", document.getId(), e.getMessage());
}
}
return "Migrated";
}
public String migrateUserSignedDocuments(String providedKey) {
if (migrationCompleted) {
return "Migration already completed.";
}
// Validate the provided key
if (isValidKey(providedKey)) {
return "Invalid or missing migration key.";
}
List<ApplicationSignedDocumentEntity> documents = applicationSignedDocumentRepository.findAllByIsStatus("ACTIVE");
if (documents.isEmpty()) {
return "No documents found to migrate.";
}
for (ApplicationSignedDocumentEntity document : documents) {
String oldUrl = document.getFilePath();
log.info("Processing user signed document: {}", oldUrl);
try {
File localFile = downloadFileFromS3(oldUrl);
String newKey = generateNewS3PathForUserSignedDoc(document);
String uploadedPath = uploadFileToNewBucket(localFile, newKey);
updateDocumentPathAndDeleteOldEntry(document, uploadedPath);
} catch (Exception e) {
log.error("Error processing user signed document {}: {}", document.getId(), e.getMessage());
}
}
return "Migrated.";
}
private boolean isValidKey(String providedKey) {
return providedKey == null || !providedKey.equals(SECURE_KEY);
}
private String generateNewS3PathForDelegationDoc() {
return s3ConfigBean.generateDocumentPathForOther(DocOtherSourceTypeEnum.USER_DELEGATION, 0L, 0L);
}
private String generateNewS3PathForUserSignedDoc(ApplicationSignedDocumentEntity document) {
// Fetch the list of application IDs associated with the document
List<Long> applicationIds = applicationSignedDocumentRepository.findApplicationIdIdsById(document.getId());
List<String> paths = new ArrayList<>();
// Loop through the application IDs and generate paths
for (Long applicationId : applicationIds) {
Long callId = applicationRepository.findCallIdById(applicationId);
// Construct the path for the current application and call ID
String newPath = String.format("%s/call/call_%d/application/application_%d/user_signed_document", s3ConfigRepository.getPathByTypeOther(
String.valueOf(DocOtherSourceTypeEnum.USER_SIGNED_DOCUMENT)) , callId, applicationId);
log.info("Generated new S3 path: {}", newPath);
paths.add(newPath);
}
return String.join(",", paths);
}
private File downloadFileFromS3(String fileUrl) throws Exception {
String key = extractS3KeyFromUrl(fileUrl);
File localFile = new File("/tmp/" + extractFileName(key));
GetObjectRequest getObjectRequest = new GetObjectRequest(OLD_BUCKET, key);
try (InputStream s3Stream = s3Client.getObject(getObjectRequest).getObjectContent(); FileOutputStream outputStream = new FileOutputStream(localFile)) {
s3Stream.transferTo(outputStream);
}
log.info("Downloaded file from old S3 bucket: {}", key);
return localFile;
}
private String extractS3KeyFromUrl(String url) {
return url.replace("https://mementoresources.s3.eu-west-1.amazonaws.com/", "");
}
private String uploadFileToNewBucket(File localFile, String s3Path) {
InputStream inputStream = null;
try {
String fileName = extractFileName(localFile.getAbsolutePath()); // Extract file name
String fullPath = String.format("%s/%s", s3Path, fileName); // Construct full path
inputStream = new FileInputStream(localFile); // Create InputStream
// Set metadata for the file
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentLength(localFile.length());
objectMetadata.setContentType("application/octet-stream");
// Upload the file to S3 with the constructed path
s3Client.putObject(NEW_BUCKET, fullPath, inputStream, objectMetadata);
// Construct the full S3 URL for the uploaded file
String fullUrl = String.format("https://%s.s3.%s.amazonaws.com/%s", NEW_BUCKET, "eu-west-1", fullPath);
log.info("File '{}' uploaded successfully to Amazon S3 with URL: {}", fileName, fullUrl);
return fullUrl;
} catch (IOException e) {
log.error("IOException occurred during file upload for '{}': {}", localFile.getName(), e.getMessage());
throw new RuntimeException("Upload failed for: " + localFile, e);
} catch (AmazonServiceException e) {
log.error("Amazon service exception while uploading file '{}': {}", localFile.getName(), e.getMessage());
throw new RuntimeException("Upload failed for: " + localFile, e);
} catch (SdkClientException e) {
log.error("SDK client exception while uploading file '{}': {}", localFile.getName(), e.getMessage());
throw new RuntimeException("Upload failed for: " + localFile, e);
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
log.warn("Failed to close InputStream for file '{}': {}", localFile.getName(), e.getMessage());
}
}
}
}
private String extractFileName(String filePath) {
String[] parts = filePath.split("/");
return parts[parts.length - 1];
}
private String extractFileNameFromPath(String path) {
return path.substring(path.lastIndexOf('/') + 1);
}
private void updateDocumentPathAndDeleteOldEntry(ApplicationSignedDocumentEntity document, String newPath) {
ApplicationSignedDocumentEntity newDocument = new ApplicationSignedDocumentEntity();
String fileName = extractFileNameFromPath(newPath);
newDocument.setFilePath(newPath);
newDocument.setFileName(fileName);
newDocument.setApplication(document.getApplication());
newDocument.setStatus("ACTIVE");
applicationSignedDocumentRepository.save(newDocument);
applicationSignedDocumentRepository.delete(document);
log.info("Migrated document ID: {} to new path: {}", document.getId(), newPath);
}
private void updateDelegatedDocumentPathAndDeleteOldEntry(UserCompanyDelegationEntity document, String newPath) {
String fileName = extractFileNameFromPath(newPath);
UserCompanyDelegationEntity newDocument = new UserCompanyDelegationEntity();
newDocument.setFilePath(newPath);
newDocument.setFileName(fileName);
newDocument.setBeneficiaryId(document.getBeneficiaryId());
newDocument.setUserId(document.getUserId());
newDocument.setCompanyId(document.getCompanyId());
newDocument.setStatus("ACTIVE");
userCompanyDelegationRepository.save(newDocument);
userCompanyDelegationRepository.delete(document);
log.info("Migrated document ID: {} to new path: {}", document.getId(), newPath);
}
}