diff --git a/kypo2-api-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/api/facade/UserFacade.java b/kypo2-api-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/api/facade/UserFacade.java index 8ffeb25fc1d9985fa06cbb4b7419bcdc8a4d228b..62f5c33cc6d4ac7910e2dd23a940652a89fb515f 100644 --- a/kypo2-api-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/api/facade/UserFacade.java +++ b/kypo2-api-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/api/facade/UserFacade.java @@ -129,6 +129,14 @@ public interface UserFacade { */ PageResultResource<UserDTO> getUsersWithGivenIds(Set<Long> ids, Pageable pageable); + + /** + * Gets users with given ids. + * + * @param ids ids of users. + * @return set of {@link UserDTO}s with given ids wrapped up in {@link PageResultResource}. + */ + PageResultResource<UserDTO> getUsersWithGivenIds(Set<Long> ids, Pageable pageable, Predicate predicate); /** * Returns a page of users specified by given role type and not with given ids. * @@ -137,4 +145,14 @@ public interface UserFacade { * @return set of {@link UserDTO}s with given role type and not with given ids wrapped up in {@link PageResultResource}. */ PageResultResource<UserDTO> getUsersWithGivenRoleAndNotWithGivenIds(String roleType, Set<Long> ids, Pageable pageable); + + + /** + * Gets a page of users specified by given predicate and pageable. + * + * @param predicate specifies query to database. + * @param pageable pageable parameter with information about pagination. + * @return a list of the {@link UserDTO}s wrapped up in {@link PageResultResource}. + */ + PageResultResource<UserDTO> getUsers(Predicate predicate, Pageable pageable, String roleType, Set<Long> userIds); } diff --git a/kypo2-rest-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/rest/controllers/RolesRestController.java b/kypo2-rest-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/rest/controllers/RolesRestController.java index 45bb399b2a52717c210075170c05e78a57d7e8d3..d855cf1edfea92b8900f49d4c6e58f4f3097f36d 100644 --- a/kypo2-rest-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/rest/controllers/RolesRestController.java +++ b/kypo2-rest-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/rest/controllers/RolesRestController.java @@ -237,9 +237,7 @@ public class RolesRestController { throw new BadRequestException("Choose page size lower than 1000"); } try { - Predicate usersWithRoles = QUser.user.groups.any().roles.any().roleType.eq(roleType); - Predicate finalPredicate = QUser.user.id.notIn(userIds).and(usersWithRoles).and(predicate); - PageResultResource<UserDTO> userDTOs = userFacade.getUsers(finalPredicate, pageable); + PageResultResource<UserDTO> userDTOs = userFacade.getUsers(predicate, pageable, roleType, userIds); Squiggly.init(objectMapper, fields); return new ResponseEntity<>(SquigglyUtils.stringify(objectMapper, userDTOs), HttpStatus.OK); } catch (UserAndGroupFacadeException e) { diff --git a/kypo2-rest-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/rest/controllers/UsersRestController.java b/kypo2-rest-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/rest/controllers/UsersRestController.java index 8d4c982afc84c35575adf2a49d2ee006da99c4eb..d6525cf1523c918c06bd2516589675840867eeac 100644 --- a/kypo2-rest-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/rest/controllers/UsersRestController.java +++ b/kypo2-rest-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/rest/controllers/UsersRestController.java @@ -333,8 +333,7 @@ public class UsersRestController { if (ids.isEmpty()) { userDTOs = new PageResultResource<>(Collections.emptyList(), new PageResultResource.Pagination(0, 0, 0, 0, 0 )); } else { - Predicate finalPredicate = QUser.user.id.in(ids).and(predicate); - userDTOs = userFacade.getUsers(finalPredicate, pageable); + userDTOs = userFacade.getUsersWithGivenIds(ids, pageable, predicate); } Squiggly.init(objectMapper, fields); return new ResponseEntity<>(SquigglyUtils.stringify(objectMapper, userDTOs), HttpStatus.OK); diff --git a/kypo2-service-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/facade/UserFacadeImpl.java b/kypo2-service-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/facade/UserFacadeImpl.java index 1a060ad5ffb080215160640f7f4c79393d6b1b5c..d41aec88ca16c886dc72b2e9b8271b542b896058 100644 --- a/kypo2-service-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/facade/UserFacadeImpl.java +++ b/kypo2-service-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/facade/UserFacadeImpl.java @@ -60,6 +60,12 @@ public class UserFacadeImpl implements UserFacade { return userMapper.mapToPageResultResource(userService.getAllUsers(predicate, pageable)); } + @Override + @TransactionalRO + public PageResultResource<UserDTO> getUsers(Predicate predicate, Pageable pageable, String roleType, Set<Long> userIds) { + return userMapper.mapToPageResultResource(userService.getAllUsers(predicate, pageable, roleType, userIds)); + } + @Override @TransactionalRO public UserDTO getUser(Long id) { @@ -195,6 +201,17 @@ public class UserFacadeImpl implements UserFacade { } @Override + public PageResultResource<UserDTO> getUsersWithGivenIds(Set<Long> ids, Pageable pageable, Predicate predicate) { + try { + return userMapper.mapToPageResultResource(userService.getUsersWithGivenIds(ids, pageable, predicate)); + + } catch (UserAndGroupServiceException ex) { + throw new UserAndGroupFacadeException(ex.getLocalizedMessage()); + } + } + + @Override + @TransactionalRO public PageResultResource<UserDTO> getUsersWithGivenRoleAndNotWithGivenIds(String roleType, Set<Long> ids, Pageable pageable) { try { return userMapper.mapToPageResultResource(userService.getUsersWithGivenRoleAndNotWithGivenIds(roleType, ids, pageable)); diff --git a/kypo2-service-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/service/impl/UserServiceImpl.java b/kypo2-service-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/service/impl/UserServiceImpl.java index 23f969f5ff0ff6dd540be66d6110975617fbfa3b..240f06b51a24726c1a883eda76e5810a5659f7e5 100644 --- a/kypo2-service-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/service/impl/UserServiceImpl.java +++ b/kypo2-service-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/service/impl/UserServiceImpl.java @@ -5,6 +5,7 @@ import cz.muni.ics.kypo.userandgroup.annotations.security.IsAdmin; import cz.muni.ics.kypo.userandgroup.api.dto.enums.UserDeletionStatusDTO; import cz.muni.ics.kypo.userandgroup.exceptions.UserAndGroupServiceException; import cz.muni.ics.kypo.userandgroup.model.IDMGroup; +import cz.muni.ics.kypo.userandgroup.model.QUser; import cz.muni.ics.kypo.userandgroup.model.Role; import cz.muni.ics.kypo.userandgroup.model.User; import cz.muni.ics.kypo.userandgroup.model.enums.UserAndGroupStatus; @@ -135,6 +136,13 @@ public class UserServiceImpl implements UserService { return userRepository.findAll(predicate, pageable); } + @Override + public Page<User> getAllUsers(Predicate predicate, Pageable pageable, String roleType, Set<Long> userIds) { + Predicate usersWithRoles = QUser.user.groups.any().roles.any().roleType.eq(roleType); + Predicate finalPredicate = QUser.user.id.notIn(userIds).and(usersWithRoles).and(predicate); + return userRepository.findAll(finalPredicate, pageable); + } + @Override @IsAdmin public Page<User> getAllUsersNotInGivenGroup(Long groupId, Pageable pageable) { @@ -214,6 +222,12 @@ public class UserServiceImpl implements UserService { return userRepository.findAllWithGivenIds(ids, pageable); } + @Override + public Page<User> getUsersWithGivenIds(Set<Long> ids, Pageable pageable, Predicate predicate) { + Predicate finalPredicate = QUser.user.id.in(ids).and(predicate); + return userRepository.findAll(finalPredicate, pageable); + } + @Override public Page<User> getUsersWithGivenRoleAndNotWithGivenIds(String roleType, Set<Long> ids, Pageable pageable) { Assert.notNull(roleType, "Role type must not be null"); diff --git a/kypo2-service-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/service/interfaces/UserService.java b/kypo2-service-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/service/interfaces/UserService.java index eee1b1c8f9c70d4bd4db1900cecbd06a9a5e01b1..71420e6c8daba745f5e2f40b594730f01e44a354 100644 --- a/kypo2-service-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/service/interfaces/UserService.java +++ b/kypo2-service-user-and-group/src/main/java/cz/muni/ics/kypo/userandgroup/service/interfaces/UserService.java @@ -82,6 +82,15 @@ public interface UserService { */ Page<User> getAllUsers(Predicate predicate, Pageable pageable); + /** + * Gets all users from the database. + * + * @param predicate represents a predicate (boolean-valued function) of one argument. + * @param pageable pageable parameter with information about pagination. + * @return list of {@link User}s wrapped up in {@link Page}. + */ + Page<User> getAllUsers(Predicate predicate, Pageable pageable, String roleType, Set<Long> userIds); + /** * Gets all users, not in a given IDMGroup with the given ID. * @@ -165,6 +174,15 @@ public interface UserService { */ Page<User> getUsersWithGivenIds(Set<Long> ids, Pageable pageable); + /** + * Gets users with a given set of ids. + * + * @param ids set of ids. + * @return set of {@link User}s with ids wrapped up in {@link Page}. + */ + Page<User> getUsersWithGivenIds(Set<Long> ids, Pageable pageable, Predicate predicate); + + /** * Returns a page of users specified by given role type and not with given ids. *