Skip to content

Commit 804e081

Browse files
committed
#203 do an async call when sending bulk emails
1 parent 9f718b4 commit 804e081

File tree

2 files changed

+12
-9
lines changed

2 files changed

+12
-9
lines changed

src/main/java/alfio/controller/api/admin/CustomMessagesApiController.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,11 @@ public Map<String, Object> preview(@PathVariable("eventName") String eventName,
5353
}
5454

5555
@RequestMapping(value= "/send", method = RequestMethod.POST)
56-
public int send(@PathVariable("eventName") String eventName,
56+
public void send(@PathVariable("eventName") String eventName,
5757
@RequestParam(required = false, value = "categoryId") Integer categoryId,
5858
@RequestBody List<MessageModification> messageModifications,
5959
Principal principal) {
60-
return customMessageManager.sendMessages(eventName, Optional.ofNullable(categoryId), messageModifications, principal.getName());
60+
customMessageManager.sendMessages(eventName, Optional.ofNullable(categoryId), messageModifications, principal.getName());
6161
}
6262

6363
}

src/main/java/alfio/manager/support/CustomMessageManager.java

+10-7
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
import java.io.ByteArrayOutputStream;
4343
import java.io.IOException;
4444
import java.util.*;
45+
import java.util.concurrent.Executor;
46+
import java.util.concurrent.Executors;
4547
import java.util.concurrent.atomic.AtomicInteger;
4648
import java.util.stream.Collectors;
4749

@@ -57,23 +59,21 @@ public class CustomMessageManager {
5759
private final TicketReservationManager ticketReservationManager;
5860
private final NotificationManager notificationManager;
5961
private final TicketCategoryRepository ticketCategoryRepository;
60-
private final FileUploadManager fileUploadManager;
62+
private final Executor sendMessagesExecutor = Executors.newSingleThreadExecutor();
6163

6264
@Autowired
6365
public CustomMessageManager(TemplateManager templateManager,
6466
EventManager eventManager,
6567
TicketRepository ticketRepository,
6668
TicketReservationManager ticketReservationManager,
6769
NotificationManager notificationManager,
68-
TicketCategoryRepository ticketCategoryRepository,
69-
FileUploadManager fileUploadManager) {
70+
TicketCategoryRepository ticketCategoryRepository) {
7071
this.templateManager = templateManager;
7172
this.eventManager = eventManager;
7273
this.ticketRepository = ticketRepository;
7374
this.ticketReservationManager = ticketReservationManager;
7475
this.notificationManager = notificationManager;
7576
this.ticketCategoryRepository = ticketCategoryRepository;
76-
this.fileUploadManager = fileUploadManager;
7777
}
7878

7979
public Map<String, Object> generatePreview(String eventName, Optional<Integer> categoryId, List<MessageModification> input, String username) {
@@ -84,13 +84,16 @@ public Map<String, Object> generatePreview(String eventName, Optional<Integer> c
8484
return result;
8585
}
8686

87-
public int sendMessages(String eventName, Optional<Integer> categoryId, List<MessageModification> input, String username) {
87+
public void sendMessages(String eventName, Optional<Integer> categoryId, List<MessageModification> input, String username) {
88+
8889
Event event = eventManager.getSingleEvent(eventName, username);
8990
preview(event, input, username);//dry run for checking the syntax
9091
Organization organization = eventManager.loadOrganizer(event, username);
9192
AtomicInteger counter = new AtomicInteger();
9293
Map<String, List<MessageModification>> byLanguage = input.stream().collect(Collectors.groupingBy(m -> m.getLocale().getLanguage()));
93-
categoryId.map(id -> ticketRepository.findConfirmedByCategoryId(event.getId(), id))
94+
95+
sendMessagesExecutor.execute(() -> {
96+
categoryId.map(id -> ticketRepository.findConfirmedByCategoryId(event.getId(), id))
9497
.orElseGet(() -> ticketRepository.findAllConfirmed(event.getId()))
9598
.stream()
9699
.filter(t -> isNotBlank(t.getFullName()) && isNotBlank(t.getEmail()))
@@ -123,7 +126,7 @@ public int sendMessages(String eventName, Optional<Integer> categoryId, List<Mes
123126
counter.incrementAndGet();
124127
notificationManager.sendSimpleEmail(event, triple.getMiddle(), subject, () -> text, attachments);
125128
});
126-
return counter.get();
129+
});
127130

128131
}
129132

0 commit comments

Comments
 (0)