From 50c1f0b80043656feca523bf663fb6526c5ba5e6 Mon Sep 17 00:00:00 2001 From: nisha Date: Tue, 12 Nov 2024 18:11:15 +0530 Subject: [PATCH 1/7] Done ticket --- .../dao/ApplicationAmendmentRequestDao.java | 11 +-- .../tendermanagement/dao/ApplicationDao.java | 25 +++--- .../tendermanagement/dao/EmailLogDao.java | 79 +++++++++++++++++++ .../dao/EmailNotificationDao.java | 48 ++++++++--- .../entities/EmailLogEntity.java | 37 +++++++++ .../entities/EmailTrackingEntity.java | 27 +++++++ .../enums/EmailTrackingEntityTypeEnum.java | 20 +++++ .../enums/RecipientTypeEnum.java | 21 +++++ .../enums/StatusTypeEnum.java | 20 +++++ .../model/request/EmailLogRequest.java | 31 ++++++++ .../model/request/EmailTrackingRequest.java | 16 ++++ .../repositories/EmailLogRepository.java | 11 +++ .../repositories/EmailTrackingRepository.java | 16 ++++ .../scheduler/NotificationScheduler.java | 6 +- .../service/impl/EmailService.java | 3 +- .../service/impl/MailgunEmailService.java | 14 +++- .../service/impl/PecEmailService.java | 13 ++- .../db/changelog/db.changelog-1.0.0.xml | 49 ++++++++++++ 18 files changed, 411 insertions(+), 36 deletions(-) create mode 100644 src/main/java/net/gepafin/tendermanagement/dao/EmailLogDao.java create mode 100644 src/main/java/net/gepafin/tendermanagement/entities/EmailLogEntity.java create mode 100644 src/main/java/net/gepafin/tendermanagement/entities/EmailTrackingEntity.java create mode 100644 src/main/java/net/gepafin/tendermanagement/enums/EmailTrackingEntityTypeEnum.java create mode 100644 src/main/java/net/gepafin/tendermanagement/enums/RecipientTypeEnum.java create mode 100644 src/main/java/net/gepafin/tendermanagement/enums/StatusTypeEnum.java create mode 100644 src/main/java/net/gepafin/tendermanagement/model/request/EmailLogRequest.java create mode 100644 src/main/java/net/gepafin/tendermanagement/model/request/EmailTrackingRequest.java create mode 100644 src/main/java/net/gepafin/tendermanagement/repositories/EmailLogRepository.java create mode 100644 src/main/java/net/gepafin/tendermanagement/repositories/EmailTrackingRepository.java diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java index d0a6f0c8..4a80f94e 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java @@ -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)); } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index a51d9be1..1cf5da7a 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -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 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, diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EmailLogDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EmailLogDao.java new file mode 100644 index 00000000..8c8a0eaa --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailLogDao.java @@ -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; + } +} diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java index 2f59aa0c..2e0b719d 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java @@ -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 bodyPlaceholders, List additionalRecipients) { @@ -77,7 +86,9 @@ public class EmailNotificationDao { UserEntity userEntity = userService.validateUser(applicationEntity.getUserId()); List 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 getRecipientEmails(ApplicationEntity applicationEntity, UserEntity userEntity, List additionalRecipients) { List 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 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=emailTrackingRepository.findFirstByEntityTypeAndEntityIdAndUser(EmailTrackingEntityTypeEnum.AMENDMENT.getValue(), amendmentRequest.getId(),user); + if(emailTrackingEntity != null && (!emailTrackingEntity.isEmpty())) { + EmailTrackingEntity emailTrackingEntity1=emailTrackingEntity.get(0); + List 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 recipientEmails) { + public void sendMail(Long hubId, String subject, String body, List 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) { diff --git a/src/main/java/net/gepafin/tendermanagement/entities/EmailLogEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/EmailLogEntity.java new file mode 100644 index 00000000..8dcaa76a --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/entities/EmailLogEntity.java @@ -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; + +} + diff --git a/src/main/java/net/gepafin/tendermanagement/entities/EmailTrackingEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/EmailTrackingEntity.java new file mode 100644 index 00000000..57a25747 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/entities/EmailTrackingEntity.java @@ -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; + +} diff --git a/src/main/java/net/gepafin/tendermanagement/enums/EmailTrackingEntityTypeEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/EmailTrackingEntityTypeEnum.java new file mode 100644 index 00000000..a2a356db --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/enums/EmailTrackingEntityTypeEnum.java @@ -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; + } +} diff --git a/src/main/java/net/gepafin/tendermanagement/enums/RecipientTypeEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/RecipientTypeEnum.java new file mode 100644 index 00000000..e08a3e6b --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/enums/RecipientTypeEnum.java @@ -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; + } +} diff --git a/src/main/java/net/gepafin/tendermanagement/enums/StatusTypeEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/StatusTypeEnum.java new file mode 100644 index 00000000..dc7c11d5 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/enums/StatusTypeEnum.java @@ -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; + } +} diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/EmailLogRequest.java b/src/main/java/net/gepafin/tendermanagement/model/request/EmailLogRequest.java new file mode 100644 index 00000000..e15c6783 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/request/EmailLogRequest.java @@ -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; +} diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/EmailTrackingRequest.java b/src/main/java/net/gepafin/tendermanagement/model/request/EmailTrackingRequest.java new file mode 100644 index 00000000..558271fe --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/request/EmailTrackingRequest.java @@ -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; +} diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/EmailLogRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/EmailLogRepository.java new file mode 100644 index 00000000..998050ec --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/repositories/EmailLogRepository.java @@ -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 { + + List findByIdAndEmailTypeOrderByCreatedDateDesc(Long id, String emailType); +} diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/EmailTrackingRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/EmailTrackingRepository.java new file mode 100644 index 00000000..e89ec2c6 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/repositories/EmailTrackingRepository.java @@ -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 { + + List findFirstByEntityTypeAndEntityIdAndUser( + String entityType, Long entityId, UserEntity user + ); +} diff --git a/src/main/java/net/gepafin/tendermanagement/scheduler/NotificationScheduler.java b/src/main/java/net/gepafin/tendermanagement/scheduler/NotificationScheduler.java index 93d41c98..24e34282 100644 --- a/src/main/java/net/gepafin/tendermanagement/scheduler/NotificationScheduler.java +++ b/src/main/java/net/gepafin/tendermanagement/scheduler/NotificationScheduler.java @@ -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 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); } } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/EmailService.java b/src/main/java/net/gepafin/tendermanagement/service/impl/EmailService.java index 6b7b91cc..395456e8 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/EmailService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/EmailService.java @@ -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 recipientEmails, EmailConfig emailConfig); + void sendEmail(String subject, String body, List recipientEmails, EmailConfig emailConfig, EmailLogRequest emailLogRequest); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/MailgunEmailService.java b/src/main/java/net/gepafin/tendermanagement/service/impl/MailgunEmailService.java index 9dd965e7..76fee2ed 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/MailgunEmailService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/MailgunEmailService.java @@ -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 recipientEmails, EmailConfig emailConfig) { + public void sendEmail(String subject, String body, List 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 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); + } } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java b/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java index f2cdc613..5aa4da50 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java @@ -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 recipientEmails, EmailConfig emailConfig) { + public void sendEmail(String subject, String body, List 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 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); } } diff --git a/src/main/resources/db/changelog/db.changelog-1.0.0.xml b/src/main/resources/db/changelog/db.changelog-1.0.0.xml index 9aa2ec42..8a06b83e 100644 --- a/src/main/resources/db/changelog/db.changelog-1.0.0.xml +++ b/src/main/resources/db/changelog/db.changelog-1.0.0.xml @@ -1720,4 +1720,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 526a8313577317514cced265ee51b62eaeb9ad7b Mon Sep 17 00:00:00 2001 From: nisha Date: Wed, 13 Nov 2024 12:53:29 +0530 Subject: [PATCH 2/7] Updated code --- .../tendermanagement/scheduler/NotificationScheduler.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/scheduler/NotificationScheduler.java b/src/main/java/net/gepafin/tendermanagement/scheduler/NotificationScheduler.java index 24e34282..58908280 100644 --- a/src/main/java/net/gepafin/tendermanagement/scheduler/NotificationScheduler.java +++ b/src/main/java/net/gepafin/tendermanagement/scheduler/NotificationScheduler.java @@ -4,6 +4,8 @@ import net.gepafin.tendermanagement.dao.EmailNotificationDao; import net.gepafin.tendermanagement.entities.ApplicationAmendmentRequestEntity; import net.gepafin.tendermanagement.entities.ApplicationEntity; import net.gepafin.tendermanagement.entities.UserEntity; +import net.gepafin.tendermanagement.enums.ApplicationAmendmentRequestEnum; +import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; import net.gepafin.tendermanagement.repositories.ApplicationAmendmentRequestRepository; import net.gepafin.tendermanagement.repositories.ApplicationRepository; import net.gepafin.tendermanagement.repositories.UserRepository; @@ -44,9 +46,9 @@ public class NotificationScheduler { LocalDateTime requestDate = amendmentRequest.getStartDate(); if (requestDate.plusDays(amendmentRequest.getResponseDays()).isBefore(today)) { // Update the application status to REJECTED - application.setStatus("REJECTED"); + application.setStatus(ApplicationStatusTypeEnum.REJECTED.getValue()); applicationRepository.save(application); - amendmentRequest.setStatus("CLOSE"); + amendmentRequest.setStatus(ApplicationAmendmentRequestEnum.CLOSE.getValue()); applicationAmendmentRepository.save(amendmentRequest); emailNotificationDao.sendApplicationFailureNotificationEmail(amendmentRequest); } From 7485cead14c2f221c383cd33913aad31dbe1743b Mon Sep 17 00:00:00 2001 From: nisha Date: Fri, 15 Nov 2024 19:55:24 +0530 Subject: [PATCH 3/7] Done ticket GEPAFINBE-92 --- pom.xml | 7 +++ .../dao/ApplicationAmendmentRequestDao.java | 2 +- .../tendermanagement/dao/ApplicationDao.java | 16 +++++-- .../tendermanagement/dao/EmailLogDao.java | 43 ++++++------------- .../dao/EmailNotificationDao.java | 15 ++----- .../dao/SystemEmailTemplatesDao.java | 2 + .../entities/EmailLogEntity.java | 17 ++++++++ .../entities/EmailTrackingEntity.java | 27 ------------ .../entities/SystemEmailTemplatesEntity.java | 3 ++ ...TypeEnum.java => EmailEntityTypeEnum.java} | 4 +- .../enums/EmailScenarioTypeEnum.java | 24 +++++++++++ .../enums/EmailServiceTypeEnum.java | 20 +++++++++ .../enums/RecipientTypeEnum.java | 3 +- .../model/request/EmailConfig.java | 1 + .../model/request/EmailLogRequest.java | 19 +++++--- .../response/SystemEmailTemplateResponse.java | 3 ++ .../repositories/EmailLogRepository.java | 2 +- .../repositories/EmailTrackingRepository.java | 16 ------- .../feignClient/MailgunFeignClient.java | 42 ++++++++++++------ .../service/feignClient/PecFeignClient.java | 9 ++-- .../service/impl/MailgunEmailService.java | 34 +++++++++++---- .../service/impl/PecEmailService.java | 40 +++++++++++------ .../gepafin/tendermanagement/util/Utils.java | 5 +++ .../db/changelog/db.changelog-1.0.0.xml | 41 +++++++----------- ...ta_for_email_service_config_15-11-2024.sql | 9 ++++ ...template_for_email_scenario_15-11-2024.sql | 17 ++++++++ 26 files changed, 257 insertions(+), 164 deletions(-) delete mode 100644 src/main/java/net/gepafin/tendermanagement/entities/EmailTrackingEntity.java rename src/main/java/net/gepafin/tendermanagement/enums/{EmailTrackingEntityTypeEnum.java => EmailEntityTypeEnum.java} (76%) create mode 100644 src/main/java/net/gepafin/tendermanagement/enums/EmailScenarioTypeEnum.java create mode 100644 src/main/java/net/gepafin/tendermanagement/enums/EmailServiceTypeEnum.java delete mode 100644 src/main/java/net/gepafin/tendermanagement/repositories/EmailTrackingRepository.java create mode 100644 src/main/resources/db/dump/updated_hub_data_for_email_service_config_15-11-2024.sql create mode 100644 src/main/resources/db/dump/updated_system_email_template_for_email_scenario_15-11-2024.sql diff --git a/pom.xml b/pom.xml index b443ec18..08c677d0 100644 --- a/pom.xml +++ b/pom.xml @@ -29,6 +29,13 @@ lombok + + + com.mashape.unirest + unirest-java + 1.4.9 + + com.h2database diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java index dc3049a6..c3fbc94c 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java @@ -595,7 +595,7 @@ public class ApplicationAmendmentRequestDao { String body = prepareBody(emailTemplate, amendment, beneficiaryUser); String email = beneficiaryUser.getEmail(); if (Boolean.TRUE.equals(amendment.getIsEmail())&&email != null && !email.isEmpty()) { - EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(SystemEmailTemplatesEntityTypeEnum.AMENDMENT_REMINDER.getValue(),RecipientTypeEnum.BENEFICIARY,beneficiaryUser.getId(),subject,body,StatusTypeEnum.SUCCESS.getValue(), null,amendment.getId(),EmailTrackingEntityTypeEnum.AMENDMENT,beneficiaryUser); + EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(emailTemplate.getEmailScenario(),RecipientTypeEnum.USER,beneficiaryUser.getId(),subject,body,StatusTypeEnum.SUCCESS.getValue(), null,amendment.getId(), EmailEntityTypeEnum.AMENDMENT,beneficiaryUser.getEmail(),beneficiaryUser.getId()); 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)); diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index 27dd5485..53b3128e 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -791,12 +791,13 @@ public class ApplicationDao { // Replace placeholders in the subject and body String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders); String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders); - + EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(),RecipientTypeEnum.USER,userEntity.getId(),subject,body, StatusTypeEnum.SUCCESS.getValue(), null,applicationEntity.getId(), EmailEntityTypeEnum.APPLICATION,userEntity.getEmail(),userEntity.getId()); String email = userEntity.getEmail(); if (userEntity.getBeneficiary() != null) { + emailLogRequest.setRecipientType(RecipientTypeEnum.BENEFICIARY); email = userEntity.getBeneficiary().getEmail(); + emailLogRequest.setUserId(userEntity.getBeneficiary().getId()); } - 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 recipientEmails = new ArrayList<>(); // recipientEmails.add(email); @@ -810,6 +811,11 @@ public class ApplicationDao { if (contactEmail != null && !contactEmail.isEmpty() && !contactEmail.equals(companyEmail)) { recipientEmails.add(contactEmail); } + if(Boolean.FALSE.equals(recipientEmails.isEmpty())){ + emailLogRequest.setRecipientId(applicationEntity.getCompany().getId()); + emailLogRequest.setRecipientType(RecipientTypeEnum.COMPANY); + emailLogRequest.setRecipientEmails(companyEmail); + } emailNotificationDao.sendMail(hub.getId(), subject, body, recipientEmails,emailLogRequest); } private void sendMailTodefaultSystemAndGepafin(UserEntity userEntity, ApplicationEntity applicationEntity) { @@ -837,17 +843,21 @@ 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); + EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(),RecipientTypeEnum.PROPERTIES,null,subject,body,StatusTypeEnum.SUCCESS.getValue(), null,applicationEntity.getId(), EmailEntityTypeEnum.APPLICATION,userEntity.getEmail(),userEntity.getId()); // 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()) { + emailLogRequest.setRecipientEmails(carloEmail); // mailUtil.sendByMailGun(subject, body, List.of(carloEmail), null); emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(carloEmail),emailLogRequest); } + emailLogRequest.setRecipientEmails(gepafinEmail); emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(gepafinEmail),emailLogRequest); + emailLogRequest.setRecipientEmails(defaultSystemReceiverEmail); emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(defaultSystemReceiverEmail),emailLogRequest); + emailLogRequest.setRecipientEmails(rinaldoEmail); emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(rinaldoEmail),emailLogRequest); } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EmailLogDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EmailLogDao.java index 8c8a0eaa..8b6a8ea3 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EmailLogDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailLogDao.java @@ -1,17 +1,12 @@ 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.EmailScenarioTypeEnum; +import net.gepafin.tendermanagement.enums.EmailEntityTypeEnum; 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; @@ -23,13 +18,10 @@ 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.setEmailType(emailLogRequest.getEmailType().getValue()); emailLogEntity.setRecipientType(emailLogRequest.getRecipientType().getValue()); emailLogEntity.setRecipientId(emailLogRequest.getRecipientId()); emailLogEntity.setEmailSubject(emailLogRequest.getEmailSubject()); @@ -37,32 +29,22 @@ public class EmailLogDao { emailLogEntity.setSendStatus(emailLogRequest.getSendStatus()); emailLogEntity.setSendDateTime(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); // Set to now if null emailLogEntity.setErrorMessage(emailLogRequest.getErrorMessage()); - emailLogEntity=saveEmailLogEntity(emailLogEntity); + emailLogEntity.setUserId(emailLogRequest.getUserId()); + emailLogEntity.setEmailServiceResponse(emailLogRequest.getEmailServiceResponse()); + emailLogEntity.setRecipientEmails(emailLogRequest.getRecipientEmails()); 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); - } + emailLogEntity.setEntityId(emailLogRequest.getEntityId()); + emailLogEntity.setEntityType(emailLogRequest.getEntitytype().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, + public EmailLogRequest createEmailLogRequest(EmailScenarioTypeEnum emailType, RecipientTypeEnum recipientType, Long recipientId, String emailSubject, String emailBody, String sendStatus, - String errorMessage, Long entityId, EmailTrackingEntityTypeEnum entityType, UserEntity user) { + String errorMessage, Long entityId, EmailEntityTypeEnum entityType, String recipientEmails, Long userId) { EmailLogRequest emailLogRequest = new EmailLogRequest(); emailLogRequest.setEmailType(emailType); emailLogRequest.setRecipientType(recipientType); @@ -71,9 +53,10 @@ public class EmailLogDao { emailLogRequest.setEmailBody(emailBody); emailLogRequest.setSendStatus(sendStatus); emailLogRequest.setErrorMessage(errorMessage); + emailLogRequest.setUserId(userId); emailLogRequest.setEntityId(entityId); emailLogRequest.setEntitytype(entityType); - emailLogRequest.setUser(user); + emailLogRequest.setRecipientEmails(recipientEmails); return emailLogRequest; } } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java index c88cee97..46833b42 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java @@ -5,15 +5,13 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.entities.*; -import net.gepafin.tendermanagement.enums.EmailTrackingEntityTypeEnum; +import net.gepafin.tendermanagement.enums.EmailEntityTypeEnum; 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; @@ -57,9 +55,6 @@ public class EmailNotificationDao { @Autowired private EmailLogDao emailLogDao; - @Autowired - private EmailTrackingRepository emailTrackingRepository; - @Autowired private EmailLogRepository emailLogRepository; @@ -82,7 +77,7 @@ public class EmailNotificationDao { UserEntity userEntity = userService.validateUser(applicationEntity.getUserId()); List recipientEmails = getRecipientEmails(applicationEntity, userEntity, additionalRecipients); - EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(String.valueOf(templateType), RecipientTypeEnum.BENEFICIARY,userEntity.getId(),subject,body, StatusTypeEnum.SUCCESS.getValue(), null, amendmentRequest.getId(), EmailTrackingEntityTypeEnum.AMENDMENT,userEntity); + EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.BENEFICIARY,userEntity.getBeneficiary().getId(),subject,body, StatusTypeEnum.SUCCESS.getValue(), null, amendmentRequest.getId(), EmailEntityTypeEnum.AMENDMENT,Utils.listToCommaSeparatedString(recipientEmails),userEntity.getId()); sendMail(applicationEntity.getHubId(), subject, body, recipientEmails,emailLogRequest); } @@ -153,14 +148,10 @@ public class EmailNotificationDao { Map bodyPlaceholders = new HashMap<>(); bodyPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName()); LocalDateTime lastReminderDateTime=amendmentRequest.getCreatedDate(); - List emailTrackingEntity=emailTrackingRepository.findFirstByEntityTypeAndEntityIdAndUser(EmailTrackingEntityTypeEnum.AMENDMENT.getValue(), amendmentRequest.getId(),user); - if(emailTrackingEntity != null && (!emailTrackingEntity.isEmpty())) { - EmailTrackingEntity emailTrackingEntity1=emailTrackingEntity.get(0); - List emailLogEntity = emailLogRepository.findByIdAndEmailTypeOrderByCreatedDateDesc(emailTrackingEntity1.getId(), SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.DOCUMENTATION_INTEGRATION_REQUEST.getValue()); + List emailLogEntity = emailLogRepository.findByUserIdAndEntityIdAndEntityType(user.getId(),amendmentRequest.getId(),EmailEntityTypeEnum.AMENDMENT.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)); diff --git a/src/main/java/net/gepafin/tendermanagement/dao/SystemEmailTemplatesDao.java b/src/main/java/net/gepafin/tendermanagement/dao/SystemEmailTemplatesDao.java index 1665a724..514506f5 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/SystemEmailTemplatesDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/SystemEmailTemplatesDao.java @@ -4,6 +4,7 @@ import java.util.HashMap; import java.util.Locale; import java.util.Map; +import net.gepafin.tendermanagement.enums.EmailScenarioTypeEnum; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -78,6 +79,7 @@ public class SystemEmailTemplatesDao { systemEmailTemplateResponse.setHtmlContent(htmlContent); systemEmailTemplateResponse.setSubject(subject); systemEmailTemplateResponse.setJsonMap(languageMap); + systemEmailTemplateResponse.setEmailScenario(EmailScenarioTypeEnum.valueOf(dbSystemEmailTemplatesEntity.getEmailScenario())); return systemEmailTemplateResponse; } diff --git a/src/main/java/net/gepafin/tendermanagement/entities/EmailLogEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/EmailLogEntity.java index 8dcaa76a..848e895b 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/EmailLogEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/EmailLogEntity.java @@ -33,5 +33,22 @@ public class EmailLogEntity extends BaseEntity{ @Column(name = "error_message", columnDefinition = "TEXT") private String errorMessage; + @Column(name = "email_service_response") + private String emailServiceResponse; + + @Column(name = "email_service_type") + private String emailServiceType; + + @Column(name = "recipient_emails") + private String recipientEmails; + + @Column(name = "user_id") + private Long userId; + + @Column(name = "entity_id") + private Long entityId; + + @Column(name = "entity_type") + private String entityType; } diff --git a/src/main/java/net/gepafin/tendermanagement/entities/EmailTrackingEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/EmailTrackingEntity.java deleted file mode 100644 index 57a25747..00000000 --- a/src/main/java/net/gepafin/tendermanagement/entities/EmailTrackingEntity.java +++ /dev/null @@ -1,27 +0,0 @@ -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; - -} diff --git a/src/main/java/net/gepafin/tendermanagement/entities/SystemEmailTemplatesEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/SystemEmailTemplatesEntity.java index 1440e00d..f7974eca 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/SystemEmailTemplatesEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/SystemEmailTemplatesEntity.java @@ -35,6 +35,9 @@ public class SystemEmailTemplatesEntity extends BaseEntity { @Column(name ="IS_DELETED", nullable = false) private Boolean isDeleted = false; + + @Column(name = "email_scenario") + private String emailScenario; public enum SystemEmailTemplatesEntityTypeEnum { diff --git a/src/main/java/net/gepafin/tendermanagement/enums/EmailTrackingEntityTypeEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/EmailEntityTypeEnum.java similarity index 76% rename from src/main/java/net/gepafin/tendermanagement/enums/EmailTrackingEntityTypeEnum.java rename to src/main/java/net/gepafin/tendermanagement/enums/EmailEntityTypeEnum.java index a2a356db..6abea8ce 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/EmailTrackingEntityTypeEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/EmailEntityTypeEnum.java @@ -2,14 +2,14 @@ package net.gepafin.tendermanagement.enums; import com.fasterxml.jackson.annotation.JsonValue; -public enum EmailTrackingEntityTypeEnum { +public enum EmailEntityTypeEnum { AMENDMENT("AMENDMENT"), APPLICATION("APPLICATION"); private String value; - EmailTrackingEntityTypeEnum(String value) { + EmailEntityTypeEnum(String value) { this.value = value; } diff --git a/src/main/java/net/gepafin/tendermanagement/enums/EmailScenarioTypeEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/EmailScenarioTypeEnum.java new file mode 100644 index 00000000..493f987c --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/enums/EmailScenarioTypeEnum.java @@ -0,0 +1,24 @@ +package net.gepafin.tendermanagement.enums; + +import com.fasterxml.jackson.annotation.JsonValue; + +public enum EmailScenarioTypeEnum { + + APPLICATION_SUBMITTED("APPLICATION_SUBMITTED"), + APPLICATION_AMENDMENT_REQUESTED("APPLICATION_AMENDMENT_REQUESTED"), + APPLICATION_AMENDMENT_EXPIRED("APPLICATION_AMENDMENT_EXPIRED"), + APPLICATION_AMENDMENT_REMINDER("APPLICATION_AMENDMENT_REMINDER"), + APPLICATION_APPROVED("APPLICATION_APPROVED"), + APPLICATION_REJECTED("APPLICATION_REJECTED"); + + private final String value; + + EmailScenarioTypeEnum(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } +} diff --git a/src/main/java/net/gepafin/tendermanagement/enums/EmailServiceTypeEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/EmailServiceTypeEnum.java new file mode 100644 index 00000000..8a22c69c --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/enums/EmailServiceTypeEnum.java @@ -0,0 +1,20 @@ +package net.gepafin.tendermanagement.enums; + +import com.fasterxml.jackson.annotation.JsonValue; + +public enum EmailServiceTypeEnum { + + MAILGUN("MAILGUN"), + PEC("PEC"); + + private String value; + + EmailServiceTypeEnum(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } +} diff --git a/src/main/java/net/gepafin/tendermanagement/enums/RecipientTypeEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/RecipientTypeEnum.java index e08a3e6b..c4f54175 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/RecipientTypeEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/RecipientTypeEnum.java @@ -6,7 +6,8 @@ public enum RecipientTypeEnum { BENEFICIARY ("BENEFICIARY"), USER("USER"), - COMPANY("COMPANY"); + COMPANY("COMPANY"), + PROPERTIES("PROPERTIES"); private String value; diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/EmailConfig.java b/src/main/java/net/gepafin/tendermanagement/model/request/EmailConfig.java index 5a94b325..79f4c966 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/EmailConfig.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/EmailConfig.java @@ -13,6 +13,7 @@ public class EmailConfig { private String domain; private String mailgunApiUrl; private String pecApiUrl; + private String url; } diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/EmailLogRequest.java b/src/main/java/net/gepafin/tendermanagement/model/request/EmailLogRequest.java index e15c6783..b6e8c07b 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/EmailLogRequest.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/EmailLogRequest.java @@ -1,15 +1,15 @@ 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.EmailScenarioTypeEnum; +import net.gepafin.tendermanagement.enums.EmailEntityTypeEnum; +import net.gepafin.tendermanagement.enums.EmailServiceTypeEnum; import net.gepafin.tendermanagement.enums.RecipientTypeEnum; @Data public class EmailLogRequest { - private String emailType; + private EmailScenarioTypeEnum emailType; private RecipientTypeEnum recipientType; @@ -25,7 +25,14 @@ public class EmailLogRequest { private Long entityId; - private EmailTrackingEntityTypeEnum entitytype; + private EmailEntityTypeEnum entitytype; + + private Long userId; + + private String emailServiceResponse; + + private EmailServiceTypeEnum emailServiceType; + + private String recipientEmails; - private UserEntity user; } diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/SystemEmailTemplateResponse.java b/src/main/java/net/gepafin/tendermanagement/model/response/SystemEmailTemplateResponse.java index cd65e6e4..0752afb8 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/SystemEmailTemplateResponse.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/SystemEmailTemplateResponse.java @@ -3,10 +3,13 @@ package net.gepafin.tendermanagement.model.response; import java.util.Map; import lombok.Data; +import net.gepafin.tendermanagement.enums.EmailScenarioTypeEnum; @Data public class SystemEmailTemplateResponse { + EmailScenarioTypeEnum emailScenario; + String htmlContent; String subject; diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/EmailLogRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/EmailLogRepository.java index 998050ec..ec181249 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/EmailLogRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/EmailLogRepository.java @@ -7,5 +7,5 @@ import java.util.List; public interface EmailLogRepository extends JpaRepository { - List findByIdAndEmailTypeOrderByCreatedDateDesc(Long id, String emailType); + List findByUserIdAndEntityIdAndEntityType(Long userId,Long entityId,String entityType); } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/EmailTrackingRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/EmailTrackingRepository.java deleted file mode 100644 index e89ec2c6..00000000 --- a/src/main/java/net/gepafin/tendermanagement/repositories/EmailTrackingRepository.java +++ /dev/null @@ -1,16 +0,0 @@ -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 { - - List findFirstByEntityTypeAndEntityIdAndUser( - String entityType, Long entityId, UserEntity user - ); -} diff --git a/src/main/java/net/gepafin/tendermanagement/service/feignClient/MailgunFeignClient.java b/src/main/java/net/gepafin/tendermanagement/service/feignClient/MailgunFeignClient.java index eb9c50d1..3006ef51 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/feignClient/MailgunFeignClient.java +++ b/src/main/java/net/gepafin/tendermanagement/service/feignClient/MailgunFeignClient.java @@ -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 sendEmail( - @PathVariable("domain") String domain, - @RequestParam("from") String from, - @RequestParam("to") List 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 sendEmail( @RequestPart("from") String from, +// @RequestPart("to") List 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 to; +// public String subject; +// public String htmlBody; +// +// public PayloadDTO(String from, List to, String subject, String htmlBody) { +// this.from = from; +// this.to = to; +// this.subject = subject; +// this.htmlBody = htmlBody; +// } +// +// } } diff --git a/src/main/java/net/gepafin/tendermanagement/service/feignClient/PecFeignClient.java b/src/main/java/net/gepafin/tendermanagement/service/feignClient/PecFeignClient.java index d251e644..f6fe99f6 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/feignClient/PecFeignClient.java +++ b/src/main/java/net/gepafin/tendermanagement/service/feignClient/PecFeignClient.java @@ -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 sendEmail(@RequestHeader("Authorization") String token, - @RequestBody PecEmailRequest emailRequest); +// @PostMapping("/send") +// ResponseEntity sendEmail(@RequestHeader HttpHeaders headers, +// @RequestBody PecEmailRequest emailRequest); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/MailgunEmailService.java b/src/main/java/net/gepafin/tendermanagement/service/impl/MailgunEmailService.java index e27a231a..97c75667 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/MailgunEmailService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/MailgunEmailService.java @@ -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 response2=null; if (Boolean.FALSE.equals(validator.isTestProfileActivated())) { - ResponseEntity 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); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java b/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java index e9500d4b..8d6667d5 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java @@ -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 response2=null; if (Boolean.FALSE.equals(validator.isTestProfileActivated())) { - ResponseEntity 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); } } diff --git a/src/main/java/net/gepafin/tendermanagement/util/Utils.java b/src/main/java/net/gepafin/tendermanagement/util/Utils.java index 26f049ef..ebd5eea3 100644 --- a/src/main/java/net/gepafin/tendermanagement/util/Utils.java +++ b/src/main/java/net/gepafin/tendermanagement/util/Utils.java @@ -24,6 +24,7 @@ import net.gepafin.tendermanagement.constants.GepafinConstant; import org.apache.commons.collections4.MapUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import com.fasterxml.jackson.core.JsonProcessingException; @@ -40,6 +41,7 @@ import net.gepafin.tendermanagement.web.rest.api.errors.FeignClientForbiddenExce import net.gepafin.tendermanagement.web.rest.api.errors.FeignClientNotFoundException; import net.gepafin.tendermanagement.web.rest.api.errors.FeignClientUnauthorizedException; import net.gepafin.tendermanagement.web.rest.api.errors.FeignClientValidationException; +import org.springframework.http.MediaType; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; @@ -515,4 +517,7 @@ public class Utils { } return null; } + public static String listToCommaSeparatedString(List list) { + return String.join(", ", list.stream().map(String::valueOf).toList()); + } } diff --git a/src/main/resources/db/changelog/db.changelog-1.0.0.xml b/src/main/resources/db/changelog/db.changelog-1.0.0.xml index 8a06b83e..a794719f 100644 --- a/src/main/resources/db/changelog/db.changelog-1.0.0.xml +++ b/src/main/resources/db/changelog/db.changelog-1.0.0.xml @@ -1720,7 +1720,7 @@ - + - @@ -1741,32 +1740,24 @@ + + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + - diff --git a/src/main/resources/db/dump/updated_hub_data_for_email_service_config_15-11-2024.sql b/src/main/resources/db/dump/updated_hub_data_for_email_service_config_15-11-2024.sql new file mode 100644 index 00000000..40b6a790 --- /dev/null +++ b/src/main/resources/db/dump/updated_hub_data_for_email_service_config_15-11-2024.sql @@ -0,0 +1,9 @@ +UPDATE hub +SET email_service_type = 'PEC_SERVICE', + email_service_config = 'JkFbBfuVvq7VWwp5LcWIi+hAa1RJ1ekI0jq3w7gLTXETZiTaN8zC4OBWD53x8FtbfFTh3L/5805CIYTH1BQGa3X9q16q9SDzMy7DKHdmJzOnLKhn74C5akoXKaeXUCGnzp0cSk2c01FV6lwefC29IshijFSumCHtVlgWNeZigBzmWK+M7NS+EXf4goIMzguL5bHpYXfoQunQozeY1SpOo+28gDDpzZRMXdtcwKkTgESFGwsy6S1m1TBxJwZC7p8W' +WHERE UNIQUE_UUID = 'p4lk3bcx1RStqTaIVVbXs'; + +UPDATE hub +SET email_service_type = 'MAILGUN_SERVICE', + email_service_config = 'QlICHJMvBHd09ci/B2+EDR0q6kFsEdu5gOSI1hgG/7SAm2wXQZagDsAbkBrA6JPHXUS3Bkw6UD9x5boYYxBi3tnpu16i0NgdZqcc2BBhMF1VgRlJMgX+KgsOJsnQbHAJ/9YZaeIVrJpxceHFx93NTbfjT3TzzaZ9cW/64wbeZFspEp6WwgKgV1/3+j297Q1QtKIiWKanolYaU9myx9KwPJZc8AmPe0PR2ViyA7VyGn6iQSrX2pr15tBw3xVIm0tfHh6pktHro4gRYs5CEypQ2cSbP5wv4Z6pDa//FHXzYpRvnb1AUh0thGOix5FZl9Kn' +WHERE UNIQUE_UUID = 't7jh5wfg9QXylNaTZkPoE'; \ No newline at end of file diff --git a/src/main/resources/db/dump/updated_system_email_template_for_email_scenario_15-11-2024.sql b/src/main/resources/db/dump/updated_system_email_template_for_email_scenario_15-11-2024.sql new file mode 100644 index 00000000..bf70f8aa --- /dev/null +++ b/src/main/resources/db/dump/updated_system_email_template_for_email_scenario_15-11-2024.sql @@ -0,0 +1,17 @@ +UPDATE gepafin_schema.system_email_template SET email_scenario='APPLICATION_SUBMITTED' WHERE "type"='APPLICATION_SUBMISSION_TO_USER_AND_COMPANY' AND "system"=true ; + +UPDATE gepafin_schema.system_email_template SET email_scenario='APPLICATION_SUBMITTED' WHERE "type"='APPLICATION_SUBMISSION_TO_GEPAFIN' AND "system"=true ; + +UPDATE gepafin_schema.system_email_template SET email_scenario='APPLICATION_AMENDMENT_REMINDER' WHERE "type"='AMENDMENT_REMINDER' AND "system"=true ; + +UPDATE gepafin_schema.system_email_template SET email_scenario='APPLICATION_AMENDMENT_EXPIRED' WHERE "type"='INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE' AND "system"=true ; + +UPDATE gepafin_schema.system_email_template SET email_scenario='APPLICATION_APPROVED' WHERE "type"='ADMISSIBILITY_NOTIFICATION' AND "system"=true ; + +UPDATE gepafin_schema.system_email_template SET email_scenario='APPLICATION_REJECTED' WHERE "type"='INADMISSIBILITY_NOTIFICATION' AND "system"=true ; + +UPDATE gepafin_schema.system_email_template SET email_scenario='APPLICATION_AMENDMENT_REQUESTED' WHERE "type"='DOCUMENTATION_INTEGRATION_REQUEST' AND "system"=true ; + + + + From 3d92173fe78f77b668700b6595099953589bedbd Mon Sep 17 00:00:00 2001 From: nisha Date: Fri, 15 Nov 2024 20:16:30 +0530 Subject: [PATCH 4/7] Updated code --- .../net/gepafin/tendermanagement/dao/ApplicationDao.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index 6556e2fd..4023ec93 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -132,7 +132,6 @@ public class ApplicationDao { @Autowired private FormDao formDao; - @Autowired private EmailLogDao emailLogDao; @@ -850,8 +849,8 @@ public class ApplicationDao { // mailUtil.sendByMailGun(subject, body, List.of(carloEmail), null); emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(carloEmail),emailLogRequest); } - emailLogRequest.setRecipientEmails(gepafinEmail); - emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(gepafinEmail),emailLogRequest); + emailLogRequest.setRecipientEmails(hub.getEmail()); + emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(hub.getEmail()),emailLogRequest); emailLogRequest.setRecipientEmails(defaultSystemReceiverEmail); emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(defaultSystemReceiverEmail),emailLogRequest); emailLogRequest.setRecipientEmails(rinaldoEmail); From c29935c66f83477b87b6231264c522f42b7c1435 Mon Sep 17 00:00:00 2001 From: nisha Date: Mon, 18 Nov 2024 11:46:09 +0530 Subject: [PATCH 5/7] Updated code --- .../dao/EmailNotificationDao.java | 17 ++++---- .../enums/EmailServiceTypeEnum.java | 4 +- .../feignClient/MailgunFeignClient.java | 40 ------------------- .../service/feignClient/PecFeignClient.java | 18 --------- .../service/impl/MailgunEmailService.java | 6 +-- .../service/impl/PecEmailService.java | 12 ++---- .../db/changelog/db.changelog-1.0.0.xml | 9 ++++- 7 files changed, 24 insertions(+), 82 deletions(-) delete mode 100644 src/main/java/net/gepafin/tendermanagement/service/feignClient/MailgunFeignClient.java delete mode 100644 src/main/java/net/gepafin/tendermanagement/service/feignClient/PecFeignClient.java diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java index 0ee43c27..02eea873 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java @@ -61,7 +61,7 @@ public class EmailNotificationDao { private void sendEmail(ApplicationEntity applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum templateType, - Map bodyPlaceholders, List additionalRecipients) { + Map bodyPlaceholders, List additionalRecipients,Boolean isAmendment,Long amendmentId) { HubEntity hubEntity = hubService.valdateHub(applicationEntity.getHubId()); String service = determineService(applicationEntity.getHubId()); @@ -77,8 +77,11 @@ public class EmailNotificationDao { UserEntity userEntity = userService.validateUser(applicationEntity.getUserId()); List recipientEmails = getRecipientEmails(applicationEntity, userEntity, additionalRecipients); - EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.BENEFICIARY,userEntity.getBeneficiary().getId(),subject,body, StatusTypeEnum.SUCCESS.getValue(), null, applicationEntity.getId(), EmailEntityTypeEnum.AMENDMENT,Utils.listToCommaSeparatedString(recipientEmails),userEntity.getId()); - + EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.BENEFICIARY,userEntity.getBeneficiary().getId(),subject,body, StatusTypeEnum.SUCCESS.getValue(), null, applicationEntity.getId(), EmailEntityTypeEnum.APPLICATION,Utils.listToCommaSeparatedString(recipientEmails),userEntity.getId()); + if(Boolean.TRUE.equals(isAmendment) && amendmentId !=null){ + emailLogRequest.setEntitytype(EmailEntityTypeEnum.AMENDMENT); + emailLogRequest.setEntityId(amendmentId); + } sendMail(applicationEntity.getHubId(), subject, body, recipientEmails,emailLogRequest); } private List getRecipientEmails(ApplicationEntity applicationEntity, UserEntity userEntity, List additionalRecipients) { @@ -138,7 +141,7 @@ public class EmailNotificationDao { log.error("Failed to parse form fields JSON: ", e); } bodyPlaceholders.put("{{note}}", applicationAmendmentRequest.getNote()); - sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.DOCUMENTATION_INTEGRATION_REQUEST, bodyPlaceholders, null); + sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.DOCUMENTATION_INTEGRATION_REQUEST, bodyPlaceholders, null,true,applicationAmendmentRequest.getId()); } public void sendApplicationFailureNotificationEmail(ApplicationAmendmentRequestEntity amendmentRequest) { @@ -155,7 +158,7 @@ public class EmailNotificationDao { } bodyPlaceholders.put("{{date_time_emailSend}}", DateTimeUtil.formatLocalDateTime(lastReminderDateTime, GepafinConstant.DD_MM_YYYY)); - sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE, bodyPlaceholders, null); + sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE, bodyPlaceholders, null,true,amendmentRequest.getId()); } public void sendAdmissibilityNotificationEmailForApprovedApplication(ApplicationEntity applicationEntity) { @@ -165,7 +168,7 @@ public class EmailNotificationDao { bodyPlaceholders.put("{{protocol_date}}", DateTimeUtil.formatCreatedDate(applicationEntity.getProtocol().getCreatedDate())); bodyPlaceholders.put("{{protocol_time}}", DateTimeUtil.parseLocalTimeToString(applicationEntity.getProtocol().getTime(), GepafinConstant.HH_MM_SS)); - sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.ADMISSIBILITY_NOTIFICATION, bodyPlaceholders, null); + sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.ADMISSIBILITY_NOTIFICATION, bodyPlaceholders, null,false,null); } public void sendInadmissibilityEmailForRejectedApplication(ApplicationEntity applicationEntity,ApplicationEvaluationEntity applicationEvaluationEntity) { @@ -176,7 +179,7 @@ public class EmailNotificationDao { bodyPlaceholders.put("{{protocol_time}}", DateTimeUtil.parseLocalTimeToString(applicationEntity.getProtocol().getTime(), GepafinConstant.HH_MM_SS)); bodyPlaceholders.put("{{form_text}}", applicationEvaluationEntity.getNote()); - sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.INADMISSIBILITY_TEMPLATE, bodyPlaceholders, null); + sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.INADMISSIBILITY_TEMPLATE, bodyPlaceholders, null,false,null); } public void sendMail(Long hubId, String subject, String body, List recipientEmails, EmailLogRequest emailLogRequest) { diff --git a/src/main/java/net/gepafin/tendermanagement/enums/EmailServiceTypeEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/EmailServiceTypeEnum.java index 8a22c69c..49c14743 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/EmailServiceTypeEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/EmailServiceTypeEnum.java @@ -4,8 +4,8 @@ import com.fasterxml.jackson.annotation.JsonValue; public enum EmailServiceTypeEnum { - MAILGUN("MAILGUN"), - PEC("PEC"); + MAILGUN_SERVICE("MAILGUN_SERVICE"), + PEC_SERVICE("PEC_SERVICE"); private String value; diff --git a/src/main/java/net/gepafin/tendermanagement/service/feignClient/MailgunFeignClient.java b/src/main/java/net/gepafin/tendermanagement/service/feignClient/MailgunFeignClient.java deleted file mode 100644 index 3006ef51..00000000 --- a/src/main/java/net/gepafin/tendermanagement/service/feignClient/MailgunFeignClient.java +++ /dev/null @@ -1,40 +0,0 @@ -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.*; - -import java.util.List; - -//@FeignClient(name = "mailgunClient", url = "${mailGun_base_url}") -public interface MailgunFeignClient { -// @PostMapping(value = "/v3/{domain}/messages", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) -// ResponseEntity sendEmail( @RequestPart("from") String from, -// @RequestPart("to") List 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 to; -// public String subject; -// public String htmlBody; -// -// public PayloadDTO(String from, List to, String subject, String htmlBody) { -// this.from = from; -// this.to = to; -// this.subject = subject; -// this.htmlBody = htmlBody; -// } -// -// } -} - - diff --git a/src/main/java/net/gepafin/tendermanagement/service/feignClient/PecFeignClient.java b/src/main/java/net/gepafin/tendermanagement/service/feignClient/PecFeignClient.java deleted file mode 100644 index f6fe99f6..00000000 --- a/src/main/java/net/gepafin/tendermanagement/service/feignClient/PecFeignClient.java +++ /dev/null @@ -1,18 +0,0 @@ -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}") -public interface PecFeignClient { -// @PostMapping("/send") -// ResponseEntity sendEmail(@RequestHeader HttpHeaders headers, -// @RequestBody PecEmailRequest emailRequest); -} - diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/MailgunEmailService.java b/src/main/java/net/gepafin/tendermanagement/service/impl/MailgunEmailService.java index 97c75667..3bf2ecd8 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/MailgunEmailService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/MailgunEmailService.java @@ -2,14 +2,12 @@ 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; @@ -61,14 +59,14 @@ public class MailgunEmailService implements EmailService { .asString(); }catch(Exception e) { emailLogRequest.setSendStatus(StatusTypeEnum.FAILED.getValue()); - emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.MAILGUN); + emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.MAILGUN_SERVICE); emailLogRequest.setErrorMessage(e.getMessage()); EmailLogEntity emailLogEntity= emailLogDao.createEmailLog(emailLogRequest); throw new RuntimeException("Failed to send email via Mailgun: " + response2.getStatus()); } emailLogRequest.setEmailServiceResponse(response2.getBody()); } - emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.MAILGUN); + emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.MAILGUN_SERVICE); EmailLogEntity emailLogEntity= emailLogDao.createEmailLog(emailLogRequest); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java b/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java index 8d6667d5..81991f69 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java @@ -1,11 +1,8 @@ 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; @@ -13,14 +10,11 @@ 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; import java.util.List; @@ -47,11 +41,11 @@ public class PecEmailService implements EmailService { 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; @@ -66,14 +60,14 @@ public class PecEmailService implements EmailService { .asString(); }catch(Exception e) { emailLogRequest.setSendStatus(StatusTypeEnum.FAILED.getValue()); - emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.PEC); + emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.PEC_SERVICE); emailLogRequest.setErrorMessage(e.getMessage()); EmailLogEntity emailLogEntity= emailLogDao.createEmailLog(emailLogRequest); throw new RuntimeException("Failed to send email via PEC: " + response2.getStatus()); } emailLogRequest.setEmailServiceResponse(response2.getBody()); } - emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.PEC); + emailLogRequest.setEmailServiceType(EmailServiceTypeEnum.PEC_SERVICE); EmailLogEntity emailLogEntity= emailLogDao.createEmailLog(emailLogRequest); } } diff --git a/src/main/resources/db/changelog/db.changelog-1.0.0.xml b/src/main/resources/db/changelog/db.changelog-1.0.0.xml index c3345556..58641af4 100644 --- a/src/main/resources/db/changelog/db.changelog-1.0.0.xml +++ b/src/main/resources/db/changelog/db.changelog-1.0.0.xml @@ -1759,12 +1759,11 @@ path="db/dump/updated_hub_data_for_email_service_config_15-11-2024.sql"/> - - + @@ -1772,4 +1771,10 @@ + + + + + + From dac9610b0f99e10c6ae2cf7e60588f0e4aec1e73 Mon Sep 17 00:00:00 2001 From: nisha Date: Mon, 18 Nov 2024 12:25:13 +0530 Subject: [PATCH 6/7] Updated code --- .../java/net/gepafin/tendermanagement/dao/EmailLogDao.java | 2 ++ .../net/gepafin/tendermanagement/dao/EmailNotificationDao.java | 2 +- .../net/gepafin/tendermanagement/entities/EmailLogEntity.java | 3 +++ .../tendermanagement/repositories/EmailLogRepository.java | 2 +- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EmailLogDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EmailLogDao.java index 8b6a8ea3..297e94d0 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EmailLogDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailLogDao.java @@ -32,6 +32,8 @@ public class EmailLogDao { emailLogEntity.setUserId(emailLogRequest.getUserId()); emailLogEntity.setEmailServiceResponse(emailLogRequest.getEmailServiceResponse()); emailLogEntity.setRecipientEmails(emailLogRequest.getRecipientEmails()); + emailLogEntity.setEmailServiceType(emailLogRequest.getEmailServiceType().getValue()); + emailLogEntity.setIsDeleted(false); if(emailLogRequest.getEntityId()!=null && emailLogRequest.getEntityId()>0){ emailLogEntity.setEntityId(emailLogRequest.getEntityId()); emailLogEntity.setEntityType(emailLogRequest.getEntitytype().getValue()); diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java index 02eea873..5c06a906 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java @@ -151,7 +151,7 @@ public class EmailNotificationDao { Map bodyPlaceholders = new HashMap<>(); bodyPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName()); LocalDateTime lastReminderDateTime=amendmentRequest.getCreatedDate(); - List emailLogEntity = emailLogRepository.findByUserIdAndEntityIdAndEntityType(user.getId(),amendmentRequest.getId(),EmailEntityTypeEnum.AMENDMENT.getValue()); + List emailLogEntity = emailLogRepository.findByUserIdAndEntityIdAndEntityTypeAndIsDeletedFalse(user.getId(),amendmentRequest.getId(),EmailEntityTypeEnum.AMENDMENT.getValue()); if(emailLogEntity!=null && (!emailLogEntity.isEmpty())){ EmailLogEntity emailLogEntity1=emailLogEntity.get(0); lastReminderDateTime=emailLogEntity1.getSendDateTime(); diff --git a/src/main/java/net/gepafin/tendermanagement/entities/EmailLogEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/EmailLogEntity.java index 848e895b..8c2729a1 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/EmailLogEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/EmailLogEntity.java @@ -50,5 +50,8 @@ public class EmailLogEntity extends BaseEntity{ @Column(name = "entity_type") private String entityType; + + @Column(name = "is_deleted") + private Boolean isDeleted; } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/EmailLogRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/EmailLogRepository.java index ec181249..8cc9b470 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/EmailLogRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/EmailLogRepository.java @@ -7,5 +7,5 @@ import java.util.List; public interface EmailLogRepository extends JpaRepository { - List findByUserIdAndEntityIdAndEntityType(Long userId,Long entityId,String entityType); + List findByUserIdAndEntityIdAndEntityTypeAndIsDeletedFalse(Long userId,Long entityId,String entityType); } From 0342d1b2eb767a29b90696aec808457f2d625058 Mon Sep 17 00:00:00 2001 From: nisha Date: Mon, 18 Nov 2024 16:49:01 +0530 Subject: [PATCH 7/7] Updated code --- .../dao/ApplicationAmendmentRequestDao.java | 2 +- .../tendermanagement/dao/ApplicationDao.java | 6 +++--- .../tendermanagement/dao/EmailLogDao.java | 19 +++++++------------ .../dao/EmailNotificationDao.java | 18 +++++++----------- .../entities/EmailLogEntity.java | 11 +++++++---- .../model/request/EmailLogRequest.java | 10 ++++++---- .../repositories/EmailLogRepository.java | 2 +- .../service/impl/MailgunEmailService.java | 4 +++- .../service/impl/PecEmailService.java | 3 +++ .../db/changelog/db.changelog-1.0.0.xml | 8 ++++++++ 10 files changed, 46 insertions(+), 37 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java index 6cbd132f..a4da3b00 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java @@ -733,7 +733,7 @@ public class ApplicationAmendmentRequestDao { String body = prepareBody(emailTemplate, amendment, beneficiaryUser); String email = beneficiaryUser.getEmail(); if (Boolean.TRUE.equals(amendment.getIsEmail())&&email != null && !email.isEmpty()) { - EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(emailTemplate.getEmailScenario(),RecipientTypeEnum.USER,beneficiaryUser.getId(),subject,body,StatusTypeEnum.SUCCESS.getValue(), null,amendment.getId(), EmailEntityTypeEnum.AMENDMENT,beneficiaryUser.getEmail(),beneficiaryUser.getId()); + EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(emailTemplate.getEmailScenario(),RecipientTypeEnum.USER,beneficiaryUser.getId(),email,beneficiaryUser.getId(),applicationEntity.getId(),amendment.getId(),applicationEntity.getCall().getId()); 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)); diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index 4023ec93..81165ca4 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -787,8 +787,8 @@ public class ApplicationDao { // Replace placeholders in the subject and body String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders); String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders); - EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(),RecipientTypeEnum.USER,userEntity.getId(),subject,body, StatusTypeEnum.SUCCESS.getValue(), null,applicationEntity.getId(), EmailEntityTypeEnum.APPLICATION,userEntity.getEmail(),userEntity.getId()); - String email = userEntity.getEmail(); + EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(),RecipientTypeEnum.USER,userEntity.getId(),userEntity.getEmail(),userEntity.getId(),applicationEntity.getId(),null,applicationEntity.getCall().getId()); + String email = userEntity.getEmail(); if (userEntity.getBeneficiary() != null) { emailLogRequest.setRecipientType(RecipientTypeEnum.BENEFICIARY); email = userEntity.getBeneficiary().getEmail(); @@ -839,7 +839,7 @@ public class ApplicationDao { String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders); String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders); - EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(),RecipientTypeEnum.PROPERTIES,null,subject,body,StatusTypeEnum.SUCCESS.getValue(), null,applicationEntity.getId(), EmailEntityTypeEnum.APPLICATION,userEntity.getEmail(),userEntity.getId()); + EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(),RecipientTypeEnum.PROPERTIES,null,userEntity.getEmail(),userEntity.getId(),applicationEntity.getId(),null,applicationEntity.getCall().getId()); // mailUtil.sendByMailGun(subject, body, List.of(defaultSystemReceiverEmail), null); // mailUtil.sendByMailGun(subject, body, List.of(gepafinEmail), null); diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EmailLogDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EmailLogDao.java index 297e94d0..5775daf1 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EmailLogDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailLogDao.java @@ -34,10 +34,9 @@ public class EmailLogDao { emailLogEntity.setRecipientEmails(emailLogRequest.getRecipientEmails()); emailLogEntity.setEmailServiceType(emailLogRequest.getEmailServiceType().getValue()); emailLogEntity.setIsDeleted(false); - if(emailLogRequest.getEntityId()!=null && emailLogRequest.getEntityId()>0){ - emailLogEntity.setEntityId(emailLogRequest.getEntityId()); - emailLogEntity.setEntityType(emailLogRequest.getEntitytype().getValue()); - } + emailLogEntity.setApplicationId(emailLogRequest.getApplicatioId()); + emailLogEntity.setAmendmentId(emailLogRequest.getAmendmentId()); + emailLogEntity.setCallId(emailLogRequest.getCallId()); emailLogEntity=saveEmailLogEntity(emailLogEntity); return emailLogEntity; } @@ -45,20 +44,16 @@ public class EmailLogDao { return emailLogRepository.save(emailLogEntity); } public EmailLogRequest createEmailLogRequest(EmailScenarioTypeEnum emailType, RecipientTypeEnum recipientType, Long recipientId, - String emailSubject, String emailBody, String sendStatus, - String errorMessage, Long entityId, EmailEntityTypeEnum entityType, String recipientEmails, Long userId) { + String recipientEmails, Long userId,Long applicationId,Long amendmentId,Long callId) { 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.setUserId(userId); - emailLogRequest.setEntityId(entityId); - emailLogRequest.setEntitytype(entityType); emailLogRequest.setRecipientEmails(recipientEmails); + emailLogRequest.setApplicatioId(applicationId); + emailLogRequest.setAmendmentId(amendmentId); + emailLogRequest.setCallId(callId); return emailLogRequest; } } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java index 5c06a906..2f193047 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/EmailNotificationDao.java @@ -61,7 +61,7 @@ public class EmailNotificationDao { private void sendEmail(ApplicationEntity applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum templateType, - Map bodyPlaceholders, List additionalRecipients,Boolean isAmendment,Long amendmentId) { + Map bodyPlaceholders, List additionalRecipients,Long amendmentId) { HubEntity hubEntity = hubService.valdateHub(applicationEntity.getHubId()); String service = determineService(applicationEntity.getHubId()); @@ -77,11 +77,7 @@ public class EmailNotificationDao { UserEntity userEntity = userService.validateUser(applicationEntity.getUserId()); List recipientEmails = getRecipientEmails(applicationEntity, userEntity, additionalRecipients); - EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.BENEFICIARY,userEntity.getBeneficiary().getId(),subject,body, StatusTypeEnum.SUCCESS.getValue(), null, applicationEntity.getId(), EmailEntityTypeEnum.APPLICATION,Utils.listToCommaSeparatedString(recipientEmails),userEntity.getId()); - if(Boolean.TRUE.equals(isAmendment) && amendmentId !=null){ - emailLogRequest.setEntitytype(EmailEntityTypeEnum.AMENDMENT); - emailLogRequest.setEntityId(amendmentId); - } + EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.BENEFICIARY,userEntity.getBeneficiary().getId(),Utils.listToCommaSeparatedString(recipientEmails),userEntity.getId(),applicationEntity.getId(),amendmentId ,applicationEntity.getCall().getId()); sendMail(applicationEntity.getHubId(), subject, body, recipientEmails,emailLogRequest); } private List getRecipientEmails(ApplicationEntity applicationEntity, UserEntity userEntity, List additionalRecipients) { @@ -141,7 +137,7 @@ public class EmailNotificationDao { log.error("Failed to parse form fields JSON: ", e); } bodyPlaceholders.put("{{note}}", applicationAmendmentRequest.getNote()); - sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.DOCUMENTATION_INTEGRATION_REQUEST, bodyPlaceholders, null,true,applicationAmendmentRequest.getId()); + sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.DOCUMENTATION_INTEGRATION_REQUEST, bodyPlaceholders, null,applicationAmendmentRequest.getId()); } public void sendApplicationFailureNotificationEmail(ApplicationAmendmentRequestEntity amendmentRequest) { @@ -151,14 +147,14 @@ public class EmailNotificationDao { Map bodyPlaceholders = new HashMap<>(); bodyPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName()); LocalDateTime lastReminderDateTime=amendmentRequest.getCreatedDate(); - List emailLogEntity = emailLogRepository.findByUserIdAndEntityIdAndEntityTypeAndIsDeletedFalse(user.getId(),amendmentRequest.getId(),EmailEntityTypeEnum.AMENDMENT.getValue()); + List emailLogEntity = emailLogRepository.findByUserIdAndAmendmentIdAndIsDeletedFalse(user.getId(),amendmentRequest.getId()); 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(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE, bodyPlaceholders, null,true,amendmentRequest.getId()); + sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.INADMISSIBILITY_NOTIFICATION_DUE_TO_FAILURE, bodyPlaceholders, null,amendmentRequest.getId()); } public void sendAdmissibilityNotificationEmailForApprovedApplication(ApplicationEntity applicationEntity) { @@ -168,7 +164,7 @@ public class EmailNotificationDao { bodyPlaceholders.put("{{protocol_date}}", DateTimeUtil.formatCreatedDate(applicationEntity.getProtocol().getCreatedDate())); bodyPlaceholders.put("{{protocol_time}}", DateTimeUtil.parseLocalTimeToString(applicationEntity.getProtocol().getTime(), GepafinConstant.HH_MM_SS)); - sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.ADMISSIBILITY_NOTIFICATION, bodyPlaceholders, null,false,null); + sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.ADMISSIBILITY_NOTIFICATION, bodyPlaceholders, null,null); } public void sendInadmissibilityEmailForRejectedApplication(ApplicationEntity applicationEntity,ApplicationEvaluationEntity applicationEvaluationEntity) { @@ -179,7 +175,7 @@ public class EmailNotificationDao { bodyPlaceholders.put("{{protocol_time}}", DateTimeUtil.parseLocalTimeToString(applicationEntity.getProtocol().getTime(), GepafinConstant.HH_MM_SS)); bodyPlaceholders.put("{{form_text}}", applicationEvaluationEntity.getNote()); - sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.INADMISSIBILITY_TEMPLATE, bodyPlaceholders, null,false,null); + sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.INADMISSIBILITY_TEMPLATE, bodyPlaceholders, null,null); } public void sendMail(Long hubId, String subject, String body, List recipientEmails, EmailLogRequest emailLogRequest) { diff --git a/src/main/java/net/gepafin/tendermanagement/entities/EmailLogEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/EmailLogEntity.java index 8c2729a1..03ad4c2b 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/EmailLogEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/EmailLogEntity.java @@ -45,11 +45,14 @@ public class EmailLogEntity extends BaseEntity{ @Column(name = "user_id") private Long userId; - @Column(name = "entity_id") - private Long entityId; + @Column(name = "application_id") + private Long applicationId; - @Column(name = "entity_type") - private String entityType; + @Column(name = "amendment_id") + private Long amendmentId; + + @Column(name = "call_id") + private Long callId; @Column(name = "is_deleted") private Boolean isDeleted; diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/EmailLogRequest.java b/src/main/java/net/gepafin/tendermanagement/model/request/EmailLogRequest.java index b6e8c07b..b85f0e15 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/EmailLogRequest.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/EmailLogRequest.java @@ -23,10 +23,6 @@ public class EmailLogRequest { private String errorMessage; - private Long entityId; - - private EmailEntityTypeEnum entitytype; - private Long userId; private String emailServiceResponse; @@ -35,4 +31,10 @@ public class EmailLogRequest { private String recipientEmails; + private Long applicatioId; + + private Long amendmentId; + + private Long callId; + } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/EmailLogRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/EmailLogRepository.java index 8cc9b470..20475e0b 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/EmailLogRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/EmailLogRepository.java @@ -7,5 +7,5 @@ import java.util.List; public interface EmailLogRepository extends JpaRepository { - List findByUserIdAndEntityIdAndEntityTypeAndIsDeletedFalse(Long userId,Long entityId,String entityType); + List findByUserIdAndAmendmentIdAndIsDeletedFalse(Long userId,Long amendmentId); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/MailgunEmailService.java b/src/main/java/net/gepafin/tendermanagement/service/impl/MailgunEmailService.java index 3bf2ecd8..978ea459 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/MailgunEmailService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/MailgunEmailService.java @@ -45,7 +45,9 @@ public class MailgunEmailService implements EmailService { // Send email via Mailgun API HttpResponse response2=null; if (Boolean.FALSE.equals(validator.isTestProfileActivated())) { - + emailLogRequest.setEmailSubject(subject); + emailLogRequest.setEmailBody(body); + emailLogRequest.setSendStatus(StatusTypeEnum.SUCCESS.getValue()); emailLogRequest.setRecipientEmails(Utils.listToCommaSeparatedString(recipientEmails)); try { Unirest.setTimeouts(0, 0); diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java b/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java index 81991f69..4d076bb4 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/PecEmailService.java @@ -50,6 +50,9 @@ public class PecEmailService implements EmailService { 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 { Unirest.setTimeouts(0, 0); diff --git a/src/main/resources/db/changelog/db.changelog-1.0.0.xml b/src/main/resources/db/changelog/db.changelog-1.0.0.xml index 58641af4..a7fe774d 100644 --- a/src/main/resources/db/changelog/db.changelog-1.0.0.xml +++ b/src/main/resources/db/changelog/db.changelog-1.0.0.xml @@ -1775,6 +1775,14 @@ + + + + + + + +