diff --git a/src/main/java/mops/gruppen2/controller/WebController.java b/src/main/java/mops/gruppen2/controller/WebController.java index feaad22..724de65 100644 --- a/src/main/java/mops/gruppen2/controller/WebController.java +++ b/src/main/java/mops/gruppen2/controller/WebController.java @@ -199,12 +199,14 @@ public class WebController { Model model, @RequestParam(value = "suchbegriff", required = false) String search) throws EventException { Account account = keyCloakService.createAccountFromPrincipal(token); - List groupse = new ArrayList<>(); + + List groups = new ArrayList<>(); if (search != null) { - groupse = groupService.findGroupWith(search, account); + groups = groupService.findGroupWith(search, account); } + model.addAttribute("account", account); - model.addAttribute("gruppen", groupse); + 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 f2e6d4d..b306452 100644 --- a/src/main/java/mops/gruppen2/repository/EventRepository.java +++ b/src/main/java/mops/gruppen2/repository/EventRepository.java @@ -31,4 +31,13 @@ public interface EventRepository extends CrudRepository { @Query("SELECT * FROM event WHERE event_type = :type") List findAllEventsByType(@Param("type") String type); + + @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 3fbc8e8..4d52888 100644 --- a/src/main/java/mops/gruppen2/service/EventService.java +++ b/src/main/java/mops/gruppen2/service/EventService.java @@ -127,13 +127,13 @@ public class EventService { } public List findGroupIdsByUser(String userId) { - List groupIDs = eventStore.findGroup_idsWhereUser_id(userId); - - System.out.println(groupIDs); - - return groupIDs.stream() - .map(UUID::fromString) - .collect(Collectors.toList()); + return eventStore.findGroup_idsWhereUser_id(userId).stream() + .map(UUID::fromString) + .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 9a9b6d7..aa22132 100644 --- a/src/main/java/mops/gruppen2/service/GroupService.java +++ b/src/main/java/mops/gruppen2/service/GroupService.java @@ -69,31 +69,37 @@ public class GroupService { } /** - * Sucht alle Zeilen in der DB mit visibility=true. - * Erstellt eine Liste aus öffentlichen Gruppen (ohen bereits beigetretenen Gruppen). + * Wird verwendet bei der Suche nach Gruppen: Titel, Beschreibung werden benötigt. + * Außerdem wird beachtet, ob der eingeloggte User bereits in entsprechenden Gruppen mitglied ist. * * @return Liste von projizierten Gruppen * @throws EventException Projektionsfehler */ public List getAllGroupWithVisibilityPublic(String userId) throws EventException { - List createEvents = eventService.translateEventDTOs(eventRepository.findAllEventsByType("CreateGroupEvent")); - createEvents.addAll(eventService.translateEventDTOs(eventRepository.findAllEventsByType("UpdateGroupDescriptionEvent"))); - createEvents.addAll(eventService.translateEventDTOs(eventRepository.findAllEventsByType("UpdateGroupTitleEvent"))); - createEvents.addAll(eventService.translateEventDTOs(eventRepository.findAllEventsByType("DeleteGroupEvent"))); - List visibleGroups = projectEventList(createEvents); + List groupEvents = eventService.translateEventDTOs(eventRepository.findAllEventsByType("CreateGroupEvent")); + groupEvents.addAll(eventService.translateEventDTOs(eventRepository.findAllEventsByType("UpdateGroupDescriptionEvent"))); + groupEvents.addAll(eventService.translateEventDTOs(eventRepository.findAllEventsByType("UpdateGroupTitleEvent"))); + groupEvents.addAll(eventService.translateEventDTOs(eventRepository.findAllEventsByType("DeleteGroupEvent"))); + groupEvents.addAll(eventService.translateEventDTOs(eventRepository.findAllEventsByType("UpdateUserMaxEvent"))); - List userGroupIds = eventService.findGroupIdsByUser(userId); + List visibleGroups = projectEventList(groupEvents); return visibleGroups.parallelStream() .filter(group -> group.getType() != null) - .filter(group -> !userGroupIds.contains(group.getId())) + .filter(group -> !eventService.userInGroup(group.getId(), userId)) .filter(group -> group.getVisibility() == Visibility.PUBLIC) .collect(Collectors.toList()); - } + /** + * Wird verwendet beim Gruppe erstellen bei der Parent-Auswahl: nur Titel benötigt. + * + * @return + * @throws EventException + */ public List getAllLecturesWithVisibilityPublic() throws EventException { List createEvents = eventService.translateEventDTOs(eventRepository.findAllEventsByType("CreateGroupEvent")); + createEvents.addAll(eventService.translateEventDTOs(eventRepository.findAllEventsByType("DeleteGroupEvent"))); createEvents.addAll(eventService.translateEventDTOs(eventRepository.findAllEventsByType("UpdateGroupTitleEvent"))); List visibleGroups = projectEventList(createEvents); @@ -115,6 +121,10 @@ 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 -> diff --git a/src/main/resources/templates/detailsNoMember.html b/src/main/resources/templates/detailsNoMember.html index 7895e4e..f57f300 100644 --- a/src/main/resources/templates/detailsNoMember.html +++ b/src/main/resources/templates/detailsNoMember.html @@ -12,7 +12,7 @@