From ff7993d81bf5c26e673df3eff35cca48911560c4 Mon Sep 17 00:00:00 2001 From: Christoph Thelen <christoph.thelen@mni.thm.de> Date: Mon, 29 Jul 2013 18:14:49 +0200 Subject: [PATCH] Fixed #6619: Added method to delete all questions of session --- .../controller/LecturerQuestionController.java | 6 ++++++ .../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 ++++++ 6 files changed, 45 insertions(+) diff --git a/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java b/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java index 2866b4b99..fec00c97a 100644 --- a/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java +++ b/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java @@ -146,6 +146,12 @@ public class LecturerQuestionController extends AbstractController { return questions; } + @RequestMapping(value = { "/" }, method = RequestMethod.DELETE) + @ResponseBody + public final void deleteSkillQuestions(@RequestParam final String sessionkey, final HttpServletResponse response) { + this.questionService.deleteAllQuestions(sessionkey); + } + @RequestMapping(value = "/count", method = RequestMethod.GET) @ResponseBody public final int getSkillQuestionCount(@RequestParam final String sessionkey, final HttpServletResponse response) { diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index ef39d4e71..a5c7aa57e 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -781,6 +781,24 @@ public class CouchDBDao implements IDatabaseDao { LOGGER.error("IOException: Could not delete question {}", question.get_id()); } } + + @Override + public final void deleteAllQuestionsWithAnswers(Session session) { + try { + View view = new View("skill_question/by_session"); + view.setStartKey("[" + URLEncoder.encode("\"" + session.get_id() + "\"", "UTF-8") + "]"); + view.setEndKey("[" + URLEncoder.encode("\"" + session.get_id() + "\", {}", "UTF-8") + "]"); + ViewResults results = this.getDatabase().view(view); + + for (Document d : results.getResults()) { + Question q = new Question(); + q.set_id(d.getId()); + this.deleteQuestionWithAnswers(q); + } + } catch (IOException e) { + LOGGER.error("IOException: Could not delete questions for session {}", session.getKeyword()); + } + } private void deleteDocument(final String documentId) throws IOException { Document d = this.getDatabase().getDocument(documentId); diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java index 4d9e600e5..73c786ee9 100644 --- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java +++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java @@ -69,6 +69,8 @@ public interface IDatabaseDao { void deleteQuestionWithAnswers(Question question); + void deleteAllQuestionsWithAnswers(Session session); + List<String> getUnAnsweredQuestionIds(Session session, User user); Answer getMyAnswer(String questionId, int piRound); diff --git a/src/main/java/de/thm/arsnova/services/IQuestionService.java b/src/main/java/de/thm/arsnova/services/IQuestionService.java index 389e1442a..4f04a0c73 100644 --- a/src/main/java/de/thm/arsnova/services/IQuestionService.java +++ b/src/main/java/de/thm/arsnova/services/IQuestionService.java @@ -41,6 +41,8 @@ public interface IQuestionService { void deleteQuestion(String questionId); + void deleteAllQuestions(String sessionKeyword); + List<String> getUnAnsweredQuestionIds(String sessionKey); Answer getMyAnswer(String questionId); diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java index 89601b04f..1f9d70e87 100644 --- a/src/main/java/de/thm/arsnova/services/QuestionService.java +++ b/src/main/java/de/thm/arsnova/services/QuestionService.java @@ -148,6 +148,17 @@ public class QuestionService implements IQuestionService { databaseDao.deleteQuestionWithAnswers(question); } + @Override + @Authenticated + public void deleteAllQuestions(String sessionKeyword) { + User user = userService.getCurrentUser(); + Session session = databaseDao.getSession(sessionKeyword); + if (user == null || session == null || !session.isCreator(user)) { + throw new UnauthorizedException(); + } + databaseDao.deleteAllQuestionsWithAnswers(session); + } + @Override @Authenticated public void deleteInterposedQuestion(String questionId) { diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java index ffc536497..bbf6a89ad 100644 --- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java +++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java @@ -439,4 +439,10 @@ public class StubDatabaseDao implements IDatabaseDao { public void deleteSession(Session session) { // TODO Auto-generated method stub } + + @Override + public void deleteAllQuestionsWithAnswers(Session session) { + // TODO Auto-generated method stub + + } } -- GitLab