Done ticket GEPAFINBE-92
This commit is contained in:
@@ -1,24 +1,40 @@
|
||||
package net.gepafin.tendermanagement.service.feignClient;
|
||||
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestHeader;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@FeignClient(name = "mailgunClient", url = "${mailGun_base_url}")
|
||||
//@FeignClient(name = "mailgunClient", url = "${mailGun_base_url}")
|
||||
public interface MailgunFeignClient {
|
||||
@PostMapping("/v3/{domain}/messages")
|
||||
ResponseEntity<Void> sendEmail(
|
||||
@PathVariable("domain") String domain,
|
||||
@RequestParam("from") String from,
|
||||
@RequestParam("to") List<String> to,
|
||||
@RequestParam("subject") String subject,
|
||||
@RequestParam("html") String htmlBody,
|
||||
@RequestHeader("Authorization") String authorizationHeader);
|
||||
// @PostMapping(value = "/v3/{domain}/messages", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
// ResponseEntity<Void> sendEmail( @RequestPart("from") String from,
|
||||
// @RequestPart("to") List<String> to,
|
||||
// @RequestPart("subject") String subject,
|
||||
// @RequestPart("text") String htmlBody,
|
||||
// @PathVariable("domain") String domain,
|
||||
//// @RequestBody PayloadDTO dto,
|
||||
// //RequestParam
|
||||
//
|
||||
// @RequestHeader HttpHeaders headers);
|
||||
//
|
||||
// public class PayloadDTO {
|
||||
// public String from;
|
||||
// public List<String> to;
|
||||
// public String subject;
|
||||
// public String htmlBody;
|
||||
//
|
||||
// public PayloadDTO(String from, List<String> to, String subject, String htmlBody) {
|
||||
// this.from = from;
|
||||
// this.to = to;
|
||||
// this.subject = subject;
|
||||
// this.htmlBody = htmlBody;
|
||||
// }
|
||||
//
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -3,15 +3,16 @@ package net.gepafin.tendermanagement.service.feignClient;
|
||||
import feign.Headers;
|
||||
import net.gepafin.tendermanagement.model.request.PecEmailRequest;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestHeader;
|
||||
|
||||
@FeignClient(name = "pecClient", url = "${api.pecUrl}")
|
||||
//@FeignClient(name = "pecClient", url = "${api.pecUrl}")
|
||||
public interface PecFeignClient {
|
||||
@PostMapping("/send")
|
||||
ResponseEntity<Void> sendEmail(@RequestHeader("Authorization") String token,
|
||||
@RequestBody PecEmailRequest emailRequest);
|
||||
// @PostMapping("/send")
|
||||
// ResponseEntity<Void> sendEmail(@RequestHeader HttpHeaders headers,
|
||||
// @RequestBody PecEmailRequest emailRequest);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,16 +1,20 @@
|
||||
package net.gepafin.tendermanagement.service.impl;
|
||||
|
||||
import com.mashape.unirest.http.HttpResponse;
|
||||
import com.mashape.unirest.http.Unirest;
|
||||
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
||||
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.service.feignClient.MailgunFeignClient;
|
||||
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.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Base64;
|
||||
@@ -18,9 +22,6 @@ import java.util.List;
|
||||
|
||||
@Service
|
||||
public class MailgunEmailService implements EmailService {
|
||||
|
||||
@Autowired
|
||||
private MailgunFeignClient mailgunFeignClient;
|
||||
|
||||
@Value("${isMailSendingEnabled}")
|
||||
private String isEmailSendingEnabled;
|
||||
@@ -38,21 +39,36 @@ public class MailgunEmailService implements EmailService {
|
||||
return;
|
||||
}
|
||||
|
||||
String domain = emailConfig.getDomain();
|
||||
String url = emailConfig.getUrl();
|
||||
String from = emailConfig.getSender();
|
||||
String apiKey = emailConfig.getApiKey();
|
||||
String authHeader = "Basic " + Base64.getEncoder().encodeToString(("api:" + apiKey).getBytes());
|
||||
|
||||
// Send email via Mailgun API
|
||||
HttpResponse<String> response2=null;
|
||||
if (Boolean.FALSE.equals(validator.isTestProfileActivated())) {
|
||||
ResponseEntity<Void> response = mailgunFeignClient.sendEmail(domain, from, recipientEmails, subject, body, authHeader);
|
||||
if (!response.getStatusCode().is2xxSuccessful()) {
|
||||
|
||||
emailLogRequest.setRecipientEmails(Utils.listToCommaSeparatedString(recipientEmails));
|
||||
try {
|
||||
Unirest.setTimeouts(0, 0);
|
||||
response2 = Unirest.post(url)
|
||||
.header("Authorization", authHeader)
|
||||
// .header("content-type", "multipart/form-data")
|
||||
.field("from", from)
|
||||
.field("to", recipientEmails)
|
||||
.field("subject", subject)
|
||||
.field("html", body)
|
||||
.asString();
|
||||
}catch(Exception e) {
|
||||
emailLogRequest.setSendStatus(StatusTypeEnum.FAILED.getValue());
|
||||
emailLogRequest.setErrorMessage(String.valueOf(response.getStatusCode()));
|
||||
emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.MAILGUN);
|
||||
emailLogRequest.setErrorMessage(e.getMessage());
|
||||
EmailLogEntity emailLogEntity= emailLogDao.createEmailLog(emailLogRequest);
|
||||
throw new RuntimeException("Failed to send email via Mailgun: " + response.getStatusCode());
|
||||
throw new RuntimeException("Failed to send email via Mailgun: " + response2.getStatus());
|
||||
}
|
||||
emailLogRequest.setEmailServiceResponse(response2.getBody());
|
||||
}
|
||||
emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.MAILGUN);
|
||||
EmailLogEntity emailLogEntity= emailLogDao.createEmailLog(emailLogRequest);
|
||||
|
||||
}
|
||||
|
||||
@@ -1,17 +1,25 @@
|
||||
package net.gepafin.tendermanagement.service.impl;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.mashape.unirest.http.HttpResponse;
|
||||
import com.mashape.unirest.http.Unirest;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
||||
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.service.feignClient.PecFeignClient;
|
||||
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.http.HttpHeaders;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@@ -20,12 +28,6 @@ import java.util.List;
|
||||
@Slf4j
|
||||
@Service
|
||||
public class PecEmailService implements EmailService {
|
||||
private final PecFeignClient pecFeignClient;
|
||||
|
||||
public PecEmailService(PecFeignClient pecFeignClient) {
|
||||
|
||||
this.pecFeignClient = pecFeignClient;
|
||||
}
|
||||
|
||||
@Value("${isMailSendingEnabled}")
|
||||
private String isEmailSendingEnabled;
|
||||
@@ -45,23 +47,33 @@ public class PecEmailService implements EmailService {
|
||||
|
||||
PecEmailRequest emailRequest = new PecEmailRequest();
|
||||
emailRequest.setSender(emailConfig.getSender());
|
||||
emailRequest.setRecipient(recipientEmails);
|
||||
|
||||
emailRequest.setSubject(subject);
|
||||
emailRequest.setBody(body);
|
||||
emailRequest.setUsername(emailConfig.getUsername());
|
||||
emailRequest.setPassword(emailConfig.getPassword());
|
||||
|
||||
String url=emailConfig.getUrl();
|
||||
String authToken = emailConfig.getAuthToken();
|
||||
HttpResponse<String> response2=null;
|
||||
if (Boolean.FALSE.equals(validator.isTestProfileActivated())) {
|
||||
ResponseEntity<Void> response = pecFeignClient.sendEmail("Bearer " + authToken, emailRequest);
|
||||
log.info("Mail response status: {}, headers: {}, body: {}", response.getStatusCode(), response.getHeaders(), response.getBody());
|
||||
if (!response.getStatusCode().is2xxSuccessful()) {
|
||||
emailLogRequest.setRecipientEmails(Utils.listToCommaSeparatedString(emailRequest.getRecipient()));
|
||||
try {
|
||||
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.setErrorMessage(String.valueOf(response.getStatusCode()));
|
||||
emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.PEC);
|
||||
emailLogRequest.setErrorMessage(e.getMessage());
|
||||
EmailLogEntity emailLogEntity= emailLogDao.createEmailLog(emailLogRequest);
|
||||
throw new RuntimeException("Failed to send email via PEC: " + response.getStatusCode());
|
||||
}
|
||||
throw new RuntimeException("Failed to send email via PEC: " + response2.getStatus());
|
||||
}
|
||||
emailLogRequest.setEmailServiceResponse(response2.getBody());
|
||||
}
|
||||
emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.PEC);
|
||||
EmailLogEntity emailLogEntity= emailLogDao.createEmailLog(emailLogRequest);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user