From 4bd715014f26dde16cc0cd6e44f5ef54b50ae62e Mon Sep 17 00:00:00 2001
From: Julian Hochstetter <julian.hochstetter@mni.thm.de>
Date: Thu, 1 Nov 2012 12:06:59 +0100
Subject: [PATCH] Task #4036: getAnswerByUserAndSession

---
 .../controller/QuestionController.java        |  9 +++++
 .../java/de/thm/arsnova/dao/CouchDBDao.java   | 36 +++++++++++++++++++
 .../java/de/thm/arsnova/dao/IDatabaseDao.java |  2 ++
 .../arsnova/services/IQuestionService.java    |  2 ++
 .../thm/arsnova/services/QuestionService.java |  6 ++++
 .../de/thm/arsnova/dao/StubDatabaseDao.java   |  6 ++++
 6 files changed, 61 insertions(+)

diff --git a/src/main/java/de/thm/arsnova/controller/QuestionController.java b/src/main/java/de/thm/arsnova/controller/QuestionController.java
index 3f7b63a0..3a0f66b3 100644
--- a/src/main/java/de/thm/arsnova/controller/QuestionController.java
+++ b/src/main/java/de/thm/arsnova/controller/QuestionController.java
@@ -230,5 +230,14 @@ public class QuestionController extends AbstractController {
 		return questionService.getFreetextAnswers(sessionKey, questionId);
 	}
 	
+	@RequestMapping(value = "/session/{sessionKey}/myanswers", method = RequestMethod.GET)
+	@ResponseBody
+	public final List<Answer> getMyAnswers(
+			@PathVariable final String sessionKey,
+			final HttpServletResponse response
+	) {
+		return questionService.getMytAnswers(sessionKey);
+	}
+	
 
 }
diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index 0273a70b..468da08b 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -904,6 +904,42 @@ public class CouchDBDao implements IDatabaseDao {
 			LOGGER.error("Error while retrieving freetext answers", e);
 		}
 		
+		return null;
+	}
+	
+	@Override
+	public List<Answer> getMyAnswers(String sessionKey) {
+		Session s = this.getSessionFromKeyword(sessionKey);
+		if (s == null) {
+			throw new NotFoundException();
+		}
+		
+		User user = userService.getCurrentUser();
+		if(user == null) {
+			throw new UnauthorizedException();
+		}
+		
+		try {
+			View view = new View("answer/by_user_and_session");
+			view.setKey("[" + URLEncoder.encode("\"" + user.getUsername() + "\",\"" + s.get_id() + "\"", "UTF-8") + "]");
+			ViewResults results = this.getDatabase().view(view);
+			if (results.getResults().isEmpty()) {
+				throw new NotFoundException();
+			}
+			List<Answer> answers = new ArrayList<Answer>();
+			for (Document d : results.getResults()) {
+				Answer a = (Answer) JSONObject.toBean(d.getJSONObject().getJSONObject("value"), Answer.class);
+				a.set_id(d.getId());
+				a.setSessionId(s.get_id());
+				answers.add(a);
+			}
+			return answers;
+			
+		} catch (UnsupportedEncodingException e) {
+			LOGGER.error("Error while retrieving user answers", e);
+		}
+		
+		
 		return null;
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
index dc5f7ebd..da1829e7 100644
--- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
+++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
@@ -74,4 +74,6 @@ public interface IDatabaseDao {
 	List<Answer> getFreetextAnswers(String sessionKey, String questionId);
 
 	int getActiveUsers(long since);
+
+	List<Answer> getMyAnswers(String sessionKey);
 }
diff --git a/src/main/java/de/thm/arsnova/services/IQuestionService.java b/src/main/java/de/thm/arsnova/services/IQuestionService.java
index a6977fe0..33aca21b 100644
--- a/src/main/java/de/thm/arsnova/services/IQuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/IQuestionService.java
@@ -46,4 +46,6 @@ public interface IQuestionService {
 	int getAnswerCount(String sessionKey, String questionId);
 
 	List<Answer> getFreetextAnswers(String sessionKey, String questionId);
+
+	List<Answer> getMytAnswers(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 e8677527..8dc8c620 100644
--- a/src/main/java/de/thm/arsnova/services/QuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/QuestionService.java
@@ -118,4 +118,10 @@ public class QuestionService implements IQuestionService {
 	public List<Answer> getFreetextAnswers(String sessionKey, String questionId) {
 		return databaseDao.getFreetextAnswers(sessionKey, questionId);
 	}
+	
+	@Override
+	@Authenticated
+	public List<Answer> getMytAnswers(String sessionKey) {
+		return databaseDao.getMyAnswers(sessionKey);
+	}
 }
diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
index 76b4f2b3..bfd6ec67 100644
--- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
+++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
@@ -239,5 +239,11 @@ public class StubDatabaseDao implements IDatabaseDao {
 	public int getActiveUsers(long since) {
 		return stubUsers.size();
 	}
+	
+	@Override
+	public List<Answer> getMyAnswers(String sessionKey) {
+		// TODO Auto-generated method stub
+		return null;
+	}
 
 }
-- 
GitLab