Merge pull request #280 from Kitzanos/manage-pec-errors
Enhance PEC Email Error Handling and Response Saving
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package net.gepafin.tendermanagement.dao;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import jakarta.persistence.criteria.CriteriaBuilder;
|
||||
@@ -308,6 +309,7 @@ public class ApplicationAmendmentRequestDao {
|
||||
emailNotificationDao.sendMailToNotifyBeneficiaryRegardingNewAmendment(applicationAmendmentRequestEntity);
|
||||
EmailSendResponse emailSendResponse = emailDao.buildEmailSendResponseFromRequest(request);
|
||||
applicationAmendmentRequestResponse.setEmailSendResponse(emailSendResponse);
|
||||
saveEmailSendResponse(emailSendResponse, applicationAmendmentRequestEntity);
|
||||
}
|
||||
return applicationAmendmentRequestResponse;
|
||||
}
|
||||
@@ -1197,6 +1199,7 @@ public class ApplicationAmendmentRequestDao {
|
||||
emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(email), emailLogRequest);
|
||||
EmailSendResponse emailSendResponse = emailDao.buildEmailSendResponseFromRequest(request);
|
||||
emailReminderResponse.setEmailSendResponse(emailSendResponse);
|
||||
saveEmailSendResponse(emailSendResponse, amendment);
|
||||
} else {
|
||||
throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.BENEFICIARY_EMAIL_NOT_FOUND_MSG));
|
||||
}
|
||||
@@ -1551,8 +1554,14 @@ public class ApplicationAmendmentRequestDao {
|
||||
applicationAmendmentRequestViewResponse.setExpirationDate(applicationAmendmentRequestView.getExpirationDate());
|
||||
applicationAmendmentRequestViewResponse.setAssigendUserName(applicationAmendmentRequestView.getAssigendUserName());
|
||||
applicationAmendmentRequestViewResponse.setStatus(applicationAmendmentRequestView.getStatus());
|
||||
applicationAmendmentRequestViewResponse.setEmailSendResponse(applicationAmendmentRequestView.getEmailSendResponse());
|
||||
return applicationAmendmentRequestViewResponse;
|
||||
}
|
||||
|
||||
private void saveEmailSendResponse(EmailSendResponse newResponses, ApplicationAmendmentRequestEntity amendment) {
|
||||
List<EmailSendResponse> mergedResponses = Utils.mergeEmailSendResponses(amendment.getEmailSendResponse(), newResponses);
|
||||
|
||||
amendment.setEmailSendResponse(mergedResponses);
|
||||
applicationAmendmentRequestRepository.save(amendment);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1892,7 +1892,7 @@ public class ApplicationEvaluationDao {
|
||||
log.info("Status updated to ADMISSIBLE for applicationId: " + application.getId());
|
||||
emailNotificationDao.sendAdmissibilityNotificationEmailForAdmissibleApplication(application);
|
||||
emailSendResponse = emailDao.buildEmailSendResponseFromRequest(request);
|
||||
|
||||
saveEmailSendResponseToEvaluation(emailSendResponse,existingEntity);
|
||||
}
|
||||
|
||||
if(newStatus.equals(ApplicationStatusForEvaluation.TECHNICAL_EVALUATION) && Boolean.TRUE.equals(application.getStatus().equals(ApplicationStatusTypeEnum.ADMISSIBLE.getValue()))){
|
||||
@@ -1950,6 +1950,7 @@ public class ApplicationEvaluationDao {
|
||||
application = applicationRepository.save(application);
|
||||
emailNotificationDao.sendInadmissibilityEmailForRejectedApplication(application,existingEntity);
|
||||
emailSendResponse = emailDao.buildEmailSendResponseFromRequest(request);
|
||||
saveEmailSendResponseToEvaluation(emailSendResponse,existingEntity);
|
||||
}
|
||||
|
||||
Map<String, String> placeHolders = notificationDao.sendNotificationToBeneficiary(application, NotificationTypeEnum.EVALUATION_RESULT);
|
||||
@@ -1963,6 +1964,14 @@ public class ApplicationEvaluationDao {
|
||||
return null;
|
||||
}
|
||||
|
||||
private void saveEmailSendResponseToEvaluation(EmailSendResponse newResponse, ApplicationEvaluationEntity evaluationEntity) {
|
||||
List<EmailSendResponse> mergedResponses = Utils.mergeEmailSendResponses(
|
||||
evaluationEntity.getEmailSendResponse(), newResponse
|
||||
);
|
||||
evaluationEntity.setEmailSendResponse(mergedResponses);
|
||||
applicationEvaluationRepository.save(evaluationEntity);
|
||||
}
|
||||
|
||||
public ApplicationEvaluationEntity validateApplicationEvaluationByApplicationId(Long applicationId) {
|
||||
return applicationEvaluationRepository
|
||||
.findByApplicationIdAndIsDeletedFalse(applicationId)
|
||||
|
||||
@@ -470,6 +470,7 @@ public class AssignedApplicationsDao {
|
||||
response.setCompanyName(view.getCompanyName());
|
||||
response.setCreatedDate(view.getCreatedDate());
|
||||
response.setUpdatedDate(view.getUpdatedDate());
|
||||
response.setEmailSendResponse(view.getEmailSendResponse());
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
@@ -20,8 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
@Component
|
||||
@Log4j2
|
||||
@@ -36,21 +35,25 @@ public class EmailDao {
|
||||
@Autowired
|
||||
private CallService callService;
|
||||
|
||||
@Autowired
|
||||
private EmailLogDao emailLogDao;
|
||||
|
||||
public EmailResendResponseBean resendEmail(HttpServletRequest request , Long userActionId){
|
||||
List<EmailLogEntity> emailLogs = emailLogRepository.findByUserActionIdAndEmailServiceType(userActionId,EmailServiceTypeEnum.PEC_SERVICE.getValue());
|
||||
List<EmailLogEntity> emailLogs = emailLogRepository.findByUserActionIdAndEmailServiceTypeAndSendStatus(userActionId,EmailServiceTypeEnum.PEC_SERVICE.getValue(),StatusTypeEnum.FAILED.getValue());
|
||||
if (emailLogs.isEmpty()) {
|
||||
log.info("No emails found for given userActionId.");
|
||||
}
|
||||
EmailResendResponseBean emailResendResponseBean = new EmailResendResponseBean();
|
||||
for (EmailLogEntity log : emailLogs){
|
||||
EmailLogRequest emailLogRequest = new EmailLogRequest();
|
||||
emailLogRequest.setEmailType(EmailScenarioTypeEnum.valueOf(log.getEmailType()));
|
||||
emailLogRequest.setRecipientType(RecipientTypeEnum.valueOf(log.getRecipientType()));
|
||||
emailLogRequest.setRecipientId(log.getRecipientId());
|
||||
emailLogRequest.setUserId(log.getUserId());
|
||||
emailLogRequest.setApplicatioId(log.getApplicationId());
|
||||
emailLogRequest.setCallId(log.getCallId());
|
||||
emailLogRequest.setAmendmentId(log.getAmendmentId());
|
||||
EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(EmailScenarioTypeEnum.valueOf(log.getEmailType()),
|
||||
RecipientTypeEnum.valueOf(log.getRecipientType()),
|
||||
log.getRecipientId(),
|
||||
log.getRecipientEmails(),
|
||||
log.getUserId(),
|
||||
log.getApplicationId(),
|
||||
log.getAmendmentId(),
|
||||
log.getCallId()
|
||||
);
|
||||
|
||||
List<String> recipients = Utils.commaSeparatedStringToList(log.getRecipientEmails());
|
||||
CallEntity call = callService.validateCall(log.getCallId());
|
||||
@@ -69,23 +72,37 @@ public class EmailDao {
|
||||
|
||||
public EmailSendResponse buildEmailSendResponseFromRequest(HttpServletRequest request) {
|
||||
Long userActionId = (Long) request.getAttribute(GepafinConstant.USER_ACTION_ID);
|
||||
boolean isEmailSendSuccess = isEmailSentSuccessfully(userActionId);
|
||||
EmailSendResponse emailSendResponse = new EmailSendResponse();
|
||||
emailSendResponse.setIsEmailSend(isEmailSendSuccess);
|
||||
emailSendResponse.setUserActionId(userActionId);
|
||||
return emailSendResponse;
|
||||
}
|
||||
|
||||
public boolean isEmailSentSuccessfully(Long userActionId) {
|
||||
List<EmailLogEntity> emailLogs = emailLogRepository.findByUserActionId(userActionId);
|
||||
|
||||
boolean allSuccess = true;
|
||||
String emailScenario = null;
|
||||
|
||||
for (EmailLogEntity log : emailLogs) {
|
||||
if (EmailServiceTypeEnum.PEC_SERVICE.getValue().equals(log.getEmailServiceType()) &&
|
||||
StatusTypeEnum.SUCCESS.getValue().equals(log.getSendStatus())) {
|
||||
return true;
|
||||
if (emailScenario == null) {
|
||||
emailScenario = log.getEmailType();
|
||||
}
|
||||
boolean isSuccess = EmailServiceTypeEnum.PEC_SERVICE.getValue().equals(log.getEmailServiceType()) &&
|
||||
StatusTypeEnum.SUCCESS.getValue().equals(log.getSendStatus());
|
||||
if (!isSuccess) {
|
||||
allSuccess = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
return buildResponse(userActionId, allSuccess, emailScenario);
|
||||
}
|
||||
|
||||
private EmailSendResponse buildResponse(Long userActionId, boolean allSuccess, String emailScenario) {
|
||||
EmailSendResponse response = new EmailSendResponse();
|
||||
response.setUserActionId(userActionId);
|
||||
response.setIsEmailSend(allSuccess);
|
||||
response.setEmailScenario(emailScenario != null ? EmailScenarioTypeEnum.valueOf(emailScenario) : null);
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -43,6 +43,7 @@ import org.springframework.stereotype.Component;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static net.gepafin.tendermanagement.util.Utils.setIfUpdated;
|
||||
@@ -155,6 +156,8 @@ public class UserDao {
|
||||
emailSendResponse.setIsEmailSend(isEmailSendSuccess);
|
||||
Long userActionId =(Long)request.getAttribute(GepafinConstant.USER_ACTION_ID);
|
||||
emailSendResponse.setUserActionId(userActionId);
|
||||
emailSendResponse.setEmailScenario(EmailScenarioTypeEnum.USER_CREATION);
|
||||
saveEmailSendResponseToUser(emailSendResponse,userEntity);
|
||||
}
|
||||
JWTToken token = authService.getJWTTokenBean(userEntity, Boolean.TRUE, loginAttemptEntity.getId(),emailSendResponse);
|
||||
return token;
|
||||
@@ -406,6 +409,7 @@ public class UserDao {
|
||||
RoleResponseBean roleResponseBean = roleDao.convertRoleEntityToRoleResponse(userEntity.getRoleEntity());
|
||||
userResponseBean.setRole(roleResponseBean);
|
||||
userResponseBean.setLastLogin(userEntity.getLastLogin());
|
||||
userResponseBean.setEmailSendResponse(userEntity.getEmailSendResponse());
|
||||
List<CompanyResponse> companyResponseBeans = companyDao.getCompanyByUserId(userEntity.getId());
|
||||
userResponseBean.setCompanies(companyResponseBeans);
|
||||
if (userEntity.getBeneficiary() == null) {
|
||||
@@ -506,8 +510,18 @@ public class UserDao {
|
||||
InitiatePasswordResetResponse initiatePasswordResetResponse = new InitiatePasswordResetResponse();
|
||||
EmailSendResponse emailSendResponse = emailDao.buildEmailSendResponseFromRequest(request);
|
||||
initiatePasswordResetResponse.setEmailSendResponse(emailSendResponse);
|
||||
saveEmailSendResponseToUser(emailSendResponse,user);
|
||||
return initiatePasswordResetResponse;
|
||||
}
|
||||
|
||||
private void saveEmailSendResponseToUser(EmailSendResponse newResponse, UserEntity user) {
|
||||
List<EmailSendResponse> mergedResponses = Utils.mergeEmailSendResponses(
|
||||
user.getEmailSendResponse(), newResponse
|
||||
);
|
||||
user.setEmailSendResponse(mergedResponses);
|
||||
userRepository.save(user);
|
||||
}
|
||||
|
||||
public void sendResetPasswordTokenEmail(UserEntity user, String token) {
|
||||
|
||||
SystemEmailTemplateResponse emailTemplate = systemEmailTemplatesService.retrieveTemplateByTypeAndCall(
|
||||
|
||||
Reference in New Issue
Block a user