diff --git a/src/main/java/de/thm/arsnova/controller/LegacyController.java b/src/main/java/de/thm/arsnova/controller/LegacyController.java index 6950c2cd329457b95b45b2f15800e5fea4316776..5a7a9b8ecdca964a4d4a423f3f134a4446f129f8 100644 --- a/src/main/java/de/thm/arsnova/controller/LegacyController.java +++ b/src/main/java/de/thm/arsnova/controller/LegacyController.java @@ -25,6 +25,7 @@ import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; @Controller public class LegacyController extends AbstractController { @@ -33,6 +34,24 @@ public class LegacyController extends AbstractController { /* specific routes */ + @RequestMapping(value = "/session/mysessions", method = RequestMethod.GET) + public final String redirectSessionMy( + final HttpServletResponse response + ) { + response.addHeader("X-Deprecated-API", "1"); + + return "forward:/session/?filter=owned"; + } + + @RequestMapping(value = "/session/visitedsessions", method = RequestMethod.GET) + public final String redirectSessionVisited( + final HttpServletResponse response + ) { + response.addHeader("X-Deprecated-API", "1"); + + return "forward:/session/?filter=visited"; + } + @RequestMapping(value = "/session/{sessionKey}/question") public final String redirectQuestionByLecturer( @PathVariable final String sessionKey, @@ -42,7 +61,7 @@ public class LegacyController extends AbstractController { return String.format("forward:/question/bylecturer/?sessionkey=%s", sessionKey); } - @RequestMapping(value = "/session/{sessionKey}/skillquestions") + @RequestMapping(value = "/session/{sessionKey}/skillquestions", method = RequestMethod.GET) public final String redirectQuestionByLecturerList( @PathVariable final String sessionKey, final HttpServletResponse response @@ -51,7 +70,7 @@ public class LegacyController extends AbstractController { return String.format("forward:/question/bylecturer/list?sessionkey=%s", sessionKey); } - @RequestMapping(value = "/session/{sessionKey}/skillquestioncount") + @RequestMapping(value = "/session/{sessionKey}/skillquestioncount", method = RequestMethod.GET) public final String redirectQuestionByLecturerCount( @PathVariable final String sessionKey, final HttpServletResponse response @@ -60,7 +79,7 @@ public class LegacyController extends AbstractController { return String.format("forward:/question/bylecturer/count?sessionkey=%s", sessionKey); } - @RequestMapping(value = "/session/{sessionKey}/answercount") + @RequestMapping(value = "/session/{sessionKey}/answercount", method = RequestMethod.GET) public final String redirectQuestionByLecturerAnswerCount( @PathVariable final String sessionKey, final HttpServletResponse response @@ -69,7 +88,7 @@ public class LegacyController extends AbstractController { return String.format("forward:/question/bylecturer/answercount?sessionkey=%s", sessionKey); } - @RequestMapping(value = "/session/{sessionKey}/unanswered") + @RequestMapping(value = "/session/{sessionKey}/unanswered", method = RequestMethod.GET) public final String redirectQuestionByLecturerUnnsweredCount( @PathVariable final String sessionKey, final HttpServletResponse response @@ -78,7 +97,7 @@ public class LegacyController extends AbstractController { return String.format("forward:/question/bylecturer/answercount?sessionkey=%s", sessionKey); } - @RequestMapping(value = "/session/{sessionKey}/myanswers") + @RequestMapping(value = "/session/{sessionKey}/myanswers", method = RequestMethod.GET) public final String redirectQuestionByLecturerMyAnswers( @PathVariable final String sessionKey, final HttpServletResponse response @@ -96,7 +115,7 @@ public class LegacyController extends AbstractController { return String.format("forward:/question/byaudience/?sessionkey=%s", sessionKey); } - @RequestMapping(value = "/session/{sessionKey}/interposedcount") + @RequestMapping(value = "/session/{sessionKey}/interposedcount", method = RequestMethod.GET) public final String redirectQuestionByAudienceCount( @PathVariable final String sessionKey, final HttpServletResponse response @@ -105,7 +124,7 @@ public class LegacyController extends AbstractController { return String.format("forward:/question/byaudience/count?sessionkey=%s", sessionKey); } - @RequestMapping(value = "/session/{sessionKey}/interposedreadingcount") + @RequestMapping(value = "/session/{sessionKey}/interposedreadingcount", method = RequestMethod.GET) public final String redirectQuestionByAudienceReadCount( @PathVariable final String sessionKey, final HttpServletResponse response diff --git a/src/main/java/de/thm/arsnova/controller/SessionController.java b/src/main/java/de/thm/arsnova/controller/SessionController.java index 641d6c21dbe793440fc48eee95b5f183fc878bc5..5120bd8ef0c5f6250ae9dc4673a34f32c0caf36c 100644 --- a/src/main/java/de/thm/arsnova/controller/SessionController.java +++ b/src/main/java/de/thm/arsnova/controller/SessionController.java @@ -31,6 +31,7 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; @@ -43,6 +44,7 @@ import de.thm.arsnova.services.ISessionService; import de.thm.arsnova.services.IUserService; @Controller +@RequestMapping("/session") public class SessionController extends AbstractController { public static final Logger LOGGER = LoggerFactory.getLogger(SessionController.class); @@ -53,13 +55,13 @@ public class SessionController extends AbstractController { @Autowired private IUserService userService; - @RequestMapping(value = "/session/{sessionkey}", method = RequestMethod.GET) + @RequestMapping(value = "/{sessionkey}", method = RequestMethod.GET) @ResponseBody public final Session joinSession(@PathVariable final String sessionkey) { return sessionService.joinSession(sessionkey); } - @RequestMapping(value = "/session/{sessionkey}/online", method = RequestMethod.POST) + @RequestMapping(value = "/{sessionkey}/online", method = RequestMethod.POST) @ResponseBody @ResponseStatus(HttpStatus.CREATED) public final LoggedIn registerAsOnlineUser( @@ -75,7 +77,7 @@ public class SessionController extends AbstractController { throw new RuntimeException(); } - @RequestMapping(value = "/session/{sessionkey}/activeusercount", method = RequestMethod.GET) + @RequestMapping(value = "/{sessionkey}/activeusercount", method = RequestMethod.GET) @ResponseBody public final int countActiveUsers( @PathVariable final String sessionkey, @@ -84,7 +86,7 @@ public class SessionController extends AbstractController { return sessionService.countActiveUsers(sessionkey); } - @RequestMapping(value = "/session", method = RequestMethod.POST) + @RequestMapping(value = "/", method = RequestMethod.POST) @ResponseBody @ResponseStatus(HttpStatus.CREATED) public final Session postNewSession(@RequestBody final Session session, final HttpServletResponse response) { @@ -97,27 +99,32 @@ public class SessionController extends AbstractController { return null; } - @RequestMapping(value = { "/mySessions", "/session/mysessions" }, method = RequestMethod.GET) + @RequestMapping(value = "/", method = RequestMethod.GET) @ResponseBody - public final List<Session> getMySession(final HttpServletResponse response) { - String username = userService.getCurrentUser().getUsername(); - if (username == null) { - throw new NotFoundException(); + public final List<Session> getSessions( + @RequestParam final String filter, + final HttpServletResponse response + ) { + User user = userService.getCurrentUser(); + List<Session> sessions = null; + + /* TODO: Could @Authorized annotation be used instead of this check? */ + if (null == user) { + response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); + + return null; } - List<Session> sessions = sessionService.getMySessions(username); - if (sessions == null || sessions.isEmpty()) { - throw new NotFoundException(); + + if ("owned".equals(filter)) { + sessions = sessionService.getMySessions(user); + } else if ("visited".equals(filter)) { + sessions = sessionService.getMyVisitedSessions(userService.getCurrentUser()); } - return sessions; - } - - @RequestMapping(value = "/session/visitedsessions", method = RequestMethod.GET) - @ResponseBody - public final List<Session> getMyVisitedSession(final HttpServletResponse response) { - List<Session> sessions = sessionService.getMyVisitedSessions(userService.getCurrentUser()); + if (sessions == null || sessions.isEmpty()) { - throw new NoContentException(); + response.setStatus(HttpServletResponse.SC_NO_CONTENT); } + return sessions; } } diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index 45319bddad5aee42240012a6f3fef4c83bead5fe..cbefa4fc1601ad92658e48868a362089914c3a0a 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -180,11 +180,11 @@ public class CouchDBDao implements IDatabaseDao { } @Override - public final List<Session> getMySessions(final String username) { + public final List<Session> getMySessions(final User user) { try { View view = new View("session/by_creator"); - view.setStartKey("[" + URLEncoder.encode("\"" + username + "\"", "UTF-8") + "]"); - view.setEndKey("[" + URLEncoder.encode("\"" + username + "\",{}", "UTF-8") + "]"); + view.setStartKey("[" + URLEncoder.encode("\"" + user.getUsername() + "\"", "UTF-8") + "]"); + view.setEndKey("[" + URLEncoder.encode("\"" + user.getUsername() + "\",{}", "UTF-8") + "]"); ViewResults sessions = this.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 2617f6921455955aef4f39d73e223d735dd1b1d1..5df29213d3eea261b95419a9292b3e974a3b5fc9 100644 --- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java +++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java @@ -39,7 +39,7 @@ public interface IDatabaseDao { Session getSession(String keyword); - List<Session> getMySessions(String username); + List<Session> getMySessions(User user); Session saveSession(Session session); diff --git a/src/main/java/de/thm/arsnova/services/ISessionService.java b/src/main/java/de/thm/arsnova/services/ISessionService.java index 7175464fa71de1eba6b68481d45208f312562403..e1ad7d3cbf2525885d17a39cce64104d20e1895e 100644 --- a/src/main/java/de/thm/arsnova/services/ISessionService.java +++ b/src/main/java/de/thm/arsnova/services/ISessionService.java @@ -34,7 +34,7 @@ public interface ISessionService { String generateKeyword(); - List<Session> getMySessions(String username); + List<Session> getMySessions(User user); List<Session> getMyVisitedSessions(User currentUser); diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java index 23f6f881bcd2c8243018f22b327f1516f9772a2d..d74f164f3659c61b4541b54dc9b7a4a4ac20fec9 100644 --- a/src/main/java/de/thm/arsnova/services/SessionService.java +++ b/src/main/java/de/thm/arsnova/services/SessionService.java @@ -53,8 +53,8 @@ public class SessionService implements ISessionService { } @Override - public final List<Session> getMySessions(final String username) { - return databaseDao.getMySessions(username); + public final List<Session> getMySessions(final User user) { + return databaseDao.getMySessions(user); } @Override