package net.gepafin.tendermanagement.service.impl; import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; import lombok.extern.slf4j.Slf4j; import net.gepafin.tendermanagement.dao.EmailLogDao; import net.gepafin.tendermanagement.entities.EmailLogEntity; import net.gepafin.tendermanagement.enums.EmailServiceTypeEnum; import net.gepafin.tendermanagement.enums.StatusTypeEnum; import net.gepafin.tendermanagement.model.request.EmailConfig; import net.gepafin.tendermanagement.model.request.EmailLogRequest; import net.gepafin.tendermanagement.model.request.PecEmailRequest; import net.gepafin.tendermanagement.util.Utils; import net.gepafin.tendermanagement.util.Validator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.util.List; @Slf4j @Service public class PecEmailService implements EmailService { @Value("${isMailSendingEnabled}") private String isEmailSendingEnabled; @Value("${isPecServiceEnabled}") private String isPecServiceEnabled; @Autowired private Validator validator; @Autowired private EmailLogDao emailLogDao; @Override public void sendEmail(String subject, String body, List recipientEmails, EmailConfig emailConfig, EmailLogRequest emailLogRequest) { if (Boolean.FALSE.equals(Boolean.parseBoolean(isEmailSendingEnabled))) { return; } PecEmailRequest emailRequest = new PecEmailRequest(); emailRequest.setSender(emailConfig.getSender()); emailRequest.setSubject(subject); emailRequest.setBody(body); emailRequest.setUsername(emailConfig.getUsername()); emailRequest.setPassword(emailConfig.getPassword()); emailRequest.setRecipient(recipientEmails); String url=emailConfig.getUrl(); String authToken = emailConfig.getAuthToken(); HttpResponse response2=null; if (Boolean.FALSE.equals(validator.isTestProfileActivated())) { emailLogRequest.setEmailSubject(emailRequest.getSubject()); emailLogRequest.setEmailBody(emailRequest.getBody()); emailLogRequest.setSendStatus(StatusTypeEnum.SUCCESS.getValue()); emailLogRequest.setRecipientEmails(Utils.listToCommaSeparatedString(emailRequest.getRecipient())); try { if (Boolean.TRUE.equals(Boolean.parseBoolean(isPecServiceEnabled))) { Unirest.setTimeouts(0, 0); response2 = Unirest.post(url) .header("Authorization", "Bearer " + authToken) .header("Content-Type", "application/json") .body(Utils.convertObjectToJson(emailRequest)) // Serialize the emailRequest object to JSON .asString(); } }catch(Exception e) { emailLogRequest.setSendStatus(StatusTypeEnum.FAILED.getValue()); emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.PEC_SERVICE); emailLogRequest.setErrorMessage(e.getMessage()); emailLogDao.createEmailLog(emailLogRequest); throw new RuntimeException("Failed to send email via PEC: " + response2.getStatus()); } if(response2 != null) { emailLogRequest.setEmailServiceResponse(response2.getBody()); } } emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.PEC_SERVICE); emailLogDao.createEmailLog(emailLogRequest); } }