From 99c44807834003a557a47c8e6a6991fac85bd50c Mon Sep 17 00:00:00 2001
From: Christoph Thelen <christoph.thelen@mni.thm.de>
Date: Tue, 21 Jan 2014 08:09:04 +0100
Subject: [PATCH] Fixed #6618: Allow clients to delete all answers with one
 request

---
 .../controller/LecturerQuestionController.java        |  9 +++++++++
 src/main/java/de/thm/arsnova/dao/CouchDBDao.java      |  8 ++++++++
 src/main/java/de/thm/arsnova/dao/IDatabaseDao.java    |  2 ++
 .../de/thm/arsnova/services/IQuestionService.java     |  2 ++
 .../java/de/thm/arsnova/services/QuestionService.java | 11 +++++++++++
 src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java |  6 ++++++
 6 files changed, 38 insertions(+)

diff --git a/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java b/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java
index 270f0c74a..a26dc791c 100644
--- a/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java
+++ b/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java
@@ -355,6 +355,15 @@ public class LecturerQuestionController extends AbstractController {
 		questionService.deleteAnswers(questionId);
 	}
 
+	@RequestMapping(value = "/answers", method = RequestMethod.DELETE)
+	@ResponseBody
+	public final void deleteAllQuestionsAnswers(
+			@RequestParam final String sessionkey,
+			final HttpServletResponse response
+	) {
+		questionService.deleteAllQuestionsAnswers(sessionkey);
+	}
+
 	/**
 	 *
 	 * @param sessionKey
diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index 2ff0351e8..86cd52719 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -1330,4 +1330,12 @@ public class CouchDBDao implements IDatabaseDao {
 			LOGGER.error("Could not bulk publish all questions: {}", e.getMessage());
 		}
 	}
+
+	@Override
+	public void deleteAllQuestionsAnswers(Session session) {
+		List<Question> questions = this.getQuestions(new NovaView("skill_question/by_session"), session);
+		for (Question q : questions) {
+			this.deleteAnswers(q);
+		}
+	}
 }
diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
index 480894184..2a99de4f6 100644
--- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
+++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
@@ -159,4 +159,6 @@ public interface IDatabaseDao {
 	void deleteAllInterposedQuestions(Session session);
 
 	void publishAllQuestions(Session session, boolean publish);
+
+	void deleteAllQuestionsAnswers(Session session);
 }
diff --git a/src/main/java/de/thm/arsnova/services/IQuestionService.java b/src/main/java/de/thm/arsnova/services/IQuestionService.java
index fc1dd89cc..b26aecf43 100644
--- a/src/main/java/de/thm/arsnova/services/IQuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/IQuestionService.java
@@ -109,4 +109,6 @@ public interface IQuestionService {
 
 	void publishAll(String sessionkey, boolean publish);
 
+	void deleteAllQuestionsAnswers(String sessionkey);
+
 }
diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java
index fc78d6fcb..7252f5cf5 100644
--- a/src/main/java/de/thm/arsnova/services/QuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/QuestionService.java
@@ -512,4 +512,15 @@ public class QuestionService implements IQuestionService {
 		}
 		databaseDao.publishAllQuestions(session, publish);
 	}
+
+	@Override
+	@Authenticated
+	public void deleteAllQuestionsAnswers(String sessionkey) {
+		User user = getCurrentUser();
+		Session session = getSession(sessionkey);
+		if (!session.isCreator(user)) {
+			throw new ForbiddenException();
+		}
+		databaseDao.deleteAllQuestionsAnswers(session);
+	}
 }
diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
index dc593e897..f8a9d63d1 100644
--- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
+++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
@@ -491,4 +491,10 @@ public class StubDatabaseDao implements IDatabaseDao {
 		// TODO Auto-generated method stub
 		
 	}
+
+	@Override
+	public void deleteAllQuestionsAnswers(Session session) {
+		// TODO Auto-generated method stub
+		
+	}
 }
-- 
GitLab