Send out notifications when forum threads and posts are deleted

This commit is contained in:
Andreas Svanberg 2025-04-24 15:11:10 +02:00
parent 23295d3875
commit c3cbf57c19
9 changed files with 47 additions and 1 deletions

@ -0,0 +1,5 @@
package se.su.dsv.scipro.forum;
import se.su.dsv.scipro.project.Project;
public record ProjectForumPostDeletedEvent(Project project, String subject) {}

@ -129,6 +129,9 @@ public class ProjectForumServiceImpl implements ProjectForumService {
@Override
public void deletePost(ProjectThread projectThread, ForumPost post) {
basicForumService.deletePost(post);
eventBus.post(
new ProjectForumPostDeletedEvent(projectThread.getProject(), projectThread.getForumThread().getSubject())
);
}
@Override
@ -139,8 +142,11 @@ public class ProjectForumServiceImpl implements ProjectForumService {
@Override
@Transactional
public void deleteThread(ProjectThread projectThread) {
Project project = projectThread.getProject();
String subject = projectThread.getForumThread().getSubject();
projectThreadRepository.delete(projectThread);
basicForumService.deleteThread(projectThread.getForumThread());
eventBus.post(new ProjectForumThreadDeletedEvent(project, subject));
}
@Override

@ -0,0 +1,5 @@
package se.su.dsv.scipro.forum;
import se.su.dsv.scipro.project.Project;
public record ProjectForumThreadDeletedEvent(Project project, String subject) {}

@ -9,6 +9,8 @@ import java.util.function.Function;
import se.su.dsv.scipro.forum.ForumPostReadEvent;
import se.su.dsv.scipro.forum.NewGroupForumReplyEvent;
import se.su.dsv.scipro.forum.NewProjectForumReplyEvent;
import se.su.dsv.scipro.forum.ProjectForumPostDeletedEvent;
import se.su.dsv.scipro.forum.ProjectForumThreadDeletedEvent;
import se.su.dsv.scipro.forum.dataobjects.ForumPost;
import se.su.dsv.scipro.notifications.NotificationController;
import se.su.dsv.scipro.notifications.NotificationService;
@ -95,6 +97,24 @@ public class ForumNotifications {
});
}
@Subscribe
public void projectThreadDeleted(ProjectForumThreadDeletedEvent event) {
NotificationSource source = new NotificationSource();
source.setMessage(event.subject());
notificationController.notifyProjectForum(
ProjectForumEvent.Event.FORUM_THREAD_DELETED,
source,
event.project()
);
}
@Subscribe
public void projectForumPostDeleted(ProjectForumPostDeletedEvent event) {
NotificationSource source = new NotificationSource();
source.setMessage(event.subject());
notificationController.notifyProjectForum(ProjectForumEvent.Event.FORUM_POST_DELETED, source, event.project());
}
private void sendAndConnect(ForumPost post, Function<NotificationSource, Set<Notification>> send) {
NotificationSource notificationSource = new NotificationSource();
notificationSource.setMessage(String.format("Posted by %s\n\n%s", getPostedBy(post), post.getContent()));

@ -23,6 +23,8 @@ FORUM.NEW_FORUM_POST_COMMENT.body = {0}
FORUM.NEW_REVIEWER_INTERACTION.body = {0}
GROUP.MESSAGE_THREAD_CREATED.body = {0}
GROUP.MESSAGE_THREAD_REPLY.body = {0}
FORUM.FORUM_THREAD_DELETED.title = Forum thread {1} deleted in project {0}
FORUM.FORUM_POST_DELETED.title = Reply deleted in thread {1} in project {0}
PROJECT = \
***********************************\n\n\

@ -17,6 +17,8 @@ public class ProjectForumEvent extends NotificationEvent {
NEW_FORUM_POST,
NEW_FORUM_POST_COMMENT,
NEW_REVIEWER_INTERACTION,
FORUM_THREAD_DELETED,
FORUM_POST_DELETED,
}
@Basic

@ -99,6 +99,10 @@ FORUM.NEW_FORUM_POST_COMMENT.title = Forum reply: {2}
FORUM.NEW_FORUM_POST_COMMENT.body = New forum reply: {1}<br /><br />{0}
FORUM.NEW_REVIEWER_INTERACTION.title = Reviewer interaction updated in project: {0}
FORUM.NEW_REVIEWER_INTERACTION.body = New message in reviewer interaction: {1}<br /><br />{0}
FORUM.FORUM_THREAD_DELETED.title = Forum thread {1} deleted
FORUM.FORUM_THREAD_DELETED.body = The forum thread {0} was deleted.
FORUM.FORUM_POST_DELETED.title = Reply deleted in thread {1}
FORUM.FORUM_POST_DELETED.body = A reply was deleted in the thread {0}.
FORUM.compilationSuffix =
GROUP.MESSAGE_THREAD_CREATED.title = Group forum: {2}

@ -340,7 +340,7 @@ public class NotificationLandingPage extends WebPage {
pp.set(PageParameterKeys.MAP.get(Project.class), project.getId());
switch (projectForumEvent.getEvent()) {
case NEW_FORUM_POST, NEW_FORUM_POST_COMMENT:
case NEW_FORUM_POST, NEW_FORUM_POST_COMMENT, FORUM_POST_DELETED, FORUM_THREAD_DELETED:
roleSplit(currentUser, project, ProjectForumBasePage.class, SupervisorForumBasePage.class, pp);
break;
case NEW_REVIEWER_INTERACTION:

@ -71,6 +71,8 @@ ProjectEvent.REFLECTION_IMPROVEMENTS_SUBMITTED = Reflection improvements submitt
ProjectForumEvent.NEW_FORUM_POST = Forum thread created.
ProjectForumEvent.NEW_FORUM_POST_COMMENT = Comment posted in forum thread.
ProjectForumEvent.NEW_REVIEWER_INTERACTION = Comment posted in supervisor - reviewer communication.
ProjectForumEvent.FORUM_THREAD_DELETED = Forum thread deleted.
ProjectForumEvent.FORUM_POST_DELETED = Forum post deleted.
SeminarEvent.CREATED = Final seminar created. (with date, time, place, room specified by head supervisor; authors can now upload final seminar thesis; other authors can now oppose and be active participants)
SeminarEvent.ROOM_CHANGED = Room changed.