diff --git a/src/main/java/mops/gruppen2/domain/dto/EventDTO.java b/src/main/java/mops/gruppen2/domain/dto/EventDTO.java index 61945ec..43d1973 100644 --- a/src/main/java/mops/gruppen2/domain/dto/EventDTO.java +++ b/src/main/java/mops/gruppen2/domain/dto/EventDTO.java @@ -14,6 +14,6 @@ public class EventDTO { Long event_id; Long group_id; String user_id; + String event_type; String event_payload; - boolean visibility; } diff --git a/src/main/java/mops/gruppen2/repository/EventRepository.java b/src/main/java/mops/gruppen2/repository/EventRepository.java index 3cd122b..a5a12fa 100644 --- a/src/main/java/mops/gruppen2/repository/EventRepository.java +++ b/src/main/java/mops/gruppen2/repository/EventRepository.java @@ -20,9 +20,6 @@ public interface EventRepository extends CrudRepository { //@Query("SELECT * FROM event WHERE event_id > ?#{[0]}") //Iterable findNewEventSinceStatus(@Param("status") Long status); - @Query("select distinct group_id from event where visibility =:vis") - List findGroup_idsWhereVisibility(@Param("vis") Boolean visibility); - @Query("SELECT DISTINCT group_id FROM event WHERE event_id > :status") List findNewEventSinceStatus(@Param("status") Long status); @@ -34,4 +31,7 @@ public interface EventRepository extends CrudRepository { @Query("SELECT MAX(group_id) FROM event") Long getMaxGroupID(); + + @Query("SELECT * FROM event WHERE event_type = :type") + List findAllEventsByType(@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 6e315d7..8a5f72b 100644 --- a/src/main/java/mops/gruppen2/service/EventService.java +++ b/src/main/java/mops/gruppen2/service/EventService.java @@ -1,9 +1,7 @@ package mops.gruppen2.service; import com.fasterxml.jackson.core.JsonProcessingException; -import mops.gruppen2.domain.Visibility; import mops.gruppen2.domain.dto.EventDTO; -import mops.gruppen2.domain.event.CreateGroupEvent; import mops.gruppen2.domain.event.Event; import mops.gruppen2.repository.EventRepository; import org.springframework.stereotype.Service; @@ -40,11 +38,6 @@ public class EventService { * @return EventDTO Neues DTO */ public EventDTO getDTO(Event event) { - boolean visibility = false; - if (event instanceof CreateGroupEvent) { - visibility = ((CreateGroupEvent) event).getGroupVisibility() == Visibility.PUBLIC; - } - String payload = ""; try { payload = jsonService.serializeEvent(event); @@ -52,7 +45,13 @@ public class EventService { e.printStackTrace(); } - return new EventDTO(null, event.getGroupId(), event.getUserId(), payload, visibility); + return new EventDTO(null, event.getGroupId(), event.getUserId(), getEventType(event), payload); + } + + private String getEventType(Event event) { + int lastDot = event.getClass().getName().lastIndexOf('.'); + + return event.getClass().getName().substring(lastDot + 1); } /** diff --git a/src/main/java/mops/gruppen2/service/GroupService.java b/src/main/java/mops/gruppen2/service/GroupService.java index 2dfb79b..b121c0d 100644 --- a/src/main/java/mops/gruppen2/service/GroupService.java +++ b/src/main/java/mops/gruppen2/service/GroupService.java @@ -1,8 +1,6 @@ package mops.gruppen2.service; import mops.gruppen2.domain.Group; -import mops.gruppen2.domain.GroupType; -import mops.gruppen2.domain.User; import mops.gruppen2.domain.dto.EventDTO; import mops.gruppen2.domain.event.Event; import mops.gruppen2.domain.exception.EventException; @@ -14,6 +12,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @Service public class GroupService { @@ -52,10 +51,8 @@ public class GroupService { public List projectEventList(List events) throws EventException { Map groupMap = new HashMap<>(); - for (Event event : events) { - Group group = getOrCreateGroup(groupMap, event.getGroupId()); - event.apply(group); - } + events.parallelStream() + .forEachOrdered(event -> event.apply(getOrCreateGroup(groupMap, event.getGroupId()))); return new ArrayList<>(groupMap.values()); } @@ -68,13 +65,6 @@ public class GroupService { return groups.get(groupId); } - private List removeUserGroups(List visibleGroups, List userGroups) { - for (Group group : userGroups) { - visibleGroups.remove(group); - } - return visibleGroups; - } - /** * Sucht alle Zeilen in der DB mit visibility=true. * Erstellt eine Liste aus öffentlichen Gruppen (ohen bereits beigetretenen Gruppen). @@ -83,33 +73,30 @@ public class GroupService { * @throws EventException Projektionsfehler */ public List getAllGroupWithVisibilityPublic(String userId) throws EventException { - User user = new User(userId,null, null, null); - List eventsVisible = eventService.translateEventDTOs(eventRepository.findAllEventsOfGroups(eventRepository.findGroup_idsWhereVisibility(Boolean.TRUE))); - List visibleGroups = projectEventList(eventsVisible); - List eventsUser = getGroupEvents(eventRepository.findGroup_idsWhereUser_id(userId)); - List groups = projectEventList(eventsUser); - List newGroups = new ArrayList<>(); - for (Group group : visibleGroups) { - if (group.getMembers().contains(user)) { - newGroups.add(group); - } - } - return removeUserGroups(visibleGroups, newGroups); + 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 userGroupIds = eventRepository.findGroup_idsWhereUser_id(userId); + + return visibleGroups.parallelStream() + .filter(group -> group.getType() != null) + .filter(group -> !userGroupIds.contains(group.getId())) + .collect(Collectors.toList()); + } public List getAllLecturesWithVisibilityPublic() throws EventException { - List eventsVisible = eventService.translateEventDTOs(eventRepository.findAllEventsOfGroups(eventRepository.findGroup_idsWhereVisibility(Boolean.TRUE))); - List visibleGroups = projectEventList(eventsVisible); - List visibleLectures = new ArrayList<>(); - for (Group group : visibleGroups) { - if(group.getType() == null){ - continue; - } - if (group.getType().equals(GroupType.LECTURE)) { - visibleLectures.add(group); - } - } - return visibleLectures; + List createEvents = eventService.translateEventDTOs(eventRepository.findAllEventsByType("CreateGroupEvent")); + createEvents.addAll(eventService.translateEventDTOs(eventRepository.findAllEventsByType("UpdateGroupTitleEvent"))); + + List visibleGroups = projectEventList(createEvents); + + return visibleGroups.parallelStream() + .filter(group -> group.getType() != null) + .collect(Collectors.toList()); } @@ -122,16 +109,12 @@ public class GroupService { * @throws EventException Projektionsfehler */ public List findGroupWith(String search, Account account) throws EventException { - List groups = new ArrayList<>(); - for (Group group : getAllGroupWithVisibilityPublic(account.getName())) { - if(group.getType() == null){ - continue; - } - if (group.getTitle().toLowerCase().contains(search.toLowerCase()) || group.getDescription().toLowerCase().contains(search.toLowerCase())) { - groups.add(group); - } - } - return groups; + return getAllGroupWithVisibilityPublic(account.getName()) + .parallelStream() + .filter(group -> + group.getTitle().toLowerCase().contains(search.toLowerCase()) || + group.getDescription().toLowerCase().contains(search.toLowerCase())) + .collect(Collectors.toList()); } } diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql index d72a7a8..006875d 100644 --- a/src/main/resources/schema.sql +++ b/src/main/resources/schema.sql @@ -9,8 +9,8 @@ CREATE TABLE event event_id INT PRIMARY KEY AUTO_INCREMENT, group_id INT NOT NULL, user_id VARCHAR(50), - event_payload VARCHAR(2500), - visibility BOOLEAN + event_type VARCHAR(50), + event_payload VARCHAR(2500) ); DROP TABLE IF EXISTS invite;