2828import java .io .BufferedReader ;
2929import java .time .format .DateTimeFormatter ;
3030import java .time .LocalDate ;
31+ import java .time .LocalDateTime ;
3132import java .util .ArrayList ;
3233import java .util .HashSet ;
3334import java .util .List ;
3435import java .util .Objects ;
3536import java .util .Optional ;
3637import java .util .Set ;
3738import java .util .UUID ;
39+ import java .util .Map ;
40+ import java .util .HashMap ;
3841
3942import 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