From 458f04184590cf07886ef41fb6a4d0896f927423 Mon Sep 17 00:00:00 2001 From: Christoph Thelen <christoph.thelen@mni.thm.de> Date: Thu, 14 Feb 2013 22:51:56 +0100 Subject: [PATCH] Delete answers --- .../QuestionByLecturerController.java | 11 ++++++++ .../java/de/thm/arsnova/dao/CouchDBDao.java | 28 +++++++++++++++++++ .../java/de/thm/arsnova/dao/IDatabaseDao.java | 4 +++ .../arsnova/services/IQuestionService.java | 2 ++ .../thm/arsnova/services/QuestionService.java | 15 ++++++++++ .../de/thm/arsnova/dao/StubDatabaseDao.java | 11 ++++++++ 6 files changed, 71 insertions(+) diff --git a/src/main/java/de/thm/arsnova/controller/QuestionByLecturerController.java b/src/main/java/de/thm/arsnova/controller/QuestionByLecturerController.java index 831f8f2a5..34d81844b 100644 --- a/src/main/java/de/thm/arsnova/controller/QuestionByLecturerController.java +++ b/src/main/java/de/thm/arsnova/controller/QuestionByLecturerController.java @@ -261,12 +261,23 @@ public class QuestionByLecturerController extends AbstractController { @ResponseBody public final Answer updateAnswer( @PathVariable final String questionId, + @PathVariable final String answerId, @RequestBody final Answer answer, final HttpServletResponse response ) { return questionService.updateAnswer(answer); } + @RequestMapping(value = "/{questionId}/answer/{answerId}", method = RequestMethod.DELETE) + @ResponseBody + public final void deleteAnswer( + @PathVariable final String questionId, + @PathVariable final String answerId, + final HttpServletResponse response + ) { + questionService.deleteAnswer(questionId, answerId); + } + @RequestMapping(value = "/{questionId}/answers", method = RequestMethod.DELETE) @ResponseBody public final void deleteAnswers( diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index 53d97105c..a7ad2d809 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -297,6 +297,25 @@ public class CouchDBDao implements IDatabaseDao { } } + @Override + public final Session getSessionFromId(final String sessionId) { + try { + View view = new View("session/by_id"); + view.setKey(URLEncoder.encode("\"" + sessionId + "\"", "UTF-8")); + ViewResults results = this.getDatabase().view(view); + + if (results.getJSONArray("rows").optJSONObject(0) == null) { + return null; + } + return (Session) JSONObject.toBean( + results.getJSONArray("rows").optJSONObject(0).optJSONObject("value"), + Session.class + ); + } catch (UnsupportedEncodingException e) { + return null; + } + } + @Override public final Session saveSession(final Session session) { @@ -1301,4 +1320,13 @@ public class CouchDBDao implements IDatabaseDao { } return null; } + + @Override + public void deleteAnswer(String answerId) { + try { + this.database.deleteDocument(this.database.getDocument(answerId)); + } catch (IOException e) { + LOGGER.error("Could not delete answer {} because of {}", answerId, e.getMessage()); + } + } } diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java index cd60837e1..9ef8ba099 100644 --- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java +++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java @@ -122,4 +122,8 @@ public interface IDatabaseDao { Answer saveAnswer(Answer answer, User user); Answer updateAnswer(Answer answer); + + Session getSessionFromId(String sessionId); + + void deleteAnswer(String answerId); } diff --git a/src/main/java/de/thm/arsnova/services/IQuestionService.java b/src/main/java/de/thm/arsnova/services/IQuestionService.java index 226e4a04b..7c6f91f5f 100644 --- a/src/main/java/de/thm/arsnova/services/IQuestionService.java +++ b/src/main/java/de/thm/arsnova/services/IQuestionService.java @@ -71,4 +71,6 @@ public interface IQuestionService { Answer updateAnswer(Answer answer); + void deleteAnswer(String questionId, String answerId); + } diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java index 6d4fe7bc4..afdc047be 100644 --- a/src/main/java/de/thm/arsnova/services/QuestionService.java +++ b/src/main/java/de/thm/arsnova/services/QuestionService.java @@ -258,4 +258,19 @@ public class QuestionService implements IQuestionService { } return this.databaseDao.updateAnswer(answer); } + + @Override + @Authenticated + public void deleteAnswer(String questionId, String answerId) { + Question question = this.databaseDao.getQuestion(questionId); + if (question == null) { + throw new NotFoundException(); + } + User user = userService.getCurrentUser(); + Session session = this.databaseDao.getSessionFromId(question.getSessionId()); + if (user == null || session == null || !session.isCreator(user)) { + throw new UnauthorizedException(); + } + this.databaseDao.deleteAnswer(answerId); + } } diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java index 056f69994..e80b28c33 100644 --- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java +++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java @@ -397,4 +397,15 @@ public class StubDatabaseDao implements IDatabaseDao { // TODO Auto-generated method stub return null; } + + @Override + public Session getSessionFromId(String sessionId) { + // TODO Auto-generated method stub + return null; + } + + @Override + public void deleteAnswer(String answerId) { + // TODO Auto-generated method stub + } } -- GitLab