From f907ce0d45dc8da2c920e81a25245ad8426bdad2 Mon Sep 17 00:00:00 2001
From: Paul-Christian Volkmer <paul-christian.volkmer@mni.thm.de>
Date: Thu, 6 Sep 2012 12:26:29 +0200
Subject: [PATCH] Task #3788: Add POST Request handler to give feedback

---
 .../de/thm/arsnova/SessionController.java     |  9 ++++-
 .../thm/arsnova/services/ISessionService.java |  2 +-
 .../thm/arsnova/services/SessionService.java  | 38 ++++++++++++++++++-
 3 files changed, 44 insertions(+), 5 deletions(-)

diff --git a/src/main/java/de/thm/arsnova/SessionController.java b/src/main/java/de/thm/arsnova/SessionController.java
index 5b7cdb27..497fbfc8 100644
--- a/src/main/java/de/thm/arsnova/SessionController.java
+++ b/src/main/java/de/thm/arsnova/SessionController.java
@@ -57,7 +57,12 @@ public class SessionController {
 	}
 	
 	@RequestMapping(value="/session/{sessionkey}/feedback", method=RequestMethod.POST)
-	public boolean postFeedback(@PathVariable String sessionkey, @RequestBody int value, HttpServletResponse response) {
-		return false;
+	public String postFeedback(@PathVariable String sessionkey, @RequestBody int value, HttpServletResponse response) {
+		if (sessionService.postFeedback(sessionkey, value)) {
+			response.setStatus(HttpStatus.CREATED.value());
+			return null;
+		}
+		response.setStatus(HttpStatus.SERVICE_UNAVAILABLE.value());
+		return null;
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/services/ISessionService.java b/src/main/java/de/thm/arsnova/services/ISessionService.java
index b14242b5..9f3bb394 100644
--- a/src/main/java/de/thm/arsnova/services/ISessionService.java
+++ b/src/main/java/de/thm/arsnova/services/ISessionService.java
@@ -26,6 +26,6 @@ public interface ISessionService {
 
 	public Session getSession(String keyword);
 	public Feedback getFeedback(String keyword);
-	public void postFeedback(String keyword, int value);
+	public boolean postFeedback(String keyword, int value);
 	
 }
\ No newline at end of file
diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java
index d8b8f37f..23969d71 100644
--- a/src/main/java/de/thm/arsnova/services/SessionService.java
+++ b/src/main/java/de/thm/arsnova/services/SessionService.java
@@ -18,6 +18,7 @@
  */
 package de.thm.arsnova.services;
 
+import java.io.IOException;
 import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.List;
@@ -32,6 +33,7 @@ import org.springframework.security.core.userdetails.User;
 import org.springframework.stereotype.Service;
 
 import com.fourspaces.couchdb.Database;
+import com.fourspaces.couchdb.Document;
 import com.fourspaces.couchdb.View;
 import com.fourspaces.couchdb.ViewResults;
 
@@ -122,8 +124,40 @@ public class SessionService implements ISessionService {
 	}
 
 	@Override
-	public void postFeedback(String keyword, int value) {
-
+	public boolean postFeedback(String keyword, int value) {
+		String sessionId = this.getSessionId(keyword);
+		if (sessionId == null) return false;
+		
+		Document feedback = new Document();
+		feedback.put("type", "understanding");
+		feedback.put("user", this.actualUserName());
+		feedback.put("sessionId", sessionId);
+		feedback.put("timestamp", System.currentTimeMillis());
+		
+		switch (value) {
+			case 0:
+				feedback.put("value", "Bitte schneller");
+				break;
+			case 1:
+				feedback.put("value", "Kann folgen");
+				break;
+			case 2:
+				feedback.put("value", "Zu schnell");
+				break;
+			case 3:
+				feedback.put("value", "Nicht mehr dabei");
+				break;
+			default:
+				return false;
+		}
+		
+		try {
+			database.saveDocument(feedback);
+		} catch (IOException e) {
+			return false;
+		}
+		
+		return true;
 	}
 
 	private String getSessionId(String keyword) {
-- 
GitLab