Skip to content

Commit 5ae8181

Browse files
committed
Added a mechanism to ensure we do not send too many emails.
1 parent f870a59 commit 5ae8181

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestServicesImpl.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,16 @@
2828
import java.io.BufferedReader;
2929
import java.time.format.DateTimeFormatter;
3030
import java.time.LocalDate;
31+
import java.time.LocalDateTime;
3132
import java.util.ArrayList;
3233
import java.util.HashSet;
3334
import java.util.List;
3435
import java.util.Objects;
3536
import java.util.Optional;
3637
import java.util.Set;
3738
import java.util.UUID;
39+
import java.util.Map;
40+
import java.util.HashMap;
3841

3942
import static com.objectcomputing.checkins.services.validate.PermissionsValidation.NOT_AUTHORIZED_MSG;
4043

@@ -52,8 +55,12 @@ public class FeedbackRequestServicesImpl implements FeedbackRequestServices {
5255
private final String notificationSubject;
5356
private final String webURL;
5457

58+
private final Map<UUID, LocalDateTime> externalSent = new HashMap<>();
59+
private final int minutesBetweenVerifiedEmail = 5;
60+
5561
private enum CompletionEmailType { REVIEWERS, SUPERVISOR }
5662
private record ReviewPeriodInfo(String subject, LocalDate closeDate) {}
63+
5764
@Value("classpath:mjml/feedback_request.mjml")
5865
private Readable feedbackRequestTemplate;
5966
@Value("classpath:mjml/external_feedback_request.mjml")
@@ -156,6 +163,18 @@ public boolean verifyExternal(FeedbackRequest feedbackRequest) {
156163
return false;
157164
}
158165

166+
// Aside from persisting the send time, we can, at the very least,
167+
// ensure that we do not spam the requestee with email in the event
168+
// that someone wanted to do so.
169+
UUID requestId = feedbackRequest.getId();
170+
LocalDateTime now = LocalDateTime.now();
171+
if (externalSent.containsKey(requestId)) {
172+
LocalDateTime sent = externalSent.get(requestId);
173+
if (sent.plusMinutes(minutesBetweenVerifiedEmail).isAfter(now)) {
174+
return false;
175+
}
176+
}
177+
159178
MemberProfile creator = memberProfileServices.getById(feedbackRequest.getCreatorId());
160179
MemberProfile requestee = memberProfileServices.getById(feedbackRequest.getRequesteeId());
161180
UUID recipientOrExternalRecipientId = feedbackRequest.getExternalRecipientId();
@@ -172,6 +191,7 @@ public boolean verifyExternal(FeedbackRequest feedbackRequest) {
172191
notificationSubject, newContent,
173192
reviewerExternalRecipient.getEmail()
174193
);
194+
externalSent.put(requestId, now);
175195
return true;
176196
}
177197

0 commit comments

Comments
 (0)