From 22ae8a81dc5248bb50f60eba217933c478525cca Mon Sep 17 00:00:00 2001 From: Christoph Date: Wed, 25 Mar 2020 14:46:02 +0100 Subject: [PATCH] partial fix search: max user anzahl display Co-authored-by: [Mahgs] Co-authored-by: Christoph Co-authored-by: XXNitram --- .../mops/gruppen2/controller/WebController.java | 2 ++ .../gruppen2/repository/EventRepository.java | 6 ++++++ .../mops/gruppen2/service/EventService.java | 4 ++++ .../mops/gruppen2/service/GroupService.java | 17 +++++++---------- src/main/resources/templates/search.html | 4 +--- 5 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/main/java/mops/gruppen2/controller/WebController.java b/src/main/java/mops/gruppen2/controller/WebController.java index 27b7a69..1b4720d 100644 --- a/src/main/java/mops/gruppen2/controller/WebController.java +++ b/src/main/java/mops/gruppen2/controller/WebController.java @@ -199,10 +199,12 @@ public class WebController { Model model, @RequestParam(value = "suchbegriff", required = false) String search) throws EventException { Account account = keyCloakService.createAccountFromPrincipal(token); + List groups = new ArrayList<>(); if (search != null) { groups = groupService.findGroupWith(search, account); } + model.addAttribute("account", account); model.addAttribute("gruppen", groups); return "search"; diff --git a/src/main/java/mops/gruppen2/repository/EventRepository.java b/src/main/java/mops/gruppen2/repository/EventRepository.java index e5249a4..b306452 100644 --- a/src/main/java/mops/gruppen2/repository/EventRepository.java +++ b/src/main/java/mops/gruppen2/repository/EventRepository.java @@ -34,4 +34,10 @@ public interface EventRepository extends CrudRepository { @Query("SELECT * FROM event WHERE event_type = :type AND user_id = :userId") List findEventsByTypeAndUserId(@Param("type") String type, @Param("userId") String userId); + + @Query("SELECT COUNT(*) FROM event WHERE event_type = :type AND group_id = :groupId") + Long countEventsByTypeAndGroupId(@Param("type") String type, @Param("groupId") String groupId); + + @Query("SELECT COUNT(*) FROM event WHERE group_id = :groupId AND user_id = :userId AND event_type = :type") + Long countEventsByGroupIdAndUserIdAndEventType(@Param("groupId") String groupId, @Param("userId") String userId, @Param("type") String type); } diff --git a/src/main/java/mops/gruppen2/service/EventService.java b/src/main/java/mops/gruppen2/service/EventService.java index ec834bb..4d52888 100644 --- a/src/main/java/mops/gruppen2/service/EventService.java +++ b/src/main/java/mops/gruppen2/service/EventService.java @@ -132,4 +132,8 @@ public class EventService { .collect(Collectors.toList()); } + public boolean userInGroup(UUID groupId, String userId) { + return eventStore.countEventsByGroupIdAndUserIdAndEventType(groupId.toString(), userId, "AddUserEvent") + > eventStore.countEventsByGroupIdAndUserIdAndEventType(groupId.toString(), userId, "DeleteUserEvent"); + } } diff --git a/src/main/java/mops/gruppen2/service/GroupService.java b/src/main/java/mops/gruppen2/service/GroupService.java index 24a0f8b..aa22132 100644 --- a/src/main/java/mops/gruppen2/service/GroupService.java +++ b/src/main/java/mops/gruppen2/service/GroupService.java @@ -2,7 +2,6 @@ package mops.gruppen2.service; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.GroupType; -import mops.gruppen2.domain.User; import mops.gruppen2.domain.Visibility; import mops.gruppen2.domain.dto.EventDTO; import mops.gruppen2.domain.event.Event; @@ -83,19 +82,13 @@ public class GroupService { groupEvents.addAll(eventService.translateEventDTOs(eventRepository.findAllEventsByType("DeleteGroupEvent"))); groupEvents.addAll(eventService.translateEventDTOs(eventRepository.findAllEventsByType("UpdateUserMaxEvent"))); - groupEvents.addAll(eventService.translateEventDTOs(eventRepository.findEventsByTypeAndUserId("AddUserEvent", userId))); - groupEvents.addAll(eventService.translateEventDTOs(eventRepository.findEventsByTypeAndUserId("DeleteUserEvent", userId))); - List visibleGroups = projectEventList(groupEvents); - User currentUserDummy = new User(userId, null, null, null); - return visibleGroups.parallelStream() .filter(group -> group.getType() != null) - .filter(group -> !group.getMembers().contains(currentUserDummy)) + .filter(group -> !eventService.userInGroup(group.getId(), userId)) .filter(group -> group.getVisibility() == Visibility.PUBLIC) .collect(Collectors.toList()); - } /** @@ -128,11 +121,15 @@ public class GroupService { * @throws EventException Projektionsfehler */ public List findGroupWith(String search, Account account) throws EventException { + if (search.isEmpty()) { + return getAllGroupWithVisibilityPublic(account.getName()); + } + return getAllGroupWithVisibilityPublic(account.getName()) .parallelStream() .filter(group -> - group.getTitle().toLowerCase().contains(search.toLowerCase()) || - group.getDescription().toLowerCase().contains(search.toLowerCase())) + group.getTitle().toLowerCase().contains(search.toLowerCase()) || + group.getDescription().toLowerCase().contains(search.toLowerCase())) .collect(Collectors.toList()); } } diff --git a/src/main/resources/templates/search.html b/src/main/resources/templates/search.html index efb1dbf..bc38f71 100644 --- a/src/main/resources/templates/search.html +++ b/src/main/resources/templates/search.html @@ -53,7 +53,7 @@ Gruppenname Beschreibung - Mitgliederanzahl + Max. Mitgliederanzahl @@ -66,8 +66,6 @@ Beschreibung - - / unbegrenzt