Fixed Issue with Resend Email API
This commit is contained in:
@@ -5,9 +5,7 @@ import jakarta.servlet.http.HttpServletRequest;
|
|||||||
import lombok.extern.log4j.Log4j2;
|
import lombok.extern.log4j.Log4j2;
|
||||||
import net.gepafin.tendermanagement.config.Translator;
|
import net.gepafin.tendermanagement.config.Translator;
|
||||||
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
||||||
import net.gepafin.tendermanagement.entities.CallEntity;
|
import net.gepafin.tendermanagement.entities.*;
|
||||||
import net.gepafin.tendermanagement.entities.EmailLogEntity;
|
|
||||||
import net.gepafin.tendermanagement.entities.UserActionEntity;
|
|
||||||
import net.gepafin.tendermanagement.enums.EmailScenarioTypeEnum;
|
import net.gepafin.tendermanagement.enums.EmailScenarioTypeEnum;
|
||||||
import net.gepafin.tendermanagement.enums.EmailServiceTypeEnum;
|
import net.gepafin.tendermanagement.enums.EmailServiceTypeEnum;
|
||||||
import net.gepafin.tendermanagement.enums.RecipientTypeEnum;
|
import net.gepafin.tendermanagement.enums.RecipientTypeEnum;
|
||||||
@@ -15,8 +13,7 @@ import net.gepafin.tendermanagement.enums.StatusTypeEnum;
|
|||||||
import net.gepafin.tendermanagement.model.request.EmailLogRequest;
|
import net.gepafin.tendermanagement.model.request.EmailLogRequest;
|
||||||
import net.gepafin.tendermanagement.model.response.EmailResendResponseBean;
|
import net.gepafin.tendermanagement.model.response.EmailResendResponseBean;
|
||||||
import net.gepafin.tendermanagement.model.response.EmailSendResponse;
|
import net.gepafin.tendermanagement.model.response.EmailSendResponse;
|
||||||
import net.gepafin.tendermanagement.repositories.EmailLogRepository;
|
import net.gepafin.tendermanagement.repositories.*;
|
||||||
import net.gepafin.tendermanagement.repositories.UserActionsRepository;
|
|
||||||
import net.gepafin.tendermanagement.service.CallService;
|
import net.gepafin.tendermanagement.service.CallService;
|
||||||
import net.gepafin.tendermanagement.util.Utils;
|
import net.gepafin.tendermanagement.util.Utils;
|
||||||
import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException;
|
import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException;
|
||||||
@@ -47,6 +44,15 @@ public class EmailDao {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private UserActionsRepository userActionsRepository;
|
private UserActionsRepository userActionsRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ApplicationAmendmentRequestRepository applicationAmendmentRequestRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UserRepository userRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ApplicationEvaluationRepository applicationEvaluationRepository;
|
||||||
|
|
||||||
public EmailResendResponseBean resendEmail(HttpServletRequest request , Long userActionId){
|
public EmailResendResponseBean resendEmail(HttpServletRequest request , Long userActionId){
|
||||||
UserActionEntity userActionEntity = userActionsRepository.findUserActionByIdAndIsDeletedFalse(userActionId);
|
UserActionEntity userActionEntity = userActionsRepository.findUserActionByIdAndIsDeletedFalse(userActionId);
|
||||||
if(userActionEntity == null){
|
if(userActionEntity == null){
|
||||||
@@ -82,9 +88,90 @@ public class EmailDao {
|
|||||||
}
|
}
|
||||||
EmailSendResponse emailSendResponse = buildEmailSendResponseFromRequest(request);
|
EmailSendResponse emailSendResponse = buildEmailSendResponseFromRequest(request);
|
||||||
emailResendResponseBean.setEmailSendResponse(emailSendResponse);
|
emailResendResponseBean.setEmailSendResponse(emailSendResponse);
|
||||||
|
|
||||||
|
if (Boolean.TRUE.equals(emailSendResponse.getIsEmailSend())){
|
||||||
|
updateEmailSendStatusIfSuccessful(emailSendResponse);
|
||||||
|
}
|
||||||
return emailResendResponseBean;
|
return emailResendResponseBean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateEmailSendStatusIfSuccessful(EmailSendResponse emailSendResponse){
|
||||||
|
Long actionId = emailSendResponse.getUserActionId();
|
||||||
|
|
||||||
|
EmailLogEntity emailLog = emailLogRepository.findTopByUserActionIdAndEmailServiceTypeAndSendStatusOrderByIdDesc(
|
||||||
|
actionId,
|
||||||
|
EmailServiceTypeEnum.PEC_SERVICE.getValue(),
|
||||||
|
StatusTypeEnum.SUCCESS.getValue()
|
||||||
|
);
|
||||||
|
if (emailLog != null) {
|
||||||
|
switch (emailSendResponse.getEmailScenario()) {
|
||||||
|
case APPLICATION_AMENDMENT_REQUESTED:
|
||||||
|
case APPLICATION_AMENDMENT_REMINDER:
|
||||||
|
updateApplicationAmendmentStatus(emailLog, emailSendResponse.getEmailScenario().getValue());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USER_CREATION:
|
||||||
|
case PASSWORD_RESET_REQUEST:
|
||||||
|
updateUserEmailStatus(emailLog, emailSendResponse.getEmailScenario().getValue());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case APPLICATION_ADMISSIBLE:
|
||||||
|
case APPLICATION_REJECTED:
|
||||||
|
updateApplicationEvaluationStatus(emailLog, emailSendResponse.getEmailScenario().getValue());
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
log.warn("Unhandled email scenario: {}", emailSendResponse.getEmailScenario());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateApplicationAmendmentStatus(EmailLogEntity log, String scenario) {
|
||||||
|
if (log.getAmendmentId() != null) {
|
||||||
|
applicationAmendmentRequestRepository.findById(log.getAmendmentId()).ifPresent(amendment -> {
|
||||||
|
if (updateEmailSendResponse(amendment.getEmailSendResponse(), scenario)) {
|
||||||
|
applicationAmendmentRequestRepository.save(amendment);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateApplicationEvaluationStatus(EmailLogEntity log, String scenario) {
|
||||||
|
if (log.getApplicationId() != null) {
|
||||||
|
ApplicationEvaluationEntity evaluation = applicationEvaluationRepository.findByApplicationId(log.getApplicationId());
|
||||||
|
if (evaluation != null && updateEmailSendResponse(evaluation.getEmailSendResponse(), scenario)) {
|
||||||
|
applicationEvaluationRepository.save(evaluation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateUserEmailStatus(EmailLogEntity log, String scenario) {
|
||||||
|
if (log.getUserId() != null) {
|
||||||
|
userRepository.findById(log.getUserId()).ifPresent(user -> {
|
||||||
|
if (updateEmailSendResponse(user.getEmailSendResponse(), scenario)) {
|
||||||
|
userRepository.save(user);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private boolean updateEmailSendResponse(List<EmailSendResponse> responses, String scenario) {
|
||||||
|
if (responses == null || responses.isEmpty()) return false;
|
||||||
|
|
||||||
|
for (EmailSendResponse response : responses) {
|
||||||
|
if (scenario.equals(response.getEmailScenario().getValue())) {
|
||||||
|
response.setIsEmailSend(true);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public EmailSendResponse buildEmailSendResponseFromRequest(HttpServletRequest request) {
|
public EmailSendResponse buildEmailSendResponseFromRequest(HttpServletRequest request) {
|
||||||
Long userActionId = (Long) request.getAttribute(GepafinConstant.USER_ACTION_ID);
|
Long userActionId = (Long) request.getAttribute(GepafinConstant.USER_ACTION_ID);
|
||||||
List<EmailLogEntity> emailLogs = emailLogRepository.findByUserActionIdAndEmailServiceType(userActionId,EmailServiceTypeEnum.PEC_SERVICE.getValue());
|
List<EmailLogEntity> emailLogs = emailLogRepository.findByUserActionIdAndEmailServiceType(userActionId,EmailServiceTypeEnum.PEC_SERVICE.getValue());
|
||||||
|
|||||||
@@ -76,5 +76,10 @@ public interface ApplicationEvaluationRepository extends JpaRepository<Applicati
|
|||||||
@Param("assignedApplicationId") Long assignedApplicationId
|
@Param("assignedApplicationId") Long assignedApplicationId
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@Query("SELECT ae FROM ApplicationEvaluationEntity ae WHERE ae.applicationId = :applicationId AND ae.isDeleted = false")
|
||||||
|
ApplicationEvaluationEntity findByApplicationId(@Param("applicationId") Long applicationId);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,5 +17,12 @@ public interface EmailLogRepository extends JpaRepository<EmailLogEntity,Long> {
|
|||||||
List<EmailLogEntity> findByUserActionIdAndEmailServiceType(
|
List<EmailLogEntity> findByUserActionIdAndEmailServiceType(
|
||||||
Long userActionId, String emailServiceType);
|
Long userActionId, String emailServiceType);
|
||||||
|
|
||||||
|
EmailLogEntity findTopByUserActionIdAndEmailServiceTypeAndSendStatusOrderByIdDesc(
|
||||||
|
Long userActionId,
|
||||||
|
String emailServiceType,
|
||||||
|
String sendStatus
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user