From 2c1bd1515f78b1e71699ecfed712d2060a2ade27 Mon Sep 17 00:00:00 2001 From: Christoph Thelen <christoph.thelen@mni.thm.de> Date: Wed, 18 Dec 2013 11:57:17 +0100 Subject: [PATCH] Delete all interposed questions with one request --- .../controller/AudienceQuestionController.java | 1 + .../arsnova/controller/LegacyController.java | 16 ++++++++++++++++ .../java/de/thm/arsnova/dao/CouchDBDao.java | 18 ++++++++++++++++++ .../java/de/thm/arsnova/dao/IDatabaseDao.java | 2 ++ .../thm/arsnova/services/IQuestionService.java | 2 ++ .../thm/arsnova/services/QuestionService.java | 11 +++++++++++ .../de/thm/arsnova/dao/StubDatabaseDao.java | 6 ++++++ 7 files changed, 56 insertions(+) diff --git a/src/main/java/de/thm/arsnova/controller/AudienceQuestionController.java b/src/main/java/de/thm/arsnova/controller/AudienceQuestionController.java index d390d7a5f..5b606d54e 100644 --- a/src/main/java/de/thm/arsnova/controller/AudienceQuestionController.java +++ b/src/main/java/de/thm/arsnova/controller/AudienceQuestionController.java @@ -117,4 +117,5 @@ public class AudienceQuestionController extends AbstractController { ) { questionService.deleteInterposedQuestion(questionId); } + } diff --git a/src/main/java/de/thm/arsnova/controller/LegacyController.java b/src/main/java/de/thm/arsnova/controller/LegacyController.java index 8f2c5b7a0..83c049dad 100644 --- a/src/main/java/de/thm/arsnova/controller/LegacyController.java +++ b/src/main/java/de/thm/arsnova/controller/LegacyController.java @@ -22,16 +22,23 @@ import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +import de.thm.arsnova.services.IQuestionService; @Controller public class LegacyController extends AbstractController { public static final Logger LOGGER = LoggerFactory.getLogger(LegacyController.class); + @Autowired + private IQuestionService questionService; + /* specific routes */ @RequestMapping(value = "/session/mysessions", method = RequestMethod.GET) @@ -115,6 +122,15 @@ public class LegacyController extends AbstractController { return String.format("forward:/audiencequestion/?sessionkey=%s", sessionKey); } + @RequestMapping(value = "/session/{sessionKey}/interposed", method = RequestMethod.DELETE) + @ResponseBody + public final void deleteAllInterposedQuestions( + @PathVariable final String sessionKey, + final HttpServletResponse response + ) { + questionService.deleteAllInterposedQuestions(sessionKey); + } + @RequestMapping(value = "/session/{sessionKey}/interposedcount", method = RequestMethod.GET) public final String redirectQuestionByAudienceCount( @PathVariable final String sessionKey, diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index 9df14c785..f1be1d0aa 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -1164,4 +1164,22 @@ public class CouchDBDao implements IDatabaseDao { LOGGER.error("Could not delete session {}", session); } } + + @Override + public void deleteAllInterposedQuestions(Session session) { + NovaView view = new NovaView("interposed_question/by_session"); + view.setKey(session.get_id()); + ViewResults questions = this.getDatabase().view(view); + if (questions == null || questions.isEmpty()) { + return; + } + for (Document document : questions.getResults()) { + try { + this.deleteDocument(document.getId()); + } catch (IOException e) { + LOGGER.error("Could not delete all interposed questions {}", session); + } + } + + } } diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java index 2827c41b0..d4e60807b 100644 --- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java +++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java @@ -131,4 +131,6 @@ public interface IDatabaseDao { Session updateSession(Session session); void deleteSession(Session session); + + void deleteAllInterposedQuestions(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 4f04a0c73..c1ff4f9e4 100644 --- a/src/main/java/de/thm/arsnova/services/IQuestionService.java +++ b/src/main/java/de/thm/arsnova/services/IQuestionService.java @@ -79,4 +79,6 @@ public interface IQuestionService { void deleteInterposedQuestion(String questionId); + void deleteAllInterposedQuestions(String sessionKeyword); + } diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java index f6f51d6d7..a7755c960 100644 --- a/src/main/java/de/thm/arsnova/services/QuestionService.java +++ b/src/main/java/de/thm/arsnova/services/QuestionService.java @@ -180,6 +180,17 @@ public class QuestionService implements IQuestionService { } databaseDao.deleteInterposedQuestion(question); } + + @Override + @Authenticated + public void deleteAllInterposedQuestions(String sessionKeyword) { + User user = userService.getCurrentUser(); + Session session = databaseDao.getSessionFromKeyword(sessionKeyword); + if (user == null || session == null || ! session.isCreator(user)) { + throw new UnauthorizedException(); + } + databaseDao.deleteAllInterposedQuestions(session); + } @Override @Authenticated diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java index 8bef8eb9b..ecb8038f9 100644 --- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java +++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java @@ -409,4 +409,10 @@ public class StubDatabaseDao implements IDatabaseDao { // TODO Auto-generated method stub } + + @Override + public void deleteAllInterposedQuestions(Session session) { + // TODO Auto-generated method stub + + } } -- GitLab