Skip to content

Commit

Permalink
#579 don't load the full event when sending the email
Browse files Browse the repository at this point in the history
  • Loading branch information
syjer committed Jan 13, 2019
1 parent 0f0e773 commit 0c92571
Show file tree
Hide file tree
Showing 8 changed files with 33 additions and 25 deletions.
13 changes: 6 additions & 7 deletions src/main/java/alfio/manager/NotificationManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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 {
Expand All @@ -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()));
}

Expand Down
5 changes: 3 additions & 2 deletions src/main/java/alfio/manager/system/DefaultMailer.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -47,15 +48,15 @@ public DefaultMailer(ConfigurationManager configurationManager, Environment envi
}

@Override
public void send(Event event, String to, List<String> cc, String subject, String text,
public void send(EventAndOrganizationId event, String fromName, String to, List<String> cc, String subject, String text,
Optional<String> html, Attachment... attachments) {

subject = decorateSubjectIfDemo(subject, environment);

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);
}

}
4 changes: 2 additions & 2 deletions src/main/java/alfio/manager/system/Mailer.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -26,7 +26,7 @@

public interface Mailer {

void send(Event event, String to, List<String> cc, String subject, String text, Optional<String> html, Attachment... attachment);
void send(EventAndOrganizationId event, String fromName, String to, List<String> cc, String subject, String text, Optional<String> html, Attachment... attachment);

@Data
class Attachment {
Expand Down
10 changes: 5 additions & 5 deletions src/main/java/alfio/manager/system/MailgunMailer.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -39,10 +39,10 @@ class MailgunMailer implements Mailer {
private final ConfigurationManager configurationManager;


private RequestBody prepareBody(Event event, String to, List<String> cc, String subject, String text,
private RequestBody prepareBody(EventAndOrganizationId event, String fromName, String to, List<String> cc, String subject, String text,
Optional<String> 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()
Expand Down Expand Up @@ -88,7 +88,7 @@ private RequestBody prepareBody(Event event, String to, List<String> cc, String
}

@Override
public void send(Event event, String to, List<String> cc, String subject, String text,
public void send(EventAndOrganizationId event, String fromName, String to, List<String> cc, String subject, String text,
Optional<String> html, Attachment... attachment) {

String apiKey = configurationManager.getRequiredValue(Configuration.from(event, MAILGUN_KEY));
Expand All @@ -98,7 +98,7 @@ public void send(Event event, String to, List<String> 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()
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/alfio/manager/system/MailjetMailer.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -40,7 +40,7 @@ public MailjetMailer(ConfigurationManager configurationManager) {
}

@Override
public void send(Event event, String to, List<String> cc, String subject, String text, Optional<String> html, Attachment... attachment) {
public void send(EventAndOrganizationId event, String fromName, String to, List<String> cc, String subject, String text, Optional<String> 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));

Expand All @@ -56,7 +56,7 @@ public void send(Event event, String to, List<String> 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));
Expand Down
5 changes: 3 additions & 2 deletions src/main/java/alfio/manager/system/MockMailer.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -38,7 +39,7 @@ public class MockMailer implements Mailer {
private final Environment environment;

@Override
public void send(Event event, String to, List<String> cc, String subject, String text, Optional<String> html, Attachment... attachments) {
public void send(EventAndOrganizationId event, String fromName, String to, List<String> cc, String subject, String text, Optional<String> html, Attachment... attachments) {

subject = decorateSubjectIfDemo(subject, environment);

Expand All @@ -49,7 +50,7 @@ public void send(Event event, String to, List<String> 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);
Expand Down
8 changes: 4 additions & 4 deletions src/main/java/alfio/manager/system/SmtpMailer.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -52,13 +52,13 @@ class SmtpMailer implements Mailer {
private final ConfigurationManager configurationManager;

@Override
public void send(Event event, String to, List<String> cc, String subject, String text,
public void send(EventAndOrganizationId event, String fromName, String to, List<String> cc, String subject, String text,
Optional<String> 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);
Expand All @@ -85,7 +85,7 @@ public void send(Event event, String to, List<String> 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");

Expand Down
7 changes: 7 additions & 0 deletions src/main/java/alfio/repository/EventRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -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.*;
Expand All @@ -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<Event> findOptionalById(@Bind("eventId") int eventId);

Expand Down

0 comments on commit 0c92571

Please sign in to comment.