diff --git a/src/main/java/de/thm/arsnova/controller/SessionController.java b/src/main/java/de/thm/arsnova/controller/SessionController.java index 889f471aa3c6c395a0966c41c5d1a637c9bd365e..bf8526cf4145b2e67f75152ce5e15656bbf87618 100644 --- a/src/main/java/de/thm/arsnova/controller/SessionController.java +++ b/src/main/java/de/thm/arsnova/controller/SessionController.java @@ -162,9 +162,10 @@ public class SessionController extends PaginationController { List<Room> rooms; if (!"".equals(username)) { + final String userId = userService.getByUsername(username).getId(); try { if (ownedOnly && !visitedOnly) { - rooms = roomService.getUserSessions(username); + rooms = roomService.getUserSessions(userId); } else if (visitedOnly && !ownedOnly) { rooms = roomService.getUserVisitedSessions(username); } else { diff --git a/src/main/java/de/thm/arsnova/persistance/RoomRepository.java b/src/main/java/de/thm/arsnova/persistance/RoomRepository.java index b9e577ab332a9a235bb09188cba41a0bceba78d7..d7b5d111d0e5c25dcd20bf10c4c0b3ac1003f915 100644 --- a/src/main/java/de/thm/arsnova/persistance/RoomRepository.java +++ b/src/main/java/de/thm/arsnova/persistance/RoomRepository.java @@ -29,14 +29,14 @@ import java.util.List; public interface RoomRepository extends CrudRepository<Room, String> { Room findByKeyword(String keyword); List<Room> findInactiveGuestSessionsMetadata(long lastActivityBefore); - List<Room> findByUser(UserAuthentication user, int start, int limit); - List<Room> findByUsername(String username, int start, int limit); + List<Room> findByOwner(UserAuthentication owner, int start, int limit); + List<Room> findByOwnerId(String ownerId, int start, int limit); List<Room> findAllForPublicPool(); - List<Room> findForPublicPoolByUser(UserAuthentication user); - List<Room> getRoomsWithStatsForUser(UserAuthentication user, int start, int limit); - List<Room> getVisitedRoomsWithStatsForUser(List<Room> rooms, UserAuthentication user); + List<Room> findForPublicPoolByOwner(UserAuthentication owner); + List<Room> getRoomsWithStatsForOwner(UserAuthentication owner, int start, int limit); + List<Room> getVisitedRoomsWithStatsForOwner(List<Room> rooms, UserAuthentication owner); List<Room> findInfosForPublicPool(); - List<Room> findInfosForPublicPoolByUser(UserAuthentication user); + List<Room> findInfosForPublicPoolByOwner(UserAuthentication owner); List<Room> findSessionsByCourses(List<Course> courses); Room importSession(UserAuthentication user, ImportExportSession importSession); ImportExportSession exportSession(String sessionkey, Boolean withAnswer, Boolean withFeedbackQuestions); diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbRoomRepository.java b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbRoomRepository.java index 0a3a18a10df6adab658f5ece430edea2206bc011..af61629e09880398f4067b72217a031afef102a6 100644 --- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbRoomRepository.java +++ b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbRoomRepository.java @@ -268,22 +268,22 @@ public class CouchDbRoomRepository extends CouchDbCrudRepository<Room> implement } @Override - public List<Room> findByUser(final UserAuthentication user, final int start, final int limit) { - return findByUsername(user.getUsername(), start, limit); + public List<Room> findByOwner(final UserAuthentication owner, final int start, final int limit) { + return findByOwnerId(owner.getId(), start, limit); } @Override - public List<Room> findByUsername(final String username, final int start, final int limit) { + public List<Room> findByOwnerId(final String ownerId, final int start, final int limit) { final int qSkip = start > 0 ? start : -1; final int qLimit = limit > 0 ? limit : -1; /* TODO: Only load IDs and check against cache for data. */ return db.queryView( - createQuery("partial_by_sessiontype_creator_name") + createQuery("partial_by_pool_ownerid_name") .skip(qSkip) .limit(qLimit) - .startKey(ComplexKey.of(null, username)) - .endKey(ComplexKey.of(null, username, ComplexKey.emptyObject())) + .startKey(ComplexKey.of(false, ownerId)) + .endKey(ComplexKey.of(false, ownerId, ComplexKey.emptyObject())) .includeDocs(true), Room.class); } @@ -301,20 +301,20 @@ public class CouchDbRoomRepository extends CouchDbCrudRepository<Room> implement } @Override - public List<Room> findForPublicPoolByUser(final UserAuthentication user) { + public List<Room> findForPublicPoolByOwner(final UserAuthentication owner) { /* TODO: Only load IDs and check against cache for data. */ return db.queryView( - createQuery("partial_by_sessiontype_creator_name") - .startKey(ComplexKey.of("public_pool", user.getUsername())) - .endKey(ComplexKey.of("public_pool", user.getUsername(), ComplexKey.emptyObject())) + createQuery("partial_by_pool_ownerid_name") + .startKey(ComplexKey.of(true, owner.getId())) + .endKey(ComplexKey.of(true, owner.getId(), ComplexKey.emptyObject())) .includeDocs(true), Room.class); } /* TODO: Move to service layer. */ @Override - public List<Room> findInfosForPublicPoolByUser(final UserAuthentication user) { - final List<Room> rooms = this.findForPublicPoolByUser(user); + public List<Room> findInfosForPublicPoolByOwner(final UserAuthentication owner) { + final List<Room> rooms = this.findForPublicPoolByOwner(owner); if (rooms.isEmpty()) { return new ArrayList<>(); } @@ -323,8 +323,8 @@ public class CouchDbRoomRepository extends CouchDbCrudRepository<Room> implement /* TODO: Move to service layer. */ @Override - public List<Room> getRoomsWithStatsForUser(final UserAuthentication user, final int start, final int limit) { - final List<Room> sessions = this.findByUser(user, start, limit); + public List<Room> getRoomsWithStatsForOwner(final UserAuthentication owner, final int start, final int limit) { + final List<Room> sessions = this.findByOwner(owner, start, limit); if (sessions.isEmpty()) { return new ArrayList<>(); } @@ -347,9 +347,9 @@ public class CouchDbRoomRepository extends CouchDbCrudRepository<Room> implement } /* TODO: Move to service layer. */ - public List<Room> getVisitedRoomsWithStatsForUser(final List<Room> rooms, final UserAuthentication user) { + public List<Room> getVisitedRoomsWithStatsForOwner(final List<Room> rooms, final UserAuthentication owner) { final ViewQuery answeredQuestionsView = createQuery("by_user_sessionid").designDocId("_design/Answer") - .keys(rooms.stream().map(session -> ComplexKey.of(user.getUsername(), session.getId())).collect(Collectors.toList())); + .keys(rooms.stream().map(session -> ComplexKey.of(owner.getUsername(), session.getId())).collect(Collectors.toList())); final ViewQuery contentIdsView = createQuery("by_sessionid").designDocId("_design/Content") .keys(rooms.stream().map(Room::getId).collect(Collectors.toList())); diff --git a/src/main/java/de/thm/arsnova/services/RoomService.java b/src/main/java/de/thm/arsnova/services/RoomService.java index 683fbc7c3dc918f02b84bb88c25f28bb9abf5b24..87ec7bdc35f7536b0d7d28501927c8ee98760493 100644 --- a/src/main/java/de/thm/arsnova/services/RoomService.java +++ b/src/main/java/de/thm/arsnova/services/RoomService.java @@ -42,7 +42,7 @@ public interface RoomService extends EntityService<Room> { String generateKey(); - List<Room> getUserSessions(String username); + List<Room> getUserSessions(String userId); List<Room> getUserVisitedSessions(String username); diff --git a/src/main/java/de/thm/arsnova/services/RoomServiceImpl.java b/src/main/java/de/thm/arsnova/services/RoomServiceImpl.java index 0e1eb28a732039aba707876eaccf04d104617919..8b16210cb9f5258d12c1e9bc10fdc0df5393d1b5 100644 --- a/src/main/java/de/thm/arsnova/services/RoomServiceImpl.java +++ b/src/main/java/de/thm/arsnova/services/RoomServiceImpl.java @@ -254,14 +254,14 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R @Override @PreAuthorize("isAuthenticated() and hasPermission(#sessionkey, 'session', 'owner')") - public List<Room> getUserSessions(String username) { - return roomRepository.findByUsername(username, 0, 0); + public List<Room> getUserSessions(String userId) { + return roomRepository.findByOwnerId(userId, 0, 0); } @Override @PreAuthorize("isAuthenticated()") public List<Room> getMySessions(final int offset, final int limit) { - return roomRepository.findByUser(userService.getCurrentUser(), offset, limit); + return roomRepository.findByOwner(userService.getCurrentUser(), offset, limit); } @Override @@ -273,14 +273,14 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R @Override @PreAuthorize("isAuthenticated()") public List<Room> getMyPublicPoolSessionsInfo() { - return roomRepository.findInfosForPublicPoolByUser(userService.getCurrentUser()); + return roomRepository.findInfosForPublicPoolByOwner(userService.getCurrentUser()); } @Override @PreAuthorize("isAuthenticated()") public List<Room> getMySessionsInfo(final int offset, final int limit) { final UserAuthentication user = userService.getCurrentUser(); - return roomRepository.getRoomsWithStatsForUser(user, offset, limit); + return roomRepository.getRoomsWithStatsForOwner(user, offset, limit); } @Override @@ -306,7 +306,7 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R @PreAuthorize("isAuthenticated()") public List<Room> getMyVisitedSessionsInfo(final int offset, final int limit) { List<Room> rooms = getMyVisitedSessions(0, 0); - roomRepository.getVisitedRoomsWithStatsForUser(rooms, userService.getCurrentUser()); + roomRepository.getVisitedRoomsWithStatsForOwner(rooms, userService.getCurrentUser()); return rooms; } diff --git a/src/main/resources/couchdb/Room.design.js b/src/main/resources/couchdb/Room.design.js index 8f29c860747b5fb91fc42cb413f5de625d770554..bde7ba5bf1fdc5e63c9ced3c92b2393fdc19b7ee 100644 --- a/src/main/resources/couchdb/Room.design.js +++ b/src/main/resources/couchdb/Room.design.js @@ -4,46 +4,45 @@ var designDoc = { "views": { "by_courseid": { "map": function (doc) { - if (doc.type === "Room" && doc.courseId && doc.sessionType !== "public_pool") { + if (doc.type === "Room" && doc.courseId && !doc.poolProperties) { emit(doc.courseId, {_rev: doc._rev}); } } }, - "by_keyword": { + "by_shortid": { "map": function (doc) { if (doc.type === "Room") { - emit(doc.keyword, {_rev: doc._rev}); + emit(doc.shortId, {_rev: doc._rev}); } } }, - "by_lastactivity_for_guests": { + "by_lastactivity_for_guests": { /* needs rewrite */ "map": function (doc) { - if (doc.type === "Room" && doc.sessionType !== "public_pool" && doc.creator.indexOf("Guest") === 0) { - emit(doc.lastOwnerActivity || doc.creationTime, {_rev: doc._rev}); + if (doc.type === "Room" && !doc.poolProperties && doc.creator.indexOf("Guest") === 0) { + emit(doc.lastOwnerActivity || doc.creationTimestamp, {_rev: doc._rev}); } } }, - "partial_by_sessiontype_creator_name": { + "partial_by_pool_ownerid_name": { "map": function (doc) { if (doc.type === "Room") { - emit([doc.sessionType, doc.creator, doc.name], { - shortName: doc.shortName, - keyword: doc.keyword, - active: doc.active, + emit([!!doc.poolProperties, doc.ownerId, doc.name], { + abbreviation: doc.abbreviation, + shortId: doc.shortId, + locked: doc.locked, courseType: doc.courseType, - creationTime: doc.creationTime + creationTimestamp: doc.creationTimestamp }); } } }, "partial_by_subject_name_for_publicpool": { "map": function (doc) { - if (doc.type === "Room" && doc.sessiontype === "public_pool") { - emit([doc.ppSubject, doc.name], { - ppSubject: doc.ppSubject, + if (doc.type === "Room" && doc.poolProperties) { + emit([doc.poolProperties.category, doc.name], { name: doc.name, - keyword: doc.keyword, - ppLevel: doc.ppLevel + shortId: doc.shortId, + poolProperties: doc.poolProperties }); } }