1

change schema.sql and adapt services + optimized search

This commit is contained in:
Christoph
2020-03-23 14:10:24 +01:00
parent 25df317be4
commit ec88a6bcad
5 changed files with 43 additions and 61 deletions

View File

@ -14,6 +14,6 @@ public class EventDTO {
Long event_id; Long event_id;
Long group_id; Long group_id;
String user_id; String user_id;
String event_type;
String event_payload; String event_payload;
boolean visibility;
} }

View File

@ -20,9 +20,6 @@ public interface EventRepository extends CrudRepository<EventDTO, Long> {
//@Query("SELECT * FROM event WHERE event_id > ?#{[0]}") //@Query("SELECT * FROM event WHERE event_id > ?#{[0]}")
//Iterable<EventDTO> findNewEventSinceStatus(@Param("status") Long status); //Iterable<EventDTO> findNewEventSinceStatus(@Param("status") Long status);
@Query("select distinct group_id from event where visibility =:vis")
List<Long> findGroup_idsWhereVisibility(@Param("vis") Boolean visibility);
@Query("SELECT DISTINCT group_id FROM event WHERE event_id > :status") @Query("SELECT DISTINCT group_id FROM event WHERE event_id > :status")
List<Long> findNewEventSinceStatus(@Param("status") Long status); List<Long> findNewEventSinceStatus(@Param("status") Long status);
@ -34,4 +31,7 @@ public interface EventRepository extends CrudRepository<EventDTO, Long> {
@Query("SELECT MAX(group_id) FROM event") @Query("SELECT MAX(group_id) FROM event")
Long getMaxGroupID(); Long getMaxGroupID();
@Query("SELECT * FROM event WHERE event_type = :type")
List<EventDTO> findAllEventsByType(@Param("type") String type);
} }

View File

@ -1,9 +1,7 @@
package mops.gruppen2.service; package mops.gruppen2.service;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import mops.gruppen2.domain.Visibility;
import mops.gruppen2.domain.dto.EventDTO; import mops.gruppen2.domain.dto.EventDTO;
import mops.gruppen2.domain.event.CreateGroupEvent;
import mops.gruppen2.domain.event.Event; import mops.gruppen2.domain.event.Event;
import mops.gruppen2.repository.EventRepository; import mops.gruppen2.repository.EventRepository;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -40,11 +38,6 @@ public class EventService {
* @return EventDTO Neues DTO * @return EventDTO Neues DTO
*/ */
public EventDTO getDTO(Event event) { public EventDTO getDTO(Event event) {
boolean visibility = false;
if (event instanceof CreateGroupEvent) {
visibility = ((CreateGroupEvent) event).getGroupVisibility() == Visibility.PUBLIC;
}
String payload = ""; String payload = "";
try { try {
payload = jsonService.serializeEvent(event); payload = jsonService.serializeEvent(event);
@ -52,7 +45,13 @@ public class EventService {
e.printStackTrace(); 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);
} }
/** /**

View File

@ -1,8 +1,6 @@
package mops.gruppen2.service; package mops.gruppen2.service;
import mops.gruppen2.domain.Group; 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.dto.EventDTO;
import mops.gruppen2.domain.event.Event; import mops.gruppen2.domain.event.Event;
import mops.gruppen2.domain.exception.EventException; import mops.gruppen2.domain.exception.EventException;
@ -14,6 +12,7 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
@Service @Service
public class GroupService { public class GroupService {
@ -52,10 +51,8 @@ public class GroupService {
public List<Group> projectEventList(List<Event> events) throws EventException { public List<Group> projectEventList(List<Event> events) throws EventException {
Map<Long, Group> groupMap = new HashMap<>(); Map<Long, Group> groupMap = new HashMap<>();
for (Event event : events) { events.parallelStream()
Group group = getOrCreateGroup(groupMap, event.getGroupId()); .forEachOrdered(event -> event.apply(getOrCreateGroup(groupMap, event.getGroupId())));
event.apply(group);
}
return new ArrayList<>(groupMap.values()); return new ArrayList<>(groupMap.values());
} }
@ -68,13 +65,6 @@ public class GroupService {
return groups.get(groupId); return groups.get(groupId);
} }
private List<Group> removeUserGroups(List<Group> visibleGroups, List<Group> userGroups) {
for (Group group : userGroups) {
visibleGroups.remove(group);
}
return visibleGroups;
}
/** /**
* Sucht alle Zeilen in der DB mit visibility=true. * Sucht alle Zeilen in der DB mit visibility=true.
* Erstellt eine Liste aus öffentlichen Gruppen (ohen bereits beigetretenen Gruppen). * Erstellt eine Liste aus öffentlichen Gruppen (ohen bereits beigetretenen Gruppen).
@ -83,33 +73,30 @@ public class GroupService {
* @throws EventException Projektionsfehler * @throws EventException Projektionsfehler
*/ */
public List<Group> getAllGroupWithVisibilityPublic(String userId) throws EventException { public List<Group> getAllGroupWithVisibilityPublic(String userId) throws EventException {
User user = new User(userId,null, null, null); List<Event> createEvents = eventService.translateEventDTOs(eventRepository.findAllEventsByType("CreateGroupEvent"));
List<Event> eventsVisible = eventService.translateEventDTOs(eventRepository.findAllEventsOfGroups(eventRepository.findGroup_idsWhereVisibility(Boolean.TRUE))); createEvents.addAll(eventService.translateEventDTOs(eventRepository.findAllEventsByType("UpdateGroupDescriptionEvent")));
List<Group> visibleGroups = projectEventList(eventsVisible); createEvents.addAll(eventService.translateEventDTOs(eventRepository.findAllEventsByType("UpdateGroupTitleEvent")));
List<Event> eventsUser = getGroupEvents(eventRepository.findGroup_idsWhereUser_id(userId)); createEvents.addAll(eventService.translateEventDTOs(eventRepository.findAllEventsByType("DeleteGroupEvent")));
List<Group> groups = projectEventList(eventsUser); List<Group> visibleGroups = projectEventList(createEvents);
List<Group> newGroups = new ArrayList<>();
for (Group group : visibleGroups) { List<Long> userGroupIds = eventRepository.findGroup_idsWhereUser_id(userId);
if (group.getMembers().contains(user)) {
newGroups.add(group); return visibleGroups.parallelStream()
} .filter(group -> group.getType() != null)
} .filter(group -> !userGroupIds.contains(group.getId()))
return removeUserGroups(visibleGroups, newGroups); .collect(Collectors.toList());
} }
public List<Group> getAllLecturesWithVisibilityPublic() throws EventException { public List<Group> getAllLecturesWithVisibilityPublic() throws EventException {
List<Event> eventsVisible = eventService.translateEventDTOs(eventRepository.findAllEventsOfGroups(eventRepository.findGroup_idsWhereVisibility(Boolean.TRUE))); List<Event> createEvents = eventService.translateEventDTOs(eventRepository.findAllEventsByType("CreateGroupEvent"));
List<Group> visibleGroups = projectEventList(eventsVisible); createEvents.addAll(eventService.translateEventDTOs(eventRepository.findAllEventsByType("UpdateGroupTitleEvent")));
List<Group> visibleLectures = new ArrayList<>();
for (Group group : visibleGroups) { List<Group> visibleGroups = projectEventList(createEvents);
if(group.getType() == null){
continue; return visibleGroups.parallelStream()
} .filter(group -> group.getType() != null)
if (group.getType().equals(GroupType.LECTURE)) { .collect(Collectors.toList());
visibleLectures.add(group);
}
}
return visibleLectures;
} }
@ -122,16 +109,12 @@ public class GroupService {
* @throws EventException Projektionsfehler * @throws EventException Projektionsfehler
*/ */
public List<Group> findGroupWith(String search, Account account) throws EventException { public List<Group> findGroupWith(String search, Account account) throws EventException {
List<Group> groups = new ArrayList<>(); return getAllGroupWithVisibilityPublic(account.getName())
for (Group group : getAllGroupWithVisibilityPublic(account.getName())) { .parallelStream()
if(group.getType() == null){ .filter(group ->
continue; group.getTitle().toLowerCase().contains(search.toLowerCase()) ||
} group.getDescription().toLowerCase().contains(search.toLowerCase()))
if (group.getTitle().toLowerCase().contains(search.toLowerCase()) || group.getDescription().toLowerCase().contains(search.toLowerCase())) { .collect(Collectors.toList());
groups.add(group);
}
}
return groups;
} }
} }

View File

@ -9,8 +9,8 @@ CREATE TABLE event
event_id INT PRIMARY KEY AUTO_INCREMENT, event_id INT PRIMARY KEY AUTO_INCREMENT,
group_id INT NOT NULL, group_id INT NOT NULL,
user_id VARCHAR(50), user_id VARCHAR(50),
event_payload VARCHAR(2500), event_type VARCHAR(50),
visibility BOOLEAN event_payload VARCHAR(2500)
); );
DROP TABLE IF EXISTS invite; DROP TABLE IF EXISTS invite;