From bb0c398120f21e2265f725a4ed606a9b2e233c07 Mon Sep 17 00:00:00 2001 From: "konstantina.galouni" Date: Mon, 22 Nov 2021 13:44:41 +0200 Subject: [PATCH] #7183: In DMP invitation, return authors whose name/ email contains the query string given by user (case insensitive). 1. InvitationsManager.java: Added method "getUsersWithCriteria()" to filter results according to "userInfoRequestItem.getCriteria().getLike()". 2. UserInvitationController.java: In method "getUsers()" added parameter "@RequestBody UserInfoRequestItem userInfoRequestItem" and call new method "invitationsManager.getUsersWithCriteria()" (instead of getUsers()). --- .../controllers/UserInvitationController.java | 7 +++++-- .../logic/managers/InvitationsManager.java | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/UserInvitationController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/UserInvitationController.java index c751742f2..d9633d312 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/UserInvitationController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/UserInvitationController.java @@ -50,8 +50,11 @@ public class UserInvitationController extends BaseController { @RequestMapping(method = RequestMethod.POST, value = {"/getUsers"}, consumes = "application/json", produces = "application/json") public @ResponseBody - ResponseEntity>> getUsers(Principal principal) throws IllegalAccessException, InstantiationException { - List users = invitationsManager.getUsers(principal); +// ResponseEntity>> getUsers(Principal principal) throws IllegalAccessException, InstantiationException { + ResponseEntity>> getUsers(Principal principal, @RequestBody UserInfoRequestItem userInfoRequestItem) throws IllegalAccessException, InstantiationException { + System.out.println(userInfoRequestItem.getCriteria().getLike()); +// List users = invitationsManager.getUsers(principal); + List users = invitationsManager.getUsersWithCriteria(principal, userInfoRequestItem); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().status(ApiMessageCode.SUCCESS_MESSAGE).payload(users)); } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/InvitationsManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/InvitationsManager.java index 9c9e30537..8b11369d7 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/InvitationsManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/InvitationsManager.java @@ -3,6 +3,7 @@ package eu.eudat.logic.managers; import eu.eudat.data.entities.DMP; import eu.eudat.data.entities.UserDMP; import eu.eudat.data.entities.UserInfo; +import eu.eudat.data.query.items.item.userinfo.UserInfoRequestItem; import eu.eudat.exceptions.security.UnauthorisedException; import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.utilities.helpers.StreamDistinctBy; @@ -82,6 +83,23 @@ public class InvitationsManager { return userModels; } + public List getUsersWithCriteria(Principal principal, UserInfoRequestItem userInfoRequestItem) throws IllegalAccessException, InstantiationException { + List users = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao() + .getAuthenticated(apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().asQueryable() + .where(((builder, root) -> + builder.notEqual(root.get("status"), DMP.DMPStatus.DELETED.getValue()))), principal.getId(), Stream.of(0, 1).collect(Collectors.toList())) + .toList().stream().map(DMP::getUsers).flatMap(Collection::stream).map(UserDMP::getUser) + .filter(userInfo -> !userInfo.getId().equals(principal.getId())).filter(StreamDistinctBy.distinctByKey(UserInfo::getId)) + .filter(userInfo -> (userInfoRequestItem == null || userInfoRequestItem.getCriteria() == null || userInfoRequestItem.getCriteria().getLike() == null + || userInfo.getName().toLowerCase().contains(userInfoRequestItem.getCriteria().getLike().toLowerCase()) + || (userInfo.getEmail().toLowerCase().contains(userInfoRequestItem.getCriteria().getLike().toLowerCase())))) + .collect(Collectors.toList()); +// .where((builder, root) -> builder.like(builder.upper(root.get("name")), "%" + userInfoRequestItem.getCriteria().getLike().toUpperCase() + "%")) + + List userModels = users.stream().map(userInfo -> new UserInfoInvitationModel().fromDataModel(userInfo)).collect(Collectors.toList()); + return userModels; + } + public UUID assignUserAcceptedInvitation(UUID invitationID, Principal principal) throws UnauthorisedException, JAXBException, IOException { eu.eudat.data.entities.Invitation invitation = apiContext.getOperationsContext().getDatabaseRepository().getInvitationDao().find(invitationID); if (invitation == null)