From dc0c1dfb789958385641e6dc9b109ed57f0ad777 Mon Sep 17 00:00:00 2001
From: Daniel Gerhardt <code@dgerhardt.net>
Date: Fri, 23 Aug 2019 11:15:15 +0200
Subject: [PATCH] Make deletion of user profiles cascading

The deletion of users now triggers a cascading deletion for rooms owned
by the user.
---
 .../java/de/thm/arsnova/service/RoomServiceImpl.java   | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/src/main/java/de/thm/arsnova/service/RoomServiceImpl.java b/src/main/java/de/thm/arsnova/service/RoomServiceImpl.java
index 2ea4ae30e..4f249b077 100644
--- a/src/main/java/de/thm/arsnova/service/RoomServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/service/RoomServiceImpl.java
@@ -34,14 +34,17 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.cache.annotation.Caching;
+import org.springframework.context.event.EventListener;
 import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
 import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.security.access.annotation.Secured;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.Validator;
 
 import de.thm.arsnova.connector.client.ConnectorClient;
 import de.thm.arsnova.connector.model.Course;
+import de.thm.arsnova.event.BeforeDeletionEvent;
 import de.thm.arsnova.event.FlipFlashcardsEvent;
 import de.thm.arsnova.model.Room;
 import de.thm.arsnova.model.UserProfile;
@@ -149,6 +152,13 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
 		this.connectorClient = connectorClient;
 	}
 
+	@EventListener
+	@Secured({"ROLE_USER", "RUN_AS_SYSTEM"})
+	public void handleUserDeletion(final BeforeDeletionEvent<UserProfile> event) {
+		final Iterable<Room> rooms = roomRepository.findByOwnerId(event.getEntity().getId(), -1, -1);
+		delete(rooms);
+	}
+
 	@Scheduled(fixedDelay = ROOM_INACTIVITY_CHECK_INTERVAL_MS)
 	public void deleteInactiveRooms() {
 		if (guestRoomInactivityThresholdDays > 0) {
-- 
GitLab