Done ticket

This commit is contained in:
nisha
2024-11-12 18:11:15 +05:30
parent 256fa6c49e
commit 50c1f0b800
18 changed files with 411 additions and 36 deletions

View File

@@ -9,10 +9,7 @@ import net.gepafin.tendermanagement.config.Translator;
import net.gepafin.tendermanagement.constants.GepafinConstant;
import net.gepafin.tendermanagement.entities.*;
import net.gepafin.tendermanagement.enums.*;
import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequest;
import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequestBean;
import net.gepafin.tendermanagement.model.request.ApplicationFormFieldRequestBean;
import net.gepafin.tendermanagement.model.request.CloseAmendmentRequest;
import net.gepafin.tendermanagement.model.request.*;
import net.gepafin.tendermanagement.model.response.*;
import net.gepafin.tendermanagement.repositories.*;
import net.gepafin.tendermanagement.service.*;
@@ -98,6 +95,9 @@ public class ApplicationAmendmentRequestDao {
@Autowired
private Validator validator;
@Autowired
private EmailLogDao emailLogDao;
public ApplicationAmendmentRequestResponse getApplicationDataForAmendment(Long applicationEvaluationId) {
log.info("Fetching the application data for the Amendment process {}", applicationEvaluationId);
ApplicationEvaluationEntity applicationEvaluationEntity = applicationEvaluationService.validateApplicationEvaluation(applicationEvaluationId);
@@ -579,7 +579,8 @@ public class ApplicationAmendmentRequestDao {
String body = prepareBody(emailTemplate, amendment, beneficiaryUser);
String email = beneficiaryUser.getEmail();
if (Boolean.TRUE.equals(amendment.getIsEmail())&&email != null && !email.isEmpty()) {
emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(email));
EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(SystemEmailTemplatesEntityTypeEnum.AMENDMENT_REMINDER.getValue(),RecipientTypeEnum.BENEFICIARY,beneficiaryUser.getId(),subject,body,StatusTypeEnum.SUCCESS.getValue(), null,amendment.getId(),EmailTrackingEntityTypeEnum.AMENDMENT,beneficiaryUser);
emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(email),emailLogRequest);
} else {
throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.BENEFICIARY_EMAIL_NOT_FOUND_MSG));
}

View File

@@ -4,15 +4,11 @@ import net.gepafin.tendermanagement.config.Translator;
import net.gepafin.tendermanagement.constants.GepafinConstant;
import net.gepafin.tendermanagement.entities.*;
import net.gepafin.tendermanagement.entities.SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum;
import net.gepafin.tendermanagement.enums.ApplicationSignedDocumentStatusEnum;
import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
import net.gepafin.tendermanagement.enums.DocOtherSourceTypeEnum;
import net.gepafin.tendermanagement.enums.DocumentSourceTypeEnum;
import net.gepafin.tendermanagement.enums.RoleStatusEnum;
import net.gepafin.tendermanagement.enums.UserCompanyDelegationStatusEnum;
import net.gepafin.tendermanagement.enums.*;
import net.gepafin.tendermanagement.model.request.ApplicationFormFieldRequestBean;
import net.gepafin.tendermanagement.model.request.ApplicationRequest;
import net.gepafin.tendermanagement.model.request.ApplicationRequestBean;
import net.gepafin.tendermanagement.model.request.EmailLogRequest;
import net.gepafin.tendermanagement.model.response.*;
import net.gepafin.tendermanagement.repositories.*;
import net.gepafin.tendermanagement.service.AmazonS3Service;
@@ -138,6 +134,9 @@ public class ApplicationDao {
@Autowired
private EmailNotificationDao emailNotificationDao;
@Autowired
private EmailLogDao emailLogDao;
public ApplicationResponseBean createApplication(HttpServletRequest request, ApplicationRequestBean applicationRequestBean, Long formId, Long applicationId) {
FormEntity formEntity = formService.validateForm(formId);
// callService.validatePublishedCall(formEntity.getCall().getId());
@@ -734,7 +733,8 @@ public class ApplicationDao {
if (userEntity.getBeneficiary() != null) {
email = userEntity.getBeneficiary().getEmail();
}
emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(email));
EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(SystemEmailTemplatesEntityTypeEnum.APPLICATION_SUBMISSION_TO_USER_AND_COMPANY.getValue(),RecipientTypeEnum.BENEFICIARY,userEntity.getId(),subject,body, StatusTypeEnum.SUCCESS.getValue(), null,applicationEntity.getId(),EmailTrackingEntityTypeEnum.APPLICATION,userEntity);
emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(email),emailLogRequest);
List<String> recipientEmails = new ArrayList<>();
recipientEmails.add(email);
String companyEmail = company.getEmail();
@@ -747,7 +747,7 @@ public class ApplicationDao {
if (contactEmail != null && !contactEmail.isEmpty() && !contactEmail.equals(companyEmail)) {
recipientEmails.add(contactEmail);
}
emailNotificationDao.sendMail(hub.getId(), subject, body, recipientEmails);
emailNotificationDao.sendMail(hub.getId(), subject, body, recipientEmails,emailLogRequest);
}
private void sendMailTodefaultSystemAndGepafin(UserEntity userEntity, ApplicationEntity applicationEntity) {
CallEntity call = applicationEntity.getCall();
@@ -774,17 +774,18 @@ public class ApplicationDao {
String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders);
String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders);
EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(SystemEmailTemplatesEntityTypeEnum.APPLICATION_SUBMISSION_TO_GEPAFIN.getValue(),RecipientTypeEnum.BENEFICIARY,userEntity.getId(),subject,body,StatusTypeEnum.SUCCESS.getValue(), null,applicationEntity.getId(),EmailTrackingEntityTypeEnum.APPLICATION,userEntity);
// mailUtil.sendByMailGun(subject, body, List.of(defaultSystemReceiverEmail), null);
// mailUtil.sendByMailGun(subject, body, List.of(gepafinEmail), null);
// mailUtil.sendByMailGun(subject, body, List.of(rinaldoEmail), null);
if(validator.isProductionProfileActivated()) {
// mailUtil.sendByMailGun(subject, body, List.of(carloEmail), null);
emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(carloEmail));
emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(carloEmail),emailLogRequest);
}
emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(gepafinEmail));
emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(defaultSystemReceiverEmail));
emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(rinaldoEmail));
emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(gepafinEmail),emailLogRequest);
emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(defaultSystemReceiverEmail),emailLogRequest);
emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(rinaldoEmail),emailLogRequest);
}
public ApplicationSignedDocumentResponse uploadSignedDocument(HttpServletRequest request, Long applicationId,

View File

@@ -0,0 +1,79 @@
package net.gepafin.tendermanagement.dao;
import net.gepafin.tendermanagement.entities.EmailLogEntity;
import net.gepafin.tendermanagement.entities.EmailTrackingEntity;
import net.gepafin.tendermanagement.entities.UserEntity;
import net.gepafin.tendermanagement.enums.EmailTrackingEntityTypeEnum;
import net.gepafin.tendermanagement.enums.RecipientTypeEnum;
import net.gepafin.tendermanagement.enums.StatusTypeEnum;
import net.gepafin.tendermanagement.model.request.EmailLogRequest;
import net.gepafin.tendermanagement.repositories.EmailLogRepository;
import net.gepafin.tendermanagement.repositories.EmailTrackingRepository;
import net.gepafin.tendermanagement.util.DateTimeUtil;
import net.gepafin.tendermanagement.util.FieldValidator;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
@Component
public class EmailLogDao {
@Autowired
private EmailLogRepository emailLogRepository;
@Autowired
private EmailTrackingRepository emailTrackingRepository;
public EmailLogEntity createEmailLog(EmailLogRequest emailLogRequest){
EmailLogEntity emailLogEntity=new EmailLogEntity();
emailLogEntity.setEmailType(emailLogRequest.getEmailType());
emailLogEntity.setRecipientType(emailLogRequest.getRecipientType().getValue());
emailLogEntity.setRecipientId(emailLogRequest.getRecipientId());
emailLogEntity.setEmailSubject(emailLogRequest.getEmailSubject());
emailLogEntity.setEmailBody(emailLogRequest.getEmailBody());
emailLogEntity.setSendStatus(emailLogRequest.getSendStatus());
emailLogEntity.setSendDateTime(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); // Set to now if null
emailLogEntity.setErrorMessage(emailLogRequest.getErrorMessage());
emailLogEntity=saveEmailLogEntity(emailLogEntity);
if(emailLogRequest.getEntityId()!=null && emailLogRequest.getEntityId()>0){
EmailTrackingEntity emailTrackingEntity=createEmailTrackingEntity(emailLogEntity,emailLogRequest);
if(emailTrackingEntity==null){
emailLogEntity.setErrorMessage("Failed while creating email tracking entity");
emailLogEntity.setSendStatus(StatusTypeEnum.FAILED.getValue());
emailLogEntity=saveEmailLogEntity(emailLogEntity);
}
}
return emailLogEntity;
}
public EmailLogEntity saveEmailLogEntity(EmailLogEntity emailLogEntity){
return emailLogRepository.save(emailLogEntity);
}
public EmailTrackingEntity createEmailTrackingEntity(EmailLogEntity emailLogEntity,EmailLogRequest emailLogRequest){
EmailTrackingEntity emailTrackingEntity=new EmailTrackingEntity();
emailTrackingEntity.setEmailLog(emailLogEntity);
emailTrackingEntity.setEntityId(emailLogRequest.getEntityId());
emailTrackingEntity.setEntityType(emailLogRequest.getEntitytype().getValue());
emailTrackingEntity.setUser(emailLogRequest.getUser());
emailTrackingRepository.save(emailTrackingEntity);
return emailTrackingEntity;
}
public EmailLogRequest createEmailLogRequest(String emailType, RecipientTypeEnum recipientType, Long recipientId,
String emailSubject, String emailBody, String sendStatus,
String errorMessage, Long entityId, EmailTrackingEntityTypeEnum entityType, UserEntity user) {
EmailLogRequest emailLogRequest = new EmailLogRequest();
emailLogRequest.setEmailType(emailType);
emailLogRequest.setRecipientType(recipientType);
emailLogRequest.setRecipientId(recipientId);
emailLogRequest.setEmailSubject(emailSubject);
emailLogRequest.setEmailBody(emailBody);
emailLogRequest.setSendStatus(sendStatus);
emailLogRequest.setErrorMessage(errorMessage);
emailLogRequest.setEntityId(entityId);
emailLogRequest.setEntitytype(entityType);
emailLogRequest.setUser(user);
return emailLogRequest;
}
}

View File

@@ -4,14 +4,16 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import net.gepafin.tendermanagement.constants.GepafinConstant;
import net.gepafin.tendermanagement.entities.ApplicationAmendmentRequestEntity;
import net.gepafin.tendermanagement.entities.ApplicationEntity;
import net.gepafin.tendermanagement.entities.HubEntity;
import net.gepafin.tendermanagement.entities.SystemEmailTemplatesEntity;
import net.gepafin.tendermanagement.entities.UserEntity;
import net.gepafin.tendermanagement.entities.*;
import net.gepafin.tendermanagement.enums.EmailTrackingEntityTypeEnum;
import net.gepafin.tendermanagement.enums.RecipientTypeEnum;
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.response.SystemEmailTemplateResponse;
import net.gepafin.tendermanagement.repositories.CallRepository;
import net.gepafin.tendermanagement.repositories.EmailLogRepository;
import net.gepafin.tendermanagement.repositories.EmailTrackingRepository;
import net.gepafin.tendermanagement.repositories.HubRepository;
import net.gepafin.tendermanagement.service.ApplicationService;
import net.gepafin.tendermanagement.service.HubService;
@@ -27,10 +29,8 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.time.LocalDateTime;
import java.util.*;
@Component
public class EmailNotificationDao {
@@ -58,6 +58,15 @@ public class EmailNotificationDao {
@Autowired
HubRepository hubRepository;
@Autowired
private EmailLogDao emailLogDao;
@Autowired
private EmailTrackingRepository emailTrackingRepository;
@Autowired
private EmailLogRepository emailLogRepository;
private void sendEmail(ApplicationAmendmentRequestEntity amendmentRequest, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum templateType,
Map<String, String> bodyPlaceholders, List<String> additionalRecipients) {
@@ -77,7 +86,9 @@ public class EmailNotificationDao {
UserEntity userEntity = userService.validateUser(applicationEntity.getUserId());
List<String> recipientEmails = getRecipientEmails(applicationEntity, userEntity, additionalRecipients);
sendMail(applicationEntity.getHubId(), subject, body, recipientEmails);
EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(String.valueOf(templateType), RecipientTypeEnum.BENEFICIARY,userEntity.getId(),subject,body, StatusTypeEnum.SUCCESS.getValue(), null, amendmentRequest.getId(), EmailTrackingEntityTypeEnum.AMENDMENT,userEntity);
sendMail(applicationEntity.getHubId(), subject, body, recipientEmails,emailLogRequest);
}
private List<String> getRecipientEmails(ApplicationEntity applicationEntity, UserEntity userEntity, List<String> additionalRecipients) {
List<String> recipientEmails = new ArrayList<>();
@@ -142,9 +153,20 @@ public class EmailNotificationDao {
public void sendApplicationFailureNotificationEmail(ApplicationAmendmentRequestEntity amendmentRequest) {
ApplicationEntity applicationEntity = applicationService.validateApplication(amendmentRequest.getApplicationId());
UserEntity user = userService.validateUser(applicationEntity.getUserId());
Map<String, String> bodyPlaceholders = new HashMap<>();
bodyPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName());
bodyPlaceholders.put("{{date_time_emailSend}}", DateTimeUtil.formatLocalDateTime(amendmentRequest.getCreatedDate(), GepafinConstant.DD_MM_YYYY_HH_MM));
LocalDateTime lastReminderDateTime=amendmentRequest.getCreatedDate();
List<EmailTrackingEntity> emailTrackingEntity=emailTrackingRepository.findFirstByEntityTypeAndEntityIdAndUser(EmailTrackingEntityTypeEnum.AMENDMENT.getValue(), amendmentRequest.getId(),user);
if(emailTrackingEntity != null && (!emailTrackingEntity.isEmpty())) {
EmailTrackingEntity emailTrackingEntity1=emailTrackingEntity.get(0);
List<EmailLogEntity> emailLogEntity = emailLogRepository.findByIdAndEmailTypeOrderByCreatedDateDesc(emailTrackingEntity1.getId(), SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.DOCUMENTATION_INTEGRATION_REQUEST.getValue());
if(emailLogEntity!=null && (!emailLogEntity.isEmpty())){
EmailLogEntity emailLogEntity1=emailLogEntity.get(0);
lastReminderDateTime=emailLogEntity1.getSendDateTime();
}
}
bodyPlaceholders.put("{{date_time_emailSend}}", DateTimeUtil.formatLocalDateTime(lastReminderDateTime, GepafinConstant.DD_MM_YYYY));
sendEmail(amendmentRequest, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE, bodyPlaceholders, null);
}
@@ -174,11 +196,11 @@ public class EmailNotificationDao {
sendEmail(amendmentRequest, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.INADMISSIBILITY_TEMPLATE, bodyPlaceholders, null);
}
public void sendMail(Long hubId, String subject, String body, List<String> recipientEmails) {
public void sendMail(Long hubId, String subject, String body, List<String> recipientEmails, EmailLogRequest emailLogRequest) {
EmailConfig emailConfig = retrieveEmailConfig(hubId);
EmailService emailService = emailServiceFactory.getEmailService(emailConfig.getEmailServiceType());
emailService.sendEmail(subject, body, recipientEmails, emailConfig);
emailService.sendEmail(subject, body, recipientEmails, emailConfig,emailLogRequest);
}
public EmailConfig retrieveEmailConfig(Long hubId) {

View File

@@ -0,0 +1,37 @@
package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*;
import lombok.Data;
import java.time.LocalDateTime;
@Entity
@Data
@Table(name = "email_log")
public class EmailLogEntity extends BaseEntity{
@Column(name = "email_type", nullable = false, length = 255)
private String emailType;
@Column(name = "recipient_type", nullable = false, columnDefinition = "TEXT")
private String recipientType;
@Column(name = "recipient_id", nullable = false)
private Long recipientId;
@Column(name = "email_subject", columnDefinition = "TEXT")
private String emailSubject;
@Column(name = "email_body", columnDefinition = "TEXT")
private String emailBody;
@Column(name = "send_status", length = 255)
private String sendStatus;
@Column(name = "send_date_time")
private LocalDateTime sendDateTime;
@Column(name = "error_message", columnDefinition = "TEXT")
private String errorMessage;
}

View File

@@ -0,0 +1,27 @@
package net.gepafin.tendermanagement.entities;
import jakarta.persistence.*;
import lombok.Data;
import java.time.LocalDateTime;
@Entity
@Data
@Table(name = "email_tracking")
public class EmailTrackingEntity extends BaseEntity{
@ManyToOne
@JoinColumn(name = "email_log_id", nullable = false, foreignKey = @ForeignKey(name = "fk_email_log_id"))
private EmailLogEntity emailLog;
@ManyToOne
@JoinColumn(name = "user_id", nullable = false, foreignKey = @ForeignKey(name = "fk_user_id"))
private UserEntity user;
@Column(name = "entity_id", nullable = false)
private Long entityId;
@Column(name = "entity_type", nullable = false, length = 255)
private String entityType;
}

View File

@@ -0,0 +1,20 @@
package net.gepafin.tendermanagement.enums;
import com.fasterxml.jackson.annotation.JsonValue;
public enum EmailTrackingEntityTypeEnum {
AMENDMENT("AMENDMENT"),
APPLICATION("APPLICATION");
private String value;
EmailTrackingEntityTypeEnum(String value) {
this.value = value;
}
@JsonValue
public String getValue() {
return value;
}
}

View File

@@ -0,0 +1,21 @@
package net.gepafin.tendermanagement.enums;
import com.fasterxml.jackson.annotation.JsonValue;
public enum RecipientTypeEnum {
BENEFICIARY ("BENEFICIARY"),
USER("USER"),
COMPANY("COMPANY");
private String value;
RecipientTypeEnum(String value) {
this.value = value;
}
@JsonValue
public String getValue() {
return value;
}
}

View File

@@ -0,0 +1,20 @@
package net.gepafin.tendermanagement.enums;
import com.fasterxml.jackson.annotation.JsonValue;
public enum StatusTypeEnum {
SUCCESS ("SUCCESS"),
FAILED("FAILED");
private String value;
StatusTypeEnum(String value) {
this.value = value;
}
@JsonValue
public String getValue() {
return value;
}
}

View File

@@ -0,0 +1,31 @@
package net.gepafin.tendermanagement.model.request;
import jakarta.persistence.Column;
import lombok.Data;
import net.gepafin.tendermanagement.entities.UserEntity;
import net.gepafin.tendermanagement.enums.EmailTrackingEntityTypeEnum;
import net.gepafin.tendermanagement.enums.RecipientTypeEnum;
@Data
public class EmailLogRequest {
private String emailType;
private RecipientTypeEnum recipientType;
private Long recipientId;
private String emailSubject;
private String emailBody;
private String sendStatus;
private String errorMessage;
private Long entityId;
private EmailTrackingEntityTypeEnum entitytype;
private UserEntity user;
}

View File

@@ -0,0 +1,16 @@
package net.gepafin.tendermanagement.model.request;
import lombok.Data;
import net.gepafin.tendermanagement.entities.EmailLogEntity;
@Data
public class EmailTrackingRequest {
private EmailLogEntity emailLogEntity;
private Long userId;
private Long entityId;
private String entityType;
}

View File

@@ -0,0 +1,11 @@
package net.gepafin.tendermanagement.repositories;
import net.gepafin.tendermanagement.entities.EmailLogEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface EmailLogRepository extends JpaRepository<EmailLogEntity,Long> {
List<EmailLogEntity> findByIdAndEmailTypeOrderByCreatedDateDesc(Long id, String emailType);
}

View File

@@ -0,0 +1,16 @@
package net.gepafin.tendermanagement.repositories;
import net.gepafin.tendermanagement.entities.EmailTrackingEntity;
import net.gepafin.tendermanagement.entities.UserEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface EmailTrackingRepository extends JpaRepository<EmailTrackingEntity,Long> {
List<EmailTrackingEntity> findFirstByEntityTypeAndEntityIdAndUser(
String entityType, Long entityId, UserEntity user
);
}

View File

@@ -41,8 +41,8 @@ public class NotificationScheduler {
ApplicationAmendmentRequestEntity amendmentRequest = getAmendmentRequestForApplication(application, amendmentRequestList);
if (amendmentRequest != null) {
LocalDateTime requestDate = amendmentRequest.getCreatedDate();
if (requestDate.plusDays(amendmentRequest.getResponseDays()).isAfter(today)) {
LocalDateTime requestDate = amendmentRequest.getStartDate();
if (requestDate.plusDays(amendmentRequest.getResponseDays()).isBefore(today)) {
// Update the application status to REJECTED
application.setStatus("REJECTED");
applicationRepository.save(application);
@@ -56,6 +56,6 @@ public class NotificationScheduler {
private ApplicationAmendmentRequestEntity getAmendmentRequestForApplication(ApplicationEntity application, List<ApplicationAmendmentRequestEntity> amendmentRequestList) {
return amendmentRequestList.stream().filter(request -> request.getId().equals(application.getId())).findFirst().orElse(null);
return amendmentRequestList.stream().filter(request -> request.getApplicationId().equals(application.getId())).findFirst().orElse(null);
}
}

View File

@@ -1,11 +1,12 @@
package net.gepafin.tendermanagement.service.impl;
import net.gepafin.tendermanagement.model.request.EmailConfig;
import net.gepafin.tendermanagement.model.request.EmailLogRequest;
import java.util.List;
public interface EmailService {
void sendEmail(String subject, String body, List<String> recipientEmails, EmailConfig emailConfig);
void sendEmail(String subject, String body, List<String> recipientEmails, EmailConfig emailConfig, EmailLogRequest emailLogRequest);
}

View File

@@ -1,6 +1,10 @@
package net.gepafin.tendermanagement.service.impl;
import net.gepafin.tendermanagement.dao.EmailLogDao;
import net.gepafin.tendermanagement.entities.EmailLogEntity;
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 org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
@@ -15,8 +19,11 @@ public class MailgunEmailService implements EmailService {
@Autowired
private MailgunFeignClient mailgunFeignClient;
@Autowired
private EmailLogDao emailLogDao;
@Override
public void sendEmail(String subject, String body, List<String> recipientEmails, EmailConfig emailConfig) {
public void sendEmail(String subject, String body, List<String> recipientEmails, EmailConfig emailConfig, EmailLogRequest emailLogRequest) {
String domain = emailConfig.getDomain();
String from = emailConfig.getSender();
String apiKey = emailConfig.getApiKey();
@@ -25,8 +32,13 @@ public class MailgunEmailService implements EmailService {
// Send email via Mailgun API
ResponseEntity<Void> response = mailgunFeignClient.sendEmail(domain, from, recipientEmails, subject, body, authHeader);
if (!response.getStatusCode().is2xxSuccessful()) {
emailLogRequest.setSendStatus(StatusTypeEnum.FAILED.getValue());
emailLogRequest.setErrorMessage(String.valueOf(response.getStatusCode()));
EmailLogEntity emailLogEntity= emailLogDao.createEmailLog(emailLogRequest);
throw new RuntimeException("Failed to send email via Mailgun: " + response.getStatusCode());
}
EmailLogEntity emailLogEntity= emailLogDao.createEmailLog(emailLogRequest);
}
}

View File

@@ -1,7 +1,11 @@
package net.gepafin.tendermanagement.service.impl;
import lombok.extern.slf4j.Slf4j;
import net.gepafin.tendermanagement.dao.EmailLogDao;
import net.gepafin.tendermanagement.entities.EmailLogEntity;
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 org.springframework.beans.factory.annotation.Autowired;
@@ -20,8 +24,11 @@ public class PecEmailService implements EmailService {
this.pecFeignClient = pecFeignClient;
}
@Autowired
private EmailLogDao emailLogDao;
@Override
public void sendEmail(String subject, String body, List<String> recipientEmails, EmailConfig emailConfig) {
public void sendEmail(String subject, String body, List<String> recipientEmails, EmailConfig emailConfig, EmailLogRequest emailLogRequest) {
PecEmailRequest emailRequest = new PecEmailRequest();
emailRequest.setSender(emailConfig.getSender());
emailRequest.setRecipient(recipientEmails);
@@ -34,8 +41,12 @@ public class PecEmailService implements EmailService {
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.setSendStatus(StatusTypeEnum.FAILED.getValue());
emailLogRequest.setErrorMessage(String.valueOf(response.getStatusCode()));
EmailLogEntity emailLogEntity= emailLogDao.createEmailLog(emailLogRequest);
throw new RuntimeException("Failed to send email via PEC: " + response.getStatusCode());
}
EmailLogEntity emailLogEntity= emailLogDao.createEmailLog(emailLogRequest);
}
}

View File

@@ -1720,4 +1720,53 @@
<sqlFile dbms="postgresql"
path="db/dump/update_system_email_template_for_notification_mail_05_11_2024_4.sql"/>
</changeSet>
<changeSet id="12-11-2024_1" author="Nisha Kashyap">
<createTable tableName="email_log">
<column autoIncrement="true" name="id" type="INTEGER">
<constraints nullable="false" primaryKey="true"
primaryKeyName="pk_email_logs"/>
</column>
<column name="email_type" type="VARCHAR(255)">
<constraints nullable="false"/>
</column>
<column name="recipient_type" type="VARCHAR(255)">
<constraints nullable="false"/>
</column>
<column name="recipient_id" type="INTEGER">
<constraints nullable="false"/>
</column>
<column name="email_subject" type="TEXT"/>
<column name="email_body" type="TEXT"/>
<column name="send_status" type="VARCHAR(255)"/>
<column name="send_date_time" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="created_date" type="TIMESTAMP WITHOUT TIME ZONE" defaultValueComputed="CURRENT_TIMESTAMP"/>
<column name="updated_date" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="error_message" type="TEXT"/>
</createTable>
<createTable tableName="email_tracking">
<column autoIncrement="true" name="id" type="INTEGER">
<constraints nullable="false" primaryKey="true" primaryKeyName="pk_email_template_mapping"/>
</column>
<!-- Foreign key to email_logs table -->
<column name="email_log_id" type="INTEGER">
<constraints nullable="false" foreignKeyName="fk_email_log_id" references="email_log(id)"/>
</column>
<column name="user_id" type="INTEGER">
<constraints nullable="false" foreignKeyName="fk_user_id" references="gepafin_user(id)"/>
</column>
<!-- The ID of the associated entity -->
<column name="entity_id" type="INTEGER">
<constraints nullable="false"/>
</column>
<!-- The type of the associated entity (e.g., USER, APPLICATION) -->
<column name="entity_type" type="VARCHAR(255)">
<constraints nullable="false"/>
</column>
<column name="created_date" type="TIMESTAMP WITHOUT TIME ZONE" defaultValueComputed="CURRENT_TIMESTAMP"/>
<column name="updated_date" type="TIMESTAMP WITHOUT TIME ZONE"/>
</createTable>
</changeSet>
</databaseChangeLog>