package net.gepafin.tendermanagement.dao; import jakarta.servlet.http.HttpServletRequest; import lombok.extern.log4j.Log4j2; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.entities.CallEntity; import net.gepafin.tendermanagement.entities.EmailLogEntity; import net.gepafin.tendermanagement.enums.EmailScenarioTypeEnum; import net.gepafin.tendermanagement.enums.EmailServiceTypeEnum; import net.gepafin.tendermanagement.enums.RecipientTypeEnum; import net.gepafin.tendermanagement.enums.StatusTypeEnum; import net.gepafin.tendermanagement.model.request.EmailLogRequest; import net.gepafin.tendermanagement.model.response.EmailResendResponseBean; import net.gepafin.tendermanagement.model.response.EmailSendResponse; import net.gepafin.tendermanagement.repositories.EmailLogRepository; import net.gepafin.tendermanagement.service.CallService; import net.gepafin.tendermanagement.util.Utils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.util.*; @Component @Log4j2 public class EmailDao { @Autowired EmailLogRepository emailLogRepository; @Autowired EmailNotificationDao emailNotificationDao; @Autowired private CallService callService; @Autowired private EmailLogDao emailLogDao; public EmailResendResponseBean resendEmail(HttpServletRequest request , Long userActionId){ List 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 = emailLogDao.createEmailLogRequest(EmailScenarioTypeEnum.valueOf(log.getEmailType()), RecipientTypeEnum.valueOf(log.getRecipientType()), log.getRecipientId(), log.getRecipientEmails(), log.getUserId(), log.getApplicationId(), log.getAmendmentId(), log.getCallId() ); List recipients = Utils.commaSeparatedStringToList(log.getRecipientEmails()); CallEntity call = callService.validateCall(log.getCallId()); emailNotificationDao.sendMail( call.getHub().getId(), log.getEmailSubject(), log.getEmailBody(), recipients, emailLogRequest ); } EmailSendResponse emailSendResponse = buildEmailSendResponseFromRequest(request); emailResendResponseBean.setEmailSendResponse(emailSendResponse); return emailResendResponseBean; } public EmailSendResponse buildEmailSendResponseFromRequest(HttpServletRequest request) { Long userActionId = (Long) request.getAttribute(GepafinConstant.USER_ACTION_ID); List emailLogs = emailLogRepository.findByUserActionId(userActionId); boolean allSuccess = true; String emailScenario = null; for (EmailLogEntity log : emailLogs) { 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 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; } }