diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index dc0e26e6aa17c1b67001cd607cc5011554f47c7b..c1b7c41b77037993c5de0b5f4cda2b7db6d42e5e 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -100,6 +100,11 @@ public class CouchDBDao implements IDatabaseDao { sessionService = service; } + /** + * @deprecated Use getSessionFromKeyword instead. The database should not throw HTTP exceptions. + * Additionally, the caching mechanism won't work here because it is calling inside the same class. + */ + @Deprecated @Override public final Session getSession(final String keyword) { final Session result = getSessionFromKeyword(keyword); @@ -865,12 +870,7 @@ public class CouchDBDao implements IDatabaseDao { } @Override - public List<Answer> getMyAnswers(final User me, final String sessionKey) { - final Session s = getSessionFromKeyword(sessionKey); - if (s == null) { - throw new NotFoundException(); - } - + public List<Answer> getMyAnswers(final User me, final Session s) { final NovaView view = new NovaView("answer/by_user_and_session_full"); view.setKey(me.getUsername(), s.get_id()); final ViewResults results = getDatabase().view(view); diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java index d688abbebe96b06212afe87a79157ccd996444ce..9944d347e4849f6a226c78dfa32b3c59296b81cb 100644 --- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java +++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java @@ -35,6 +35,12 @@ import de.thm.arsnova.entities.transport.ImportExportSession; public interface IDatabaseDao { Session getSessionFromKeyword(String keyword); + /** + * @deprecated Use getSessionFromKeyword + * @param keyword + * @return + */ + @Deprecated Session getSession(String keyword); List<Session> getMySessions(User user); @@ -79,7 +85,7 @@ public interface IDatabaseDao { List<Answer> getFreetextAnswers(String questionId); - List<Answer> getMyAnswers(User me, String sessionKey); + List<Answer> getMyAnswers(User me, Session session); int getTotalAnswerCount(String sessionKey); diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java index b1e27a79f64fbb11ad11a69b43eb7ec58319ff90..7fc4aedb7c1f64b776b87500e76a362f16307ec6 100644 --- a/src/main/java/de/thm/arsnova/services/QuestionService.java +++ b/src/main/java/de/thm/arsnova/services/QuestionService.java @@ -168,7 +168,7 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis throw new NotFoundException(); } - final Session session = databaseDao.getSession(question.getSessionKeyword()); + final Session session = databaseDao.getSessionFromKeyword(question.getSessionKeyword()); if (session == null) { throw new UnauthorizedException(); } @@ -190,7 +190,7 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis private Session getSessionWithAuthCheck(final String sessionKeyword) { final User user = userService.getCurrentUser(); - final Session session = databaseDao.getSession(sessionKeyword); + final Session session = databaseDao.getSessionFromKeyword(sessionKeyword); if (user == null || session == null || !session.isCreator(user)) { throw new UnauthorizedException(); } @@ -315,6 +315,8 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis @Override @PreAuthorize("isAuthenticated()") public List<Answer> getMyAnswers(final String sessionKey) { + final Session session = getSession(sessionKey); + // Load questions first because we are only interested in answers of the latest piRound. final List<Question> questions = getSkillQuestions(sessionKey); final Map<String, Question> questionIdToQuestion = new HashMap<String, Question>(); for (final Question question : questions) { @@ -322,13 +324,14 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis } /* filter answers by active piRound per question */ - final List<Answer> answers = databaseDao.getMyAnswers(userService.getCurrentUser(), sessionKey); + final List<Answer> answers = databaseDao.getMyAnswers(userService.getCurrentUser(), session); final List<Answer> filteredAnswers = new ArrayList<Answer>(); for (final Answer answer : answers) { final Question question = questionIdToQuestion.get(answer.getQuestionId()); if (0 == answer.getPiRound() && !"freetext".equals(question.getQuestionType())) { answer.setPiRound(1); } + // discard all answers that aren't in the same piRound as the question if (answer.getPiRound() == question.getPiRound()) { filteredAnswers.add(answer); } @@ -416,7 +419,7 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis } final User user = userService.getCurrentUser(); - final Session session = databaseDao.getSession(question.getSessionKeyword()); + final Session session = databaseDao.getSessionFromKeyword(question.getSessionKeyword()); if (user == null || session == null || !session.isCreator(user)) { throw new UnauthorizedException(); } diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java index ff05e7d951067e37be65db4e4a7561d3f4af25d8..7f3a9f719a809f47d47de212c3080e1196a47f9a 100644 --- a/src/main/java/de/thm/arsnova/services/SessionService.java +++ b/src/main/java/de/thm/arsnova/services/SessionService.java @@ -303,7 +303,7 @@ public class SessionService implements ISessionService { @Override @PreAuthorize("isAuthenticated() and hasPermission(#sessionkey, 'session', 'owner')") public void deleteSession(final String sessionkey) { - final Session session = databaseDao.getSession(sessionkey); + final Session session = databaseDao.getSessionFromKeyword(sessionkey); for (final Question q : databaseDao.getSkillQuestions(userService.getCurrentUser(), session)) { databaseDao.deleteQuestionWithAnswers(q); } @@ -313,7 +313,7 @@ public class SessionService implements ISessionService { @Override @PreAuthorize("isAuthenticated()") public int getLearningProgress(final String sessionkey, final String progressType) { - final Session session = databaseDao.getSession(sessionkey); + final Session session = databaseDao.getSessionFromKeyword(sessionkey); LearningProgress learningProgress = learningProgressFactory.createFromType(progressType); return learningProgress.getCourseProgress(session); } @@ -321,7 +321,7 @@ public class SessionService implements ISessionService { @Override @PreAuthorize("isAuthenticated()") public SimpleEntry<Integer, Integer> getMyLearningProgress(final String sessionkey, final String progressType) { - final Session session = databaseDao.getSession(sessionkey); + final Session session = databaseDao.getSessionFromKeyword(sessionkey); final User user = userService.getCurrentUser(); LearningProgress learningProgress = learningProgressFactory.createFromType(progressType); return learningProgress.getMyProgress(session, user);