From 0c92571f755435da3212abbd0185a417211888c9 Mon Sep 17 00:00:00 2001 From: Sylvain Jermini Date: Sun, 13 Jan 2019 17:14:27 +0100 Subject: [PATCH] #579 don't load the full event when sending the email --- .../java/alfio/manager/NotificationManager.java | 13 ++++++------- .../java/alfio/manager/system/DefaultMailer.java | 5 +++-- src/main/java/alfio/manager/system/Mailer.java | 4 ++-- .../java/alfio/manager/system/MailgunMailer.java | 10 +++++----- .../java/alfio/manager/system/MailjetMailer.java | 6 +++--- src/main/java/alfio/manager/system/MockMailer.java | 5 +++-- src/main/java/alfio/manager/system/SmtpMailer.java | 8 ++++---- src/main/java/alfio/repository/EventRepository.java | 7 +++++++ 8 files changed, 33 insertions(+), 25 deletions(-) diff --git a/src/main/java/alfio/manager/NotificationManager.java b/src/main/java/alfio/manager/NotificationManager.java index 670590dcd7..029b14a68e 100644 --- a/src/main/java/alfio/manager/NotificationManager.java +++ b/src/main/java/alfio/manager/NotificationManager.java @@ -269,9 +269,8 @@ public int sendWaitingMessages() { private int processMessage(int messageId) { EmailMessage message = emailMessageRepository.findById(messageId); - int eventId = message.getEventId(); - int organizationId = eventRepository.findOrganizationIdByEventId(eventId); - if(message.getAttempts() >= configurationManager.getIntConfigValue(Configuration.from(new EventAndOrganizationId(eventId, organizationId), ConfigurationKeys.MAIL_ATTEMPTS_COUNT), 10)) { + EventAndOrganizationId event = eventRepository.findEventAndOrganizationIdById(message.getEventId()); + if(message.getAttempts() >= configurationManager.getIntConfigValue(Configuration.from(event, ConfigurationKeys.MAIL_ATTEMPTS_COUNT), 10)) { tx.execute(status -> emailMessageRepository.updateStatusAndAttempts(messageId, ERROR.name(), message.getAttempts(), Arrays.asList(IN_PROCESS.name(), WAITING.name(), RETRY.name()))); log.warn("Message with id " + messageId + " will be discarded"); return 0; @@ -282,7 +281,7 @@ private int processMessage(int messageId) { int result = Optional.ofNullable(tx.execute(status -> emailMessageRepository.updateStatus(message.getEventId(), message.getChecksum(), IN_PROCESS.name(), Arrays.asList(WAITING.name(), RETRY.name())))).orElse(0); if(result > 0) { return Optional.ofNullable(tx.execute(status -> { - sendMessage(message); + sendMessage(event, message); return 1; })).orElse(0); } else { @@ -295,9 +294,9 @@ private int processMessage(int messageId) { return 0; } - private void sendMessage(EmailMessage message) { - Event event = eventRepository.findById(message.getEventId()); - mailer.send(event, message.getRecipient(), message.getCc(), message.getSubject(), message.getMessage(), Optional.empty(), decodeAttachments(message.getAttachments())); + private void sendMessage(EventAndOrganizationId event, EmailMessage message) { + String displayName = eventRepository.getDisplayNameById(message.getEventId()); + mailer.send(event, displayName, message.getRecipient(), message.getCc(), message.getSubject(), message.getMessage(), Optional.empty(), decodeAttachments(message.getAttachments())); emailMessageRepository.updateStatusToSent(message.getEventId(), message.getChecksum(), ZonedDateTime.now(UTC), Collections.singletonList(IN_PROCESS.name())); } diff --git a/src/main/java/alfio/manager/system/DefaultMailer.java b/src/main/java/alfio/manager/system/DefaultMailer.java index 42ac928963..cd8d8c572a 100644 --- a/src/main/java/alfio/manager/system/DefaultMailer.java +++ b/src/main/java/alfio/manager/system/DefaultMailer.java @@ -17,6 +17,7 @@ package alfio.manager.system; import alfio.model.Event; +import alfio.model.EventAndOrganizationId; import alfio.model.system.Configuration; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; @@ -47,7 +48,7 @@ public DefaultMailer(ConfigurationManager configurationManager, Environment envi } @Override - public void send(Event event, String to, List cc, String subject, String text, + public void send(EventAndOrganizationId event, String fromName, String to, List cc, String subject, String text, Optional html, Attachment... attachments) { subject = decorateSubjectIfDemo(subject, environment); @@ -55,7 +56,7 @@ public void send(Event event, String to, List cc, String subject, String String mailerType = configurationManager.getStringConfigValue(Configuration.from(event, MAILER_TYPE), "disabled").toLowerCase(Locale.ENGLISH); mailers.getOrDefault(mailerType, defaultMailer) - .send(event, to, cc, subject, text, html, attachments); + .send(event, fromName, to, cc, subject, text, html, attachments); } } \ No newline at end of file diff --git a/src/main/java/alfio/manager/system/Mailer.java b/src/main/java/alfio/manager/system/Mailer.java index e159cc91de..2b073c8b8f 100644 --- a/src/main/java/alfio/manager/system/Mailer.java +++ b/src/main/java/alfio/manager/system/Mailer.java @@ -17,7 +17,7 @@ package alfio.manager.system; import alfio.config.Initializer; -import alfio.model.Event; +import alfio.model.EventAndOrganizationId; import lombok.Data; import org.springframework.core.env.Environment; import org.springframework.core.env.Profiles; @@ -26,7 +26,7 @@ public interface Mailer { - void send(Event event, String to, List cc, String subject, String text, Optional html, Attachment... attachment); + void send(EventAndOrganizationId event, String fromName, String to, List cc, String subject, String text, Optional html, Attachment... attachment); @Data class Attachment { diff --git a/src/main/java/alfio/manager/system/MailgunMailer.java b/src/main/java/alfio/manager/system/MailgunMailer.java index 0addecc0e3..116b3c358e 100644 --- a/src/main/java/alfio/manager/system/MailgunMailer.java +++ b/src/main/java/alfio/manager/system/MailgunMailer.java @@ -16,7 +16,7 @@ */ package alfio.manager.system; -import alfio.model.Event; +import alfio.model.EventAndOrganizationId; import alfio.model.system.Configuration; import lombok.AllArgsConstructor; import lombok.extern.log4j.Log4j2; @@ -39,10 +39,10 @@ class MailgunMailer implements Mailer { private final ConfigurationManager configurationManager; - private RequestBody prepareBody(Event event, String to, List cc, String subject, String text, + private RequestBody prepareBody(EventAndOrganizationId event, String fromName, String to, List cc, String subject, String text, Optional html, Attachment... attachments) { - String from = event.getDisplayName() + " <" + configurationManager.getRequiredValue(Configuration.from(event, MAILGUN_FROM)) +">"; + String from = fromName + " <" + configurationManager.getRequiredValue(Configuration.from(event, MAILGUN_FROM)) +">"; if (ArrayUtils.isEmpty(attachments)) { FormBody.Builder builder = new FormBody.Builder() @@ -88,7 +88,7 @@ private RequestBody prepareBody(Event event, String to, List cc, String } @Override - public void send(Event event, String to, List cc, String subject, String text, + public void send(EventAndOrganizationId event, String fromName, String to, List cc, String subject, String text, Optional html, Attachment... attachment) { String apiKey = configurationManager.getRequiredValue(Configuration.from(event, MAILGUN_KEY)); @@ -98,7 +98,7 @@ public void send(Event event, String to, List cc, String subject, String String baseUrl = useEU ? "https://api.eu.mailgun.net/v3/" : "https://api.mailgun.net/v3/"; try { - RequestBody formBody = prepareBody(event, to, cc, subject, text, html, + RequestBody formBody = prepareBody(event, fromName, to, cc, subject, text, html, attachment); Request request = new Request.Builder() diff --git a/src/main/java/alfio/manager/system/MailjetMailer.java b/src/main/java/alfio/manager/system/MailjetMailer.java index b0f33da5e9..01f5773fb2 100644 --- a/src/main/java/alfio/manager/system/MailjetMailer.java +++ b/src/main/java/alfio/manager/system/MailjetMailer.java @@ -16,7 +16,7 @@ */ package alfio.manager.system; -import alfio.model.Event; +import alfio.model.EventAndOrganizationId; import alfio.model.system.Configuration; import alfio.model.system.ConfigurationKeys; import alfio.util.Json; @@ -40,7 +40,7 @@ public MailjetMailer(ConfigurationManager configurationManager) { } @Override - public void send(Event event, String to, List cc, String subject, String text, Optional html, Attachment... attachment) { + public void send(EventAndOrganizationId event, String fromName, String to, List cc, String subject, String text, Optional html, Attachment... attachment) { String apiKeyPublic = configurationManager.getRequiredValue(Configuration.from(event, ConfigurationKeys.MAILJET_APIKEY_PUBLIC)); String apiKeyPrivate = configurationManager.getRequiredValue(Configuration.from(event, ConfigurationKeys.MAILJET_APIKEY_PRIVATE)); @@ -56,7 +56,7 @@ public void send(Event event, String to, List cc, String subject, String } mailPayload.put("FromEmail", fromEmail); - mailPayload.put("FromName", event.getDisplayName()); + mailPayload.put("FromName", fromName); mailPayload.put("Subject", subject); mailPayload.put("Text-part", text); html.ifPresent(h -> mailPayload.put("Html-part", h)); diff --git a/src/main/java/alfio/manager/system/MockMailer.java b/src/main/java/alfio/manager/system/MockMailer.java index 790731dd3b..d8f7207a17 100644 --- a/src/main/java/alfio/manager/system/MockMailer.java +++ b/src/main/java/alfio/manager/system/MockMailer.java @@ -17,6 +17,7 @@ package alfio.manager.system; import alfio.model.Event; +import alfio.model.EventAndOrganizationId; import alfio.model.system.Configuration; import lombok.AllArgsConstructor; import lombok.extern.log4j.Log4j2; @@ -38,7 +39,7 @@ public class MockMailer implements Mailer { private final Environment environment; @Override - public void send(Event event, String to, List cc, String subject, String text, Optional html, Attachment... attachments) { + public void send(EventAndOrganizationId event, String fromName, String to, List cc, String subject, String text, Optional html, Attachment... attachments) { subject = decorateSubjectIfDemo(subject, environment); @@ -49,7 +50,7 @@ public void send(Event event, String to, List cc, String subject, String .collect(Collectors.joining(", ")); log.info("Email: from: {}, replyTo: {}, to: {}, cc: {}, subject: {}, text: {}, html: {}, attachments: {}", - event.getDisplayName(), + fromName, configurationManager.getStringConfigValue(Configuration.from(event, MAIL_REPLY_TO), ""), to, cc, subject, text, html.orElse("no html"), printedAttachments); diff --git a/src/main/java/alfio/manager/system/SmtpMailer.java b/src/main/java/alfio/manager/system/SmtpMailer.java index 4c1356c00d..34db828832 100644 --- a/src/main/java/alfio/manager/system/SmtpMailer.java +++ b/src/main/java/alfio/manager/system/SmtpMailer.java @@ -16,7 +16,7 @@ */ package alfio.manager.system; -import alfio.model.Event; +import alfio.model.EventAndOrganizationId; import alfio.model.system.Configuration; import lombok.AllArgsConstructor; import lombok.extern.log4j.Log4j2; @@ -52,13 +52,13 @@ class SmtpMailer implements Mailer { private final ConfigurationManager configurationManager; @Override - public void send(Event event, String to, List cc, String subject, String text, + public void send(EventAndOrganizationId event, String fromName, String to, List cc, String subject, String text, Optional html, Attachment... attachments) { MimeMessagePreparator preparator = (mimeMessage) -> { MimeMessageHelper message = html.isPresent() || !ArrayUtils.isEmpty(attachments) ? new MimeMessageHelper(mimeMessage, true, "UTF-8") : new MimeMessageHelper(mimeMessage, "UTF-8"); message.setSubject(subject); - message.setFrom(configurationManager.getRequiredValue(Configuration.from(event, SMTP_FROM_EMAIL)), event.getDisplayName()); + message.setFrom(configurationManager.getRequiredValue(Configuration.from(event, SMTP_FROM_EMAIL)), fromName); String replyTo = configurationManager.getStringConfigValue(Configuration.from(event, MAIL_REPLY_TO), ""); if(StringUtils.isNotBlank(replyTo)) { message.setReplyTo(replyTo); @@ -85,7 +85,7 @@ public void send(Event event, String to, List cc, String subject, String toMailSender(event).send(preparator); } - private JavaMailSender toMailSender(Event event) { + private JavaMailSender toMailSender(EventAndOrganizationId event) { JavaMailSenderImpl r = new CustomJavaMailSenderImpl(); r.setDefaultEncoding("UTF-8"); diff --git a/src/main/java/alfio/repository/EventRepository.java b/src/main/java/alfio/repository/EventRepository.java index c2626e51f5..6ad207d8e8 100644 --- a/src/main/java/alfio/repository/EventRepository.java +++ b/src/main/java/alfio/repository/EventRepository.java @@ -18,6 +18,7 @@ import alfio.manager.support.CheckInStatistics; import alfio.model.Event; +import alfio.model.EventAndOrganizationId; import alfio.model.EventStatisticView; import alfio.model.PriceContainer; import ch.digitalfondue.npjt.*; @@ -35,6 +36,12 @@ public interface EventRepository { @Query("select * from event where id = :eventId") Event findById(@Bind("eventId") int eventId); + @Query("select display_name from event where id = :eventId") + String getDisplayNameById(@Bind("eventId") int eventId); + + @Query("select id, org_id from event where id = :eventId") + EventAndOrganizationId findEventAndOrganizationIdById(@Bind("eventId") int eventId); + @Query("select * from event where id = :eventId") Optional findOptionalById(@Bind("eventId") int eventId);