From 3e3ee959f295ecd13f0c0c9c1cb4c437f1ffec19 Mon Sep 17 00:00:00 2001 From: agrt56 <andreas.gaertner@mni.thm.de> Date: Mon, 4 May 2015 13:21:31 +0200 Subject: [PATCH] Task #15781: Change unanswered question retain from couchdb. --- .../java/de/thm/arsnova/dao/CouchDBDao.java | 45 +++++++++++-------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index dfa373f5c..8570890e2 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -1582,30 +1582,16 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware @Override public List<String> getUnAnsweredLectureQuestionIds(final Session session, final User user) { - final NovaView view = new NovaView("answer/variant_by_user"); + final NovaView view = new NovaView("answer/variant_by_user_and_piround"); view.setKey(user.getUsername(), session.get_id(), "lecture"); - return collectUnansweredQuestionIds(getLectureQuestionIds(session), view); - } - - private List<String> getLectureQuestionIds(final Session session) { - NovaView view = new NovaView("skill_question/lecture_question_ids_by_session_for_all"); - view.setStartKeyArray(session.get_id()); - view.setEndKeyArray(session.get_id(), "{}"); - return collectQuestionIds(view); + return collectUnansweredQuestionIdsByPiRound(getLectureQuestionsForUsers(session), view); } @Override public List<String> getUnAnsweredPreparationQuestionIds(final Session session, final User user) { - final NovaView view = new NovaView("answer/variant_by_user"); + final NovaView view = new NovaView("answer/variant_by_user_and_piround"); view.setKey(user.getUsername(), session.get_id(), "preparation"); - return collectUnansweredQuestionIds(getPreparationQuestionIds(session), view); - } - - private List<String> getPreparationQuestionIds(final Session session) { - NovaView view = new NovaView("skill_question/preparation_question_ids_by_session_for_all"); - view.setStartKeyArray(session.get_id()); - view.setEndKeyArray(session.get_id(), "{}"); - return collectQuestionIds(view); + return collectUnansweredQuestionIdsByPiRound(getPreparationQuestionsForUsers(session), view); } private List<String> collectUnansweredQuestionIds( @@ -1628,6 +1614,29 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware return unanswered; } + private List<String> collectUnansweredQuestionIdsByPiRound( + final List<Question> questions, + final NovaView view + ) { + final ViewResults answeredQuestions = getDatabase().view(view); + + final Map<String, Integer> answered = new HashMap<String, Integer>(); + for (final Document d : answeredQuestions.getResults()) { + answered.put(d.getJSONArray("value").getString(0), d.getJSONArray("value").getInt(1)); + } + + final List<String> unanswered = new ArrayList<String>(); + + for (final Question question : questions) { + if (!answered.containsKey(question.get_id()) || + (answered.containsKey(question.get_id()) && answered.get(question.get_id()) != question.getPiRound())) { + unanswered.add(question.get_id()); + } + } + + return unanswered; + } + private List<String> collectQuestionIds(final NovaView view) { final ViewResults results = getDatabase().view(view); if (results.getResults().size() == 0) { -- GitLab