diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index b98d0c8bf8fffb15dfb8120f9dc59c4c6d38ef4e..eaef1742e8b7b477213881cab5daa139e9e5730f 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -771,6 +771,7 @@ public class CouchDBDao implements IDatabaseDao { getDatabase().deleteDocument(d); } + @CacheEvict("answers") @Override public final void deleteAnswers(final Question question) { try { @@ -820,7 +821,8 @@ public class CouchDBDao implements IDatabaseDao { } @Override - public final List<Answer> getAnswers(final String questionId, final int piRound) { + public final List<Answer> getAnswers(final Question question, final int piRound) { + final String questionId = question.get_id(); final NovaView view = new NovaView("skill_question/count_answers_by_question_and_piround"); if (2 == piRound) { view.setStartKey(questionId, "2"); @@ -847,6 +849,12 @@ public class CouchDBDao implements IDatabaseDao { return answers; } + @Cacheable("answers") + @Override + public final List<Answer> getAnswers(final Question question) { + return this.getAnswers(question, question.getPiRound()); + } + @Override public int getAbstentionAnswerCount(final String questionId) { final NovaView view = new NovaView("skill_question/count_abstention_answers_by_question"); @@ -1206,6 +1214,7 @@ public class CouchDBDao implements IDatabaseDao { return this.getInfosForVisitedSessions(sessions, user); } + @CacheEvict(value = "answers", allEntries = true) @Override public Answer saveAnswer(final Answer answer, final User user) { final Document a = new Document(); @@ -1251,6 +1260,7 @@ public class CouchDBDao implements IDatabaseDao { } } + @CacheEvict(value = "answers", allEntries = true) @Override public Answer updateAnswer(final Answer answer) { try { @@ -1269,6 +1279,7 @@ public class CouchDBDao implements IDatabaseDao { return null; } + @CacheEvict(value = "answers", allEntries = true) @Override public void deleteAnswer(final String answerId) { try { @@ -1527,7 +1538,8 @@ public class CouchDBDao implements IDatabaseDao { @Caching(evict = { @CacheEvict(value = "questions", allEntries = true), @CacheEvict(value = "skillquestions", allEntries = true), - @CacheEvict("lecturequestions") }) + @CacheEvict("lecturequestions"), + @CacheEvict(value = "answers", allEntries = true)}) @Override public void deleteAllLectureQuestionsWithAnswers(final Session session) { final NovaView view = new NovaView("skill_question/lecture_question_by_session"); @@ -1536,7 +1548,8 @@ public class CouchDBDao implements IDatabaseDao { @Caching(evict = { @CacheEvict(value = "questions", allEntries = true), @CacheEvict(value = "skillquestions", allEntries = true), - @CacheEvict("flashcardquestions") }) + @CacheEvict("flashcardquestions"), + @CacheEvict(value = "answers", allEntries = true)}) @Override public void deleteAllFlashcardsWithAnswers(final Session session) { final NovaView view = new NovaView("skill_question/flashcard_by_session"); @@ -1545,7 +1558,8 @@ public class CouchDBDao implements IDatabaseDao { @Caching(evict = { @CacheEvict(value = "questions", allEntries = true), @CacheEvict(value = "skillquestions", allEntries = true), - @CacheEvict("preparationquestions") }) + @CacheEvict("preparationquestions"), + @CacheEvict(value = "answers", allEntries = true)}) @Override public void deleteAllPreparationQuestionsWithAnswers(final Session session) { final NovaView view = new NovaView("skill_question/preparation_question_by_session"); @@ -1671,18 +1685,21 @@ public class CouchDBDao implements IDatabaseDao { } } + @CacheEvict(value = "answers", allEntries = true) @Override public void deleteAllQuestionsAnswers(final Session session) { final List<Question> questions = getQuestions(new NovaView("skill_question/by_session"), session); deleteAllAnswersForQuestions(questions); } + @CacheEvict(value = "answers", allEntries = true) @Override public void deleteAllPreparationAnswers(final Session session) { final List<Question> questions = getQuestions(new NovaView("skill_question/preparation_question_by_session"), session); deleteAllAnswersForQuestions(questions); } + @CacheEvict(value = "answers", allEntries = true) @Override public void deleteAllLectureAnswers(final Session session) { final List<Question> questions = getQuestions(new NovaView("skill_question/lecture_question_by_session"), session); diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java index 8695dee2b2b9f7da10d33004ba39e5a1e440660a..bf328a62e590884a152e50ca945c61b10c1feb34 100644 --- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java +++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java @@ -88,7 +88,9 @@ public interface IDatabaseDao { Answer getMyAnswer(User me, String questionId, int piRound); - List<Answer> getAnswers(String questionId, int piRound); + List<Answer> getAnswers(Question question, int piRound); + + List<Answer> getAnswers(Question question); int getAnswerCount(Question question, int piRound); diff --git a/src/main/java/de/thm/arsnova/entities/Question.java b/src/main/java/de/thm/arsnova/entities/Question.java index 7ab74351f9d849909c99d9776ba2f41a265070c3..82812ce3233b37c2101c743ba3db46bfa92a6a9d 100644 --- a/src/main/java/de/thm/arsnova/entities/Question.java +++ b/src/main/java/de/thm/arsnova/entities/Question.java @@ -32,6 +32,7 @@ public class Question { private boolean noCorrect; // TODO: We currently need both sessionId and sessionKeyword, but sessionKeyword will not be persisted. private String sessionId; + // This property is needed because the client does not have the session ID, only the keyword. private String sessionKeyword; private long timestamp; private int number; diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java index bea2278ddd839278c393dea8e37c3c3455d368b0..28c02274155d27255bc06188e1ed45cb68fe57f5 100644 --- a/src/main/java/de/thm/arsnova/services/QuestionService.java +++ b/src/main/java/de/thm/arsnova/services/QuestionService.java @@ -270,7 +270,7 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis } return "freetext".equals(question.getQuestionType()) ? getFreetextAnswers(questionId) - : databaseDao.getAnswers(questionId, piRound); + : databaseDao.getAnswers(question, piRound); } @Override @@ -280,7 +280,11 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis if (question == null) { throw new NotFoundException(); } - return getAnswers(questionId, question.getPiRound()); + if ("freetext".equals(question.getQuestionType())) { + return getFreetextAnswers(questionId); + } else { + return databaseDao.getAnswers(question); + } } @Override diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java index b9a74fc5766589fc35ed73b9a2f3c0c3ae80dd10..bdb69adf241db104bebc0e370b0fa6efe04bd4ea 100644 --- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java +++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java @@ -237,12 +237,6 @@ public class StubDatabaseDao implements IDatabaseDao { return null; } - @Override - public List<Answer> getAnswers(String questionId, int piRound) { - // TODO Auto-generated method stub - return null; - } - @Override public int getAnswerCount(Question question, int piRound) { // TODO Auto-generated method stub @@ -622,4 +616,16 @@ public class StubDatabaseDao implements IDatabaseDao { // TODO Auto-generated method stub return null; } + + @Override + public List<Answer> getAnswers(Question question, int piRound) { + // TODO Auto-generated method stub + return null; + } + + @Override + public List<Answer> getAnswers(Question question) { + // TODO Auto-generated method stub + return null; + } }