From c9406306c52398d93711a846b0675af849300d1c Mon Sep 17 00:00:00 2001 From: Daniel Gerhardt <code@dgerhardt.net> Date: Mon, 5 Mar 2018 12:09:56 +0100 Subject: [PATCH] Support 'ownerId' property for /room/find --- .../java/de/thm/arsnova/persistance/RoomRepository.java | 1 + .../persistance/couchdb/CouchDbRoomRepository.java | 9 +++++++++ .../de/thm/arsnova/services/RoomFindQueryService.java | 3 +-- src/main/java/de/thm/arsnova/services/RoomService.java | 2 ++ .../java/de/thm/arsnova/services/RoomServiceImpl.java | 7 +++++++ src/main/resources/couchdb/Room.design.js | 7 +++++++ 6 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/thm/arsnova/persistance/RoomRepository.java b/src/main/java/de/thm/arsnova/persistance/RoomRepository.java index 2535a4cd6..2e89e3e24 100644 --- a/src/main/java/de/thm/arsnova/persistance/RoomRepository.java +++ b/src/main/java/de/thm/arsnova/persistance/RoomRepository.java @@ -30,6 +30,7 @@ public interface RoomRepository extends CrudRepository<Room, String> { List<Room> findInactiveGuestRoomsMetadata(long lastActivityBefore); List<Room> findByOwner(ClientAuthentication owner, int start, int limit); List<Room> findByOwnerId(String ownerId, int start, int limit); + List<String> findIdsByOwnerId(String ownerId); List<Room> findAllForPublicPool(); List<Room> findForPublicPoolByOwner(ClientAuthentication owner); List<Room> getRoomsWithStatsForOwner(ClientAuthentication owner, int start, int limit); 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 50e457d79..b03c16b8b 100644 --- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbRoomRepository.java +++ b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbRoomRepository.java @@ -287,6 +287,15 @@ public class CouchDbRoomRepository extends CouchDbCrudRepository<Room> implement Room.class); } + @Override + public List<String> findIdsByOwnerId(final String ownerId) { + ViewResult result = db.queryView(createQuery("by_ownerid") + .key(ownerId) + .includeDocs(false)); + + return result.getRows().stream().map(ViewResult.Row::getId).collect(Collectors.toList()); + } + @Override public List<Room> findAllForPublicPool() { // TODO replace with new view diff --git a/src/main/java/de/thm/arsnova/services/RoomFindQueryService.java b/src/main/java/de/thm/arsnova/services/RoomFindQueryService.java index d2be15025..c56a6c9b3 100644 --- a/src/main/java/de/thm/arsnova/services/RoomFindQueryService.java +++ b/src/main/java/de/thm/arsnova/services/RoomFindQueryService.java @@ -47,8 +47,7 @@ public class RoomFindQueryService implements FindQueryService<Room> { .map(UserProfile.RoomHistoryEntry::getRoomId).collect(Collectors.toList())); } if (findQuery.getProperties().getOwnerId() != null) { - /* TODO: nyi */ - // ids.add(roomService.getUserRooms(findQuery.getProperties().getOwnerId())); + ids.add(roomService.getUserRoomIds(findQuery.getProperties().getOwnerId())); } return ids.stream().flatMap(list -> list.stream()).collect(Collectors.toSet()); diff --git a/src/main/java/de/thm/arsnova/services/RoomService.java b/src/main/java/de/thm/arsnova/services/RoomService.java index 77358a076..9c33d89b9 100644 --- a/src/main/java/de/thm/arsnova/services/RoomService.java +++ b/src/main/java/de/thm/arsnova/services/RoomService.java @@ -46,6 +46,8 @@ public interface RoomService extends EntityService<Room> { List<Room> getUserRooms(String userId); + List<String> getUserRoomIds(String userId); + List<Room> getUserRoomHistory(String userId); List<Room> getMyRooms(int offset, int limit); diff --git a/src/main/java/de/thm/arsnova/services/RoomServiceImpl.java b/src/main/java/de/thm/arsnova/services/RoomServiceImpl.java index 3efda3b0b..e70355428 100644 --- a/src/main/java/de/thm/arsnova/services/RoomServiceImpl.java +++ b/src/main/java/de/thm/arsnova/services/RoomServiceImpl.java @@ -250,6 +250,13 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R return roomRepository.findByOwnerId(userId, 0, 0); } + /* TODO: Updated SpEL expression has not been tested yet */ + @Override + @PreAuthorize("isAuthenticated() and hasPermission(#userId, 'userprofile', 'owner')") + public List<String> getUserRoomIds(String userId) { + return roomRepository.findIdsByOwnerId(userId); + } + @Override @PreAuthorize("isAuthenticated()") public List<Room> getMyRooms(final int offset, final int limit) { diff --git a/src/main/resources/couchdb/Room.design.js b/src/main/resources/couchdb/Room.design.js index 703528c46..a2999f96e 100644 --- a/src/main/resources/couchdb/Room.design.js +++ b/src/main/resources/couchdb/Room.design.js @@ -23,6 +23,13 @@ var designDoc = { } } }, + "by_ownerid": { + "map": function (doc) { + if (doc.type === "Room") { + emit(doc.ownerId, {_rev: doc._rev}); + } + } + }, "by_lastactivity_for_guests": { /* needs rewrite */ "map": function (doc) { if (doc.type === "Room" && !doc.poolProperties && doc.creator.indexOf("Guest") === 0) { -- GitLab