From 3aefe2f2b30fc093c120f6cd0d1ee1f0a01037f9 Mon Sep 17 00:00:00 2001 From: Christoph Date: Thu, 16 Apr 2020 02:09:15 +0200 Subject: [PATCH] test --- .../domain/service/EventStoreService.java | 81 +------------------ .../gruppen2/infrastructure/GroupCache.java | 3 +- .../controller/APIController.java | 12 +-- .../gruppen2/persistance/EventRepository.java | 34 +------- 4 files changed, 5 insertions(+), 125 deletions(-) diff --git a/src/main/java/mops/gruppen2/domain/service/EventStoreService.java b/src/main/java/mops/gruppen2/domain/service/EventStoreService.java index 8acb61d..e9ebe7d 100644 --- a/src/main/java/mops/gruppen2/domain/service/EventStoreService.java +++ b/src/main/java/mops/gruppen2/domain/service/EventStoreService.java @@ -3,23 +3,16 @@ package mops.gruppen2.domain.service; import com.fasterxml.jackson.core.JsonProcessingException; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; -import mops.gruppen2.domain.event.AddMemberEvent; import mops.gruppen2.domain.event.Event; -import mops.gruppen2.domain.event.EventType; import mops.gruppen2.domain.exception.BadPayloadException; import mops.gruppen2.domain.service.helper.JsonHelper; import mops.gruppen2.persistance.EventRepository; import mops.gruppen2.persistance.dto.EventDTO; import org.springframework.stereotype.Service; -import java.util.Arrays; import java.util.List; -import java.util.UUID; import java.util.stream.Collectors; -import static mops.gruppen2.domain.event.EventType.DESTROYGROUP; -import static mops.gruppen2.domain.service.helper.CommonHelper.eventTypesToString; - @Log4j2 @RequiredArgsConstructor @Service @@ -110,82 +103,10 @@ public class EventStoreService { } - // ######################################## QUERIES ########################################## - - - /** - * Liefert Gruppen-Ids von existierenden (ungelöschten) Gruppen, in welchen der User teilnimmt. - * - *

- * Vorgang: - * Finde für jede Gruppe das letzte Add- oder Kick-Event, welches den User betrifft - * Finde für jede Gruppe das letzte Destroy-Event - * Entferne alle alle Events von Gruppen, welche ein Destroy-Event haben - * Gebe die Gruppen zurück, auf welche sich die Add-Events beziehen - * - * @return GruppenIds (UUID) als Liste - */ - public List findExistingUserGroups(String userid) { - List userEvents = findLatestEventsFromGroupsByUser(userid); - List deletedIds = findLatestEventsFromGroupsByType(DESTROYGROUP) - .stream() - .map(Event::getGroupid) - .collect(Collectors.toList()); - - userEvents.removeIf(event -> deletedIds.contains(event.getGroupid())); - - return userEvents.stream() - .filter(event -> event instanceof AddMemberEvent) - .map(Event::getGroupid) - .collect(Collectors.toList()); - } - - // #################################### SIMPLE QUERIES ####################################### - - /** - * Ermittelt die Id zuletzt gespeicherten Events. - * - * @return Letzte EventId - */ - public long findMaxEventId() { - try { - return eventStore.findMaxEventId(); - } catch (NullPointerException e) { - log.debug("Keine Events vorhanden!"); - return 0; - } - } - - /** - * Sucht zu jeder Gruppe das letzte Add- oder DeleteUserEvent heraus, welches den übergebenen User betrifft. - * - * @param userid User, zu welchem die Events gesucht werden - * - * @return Eine Liste von einem Add- oder DeleteUserEvent pro Gruppe - */ - private List findLatestEventsFromGroupsByUser(String userid) { - return getEventsFromDTOs(eventStore.findLatestEventDTOsPartitionedByGroupTarget(userid)); - } - - - /** - * Sucht zu jeder Gruppe das letzte Event des/der übergebenen Typen heraus. - * - * @param types Eventtyp, nach welchem gesucht wird - * - * @return Eine Liste von einem Event pro Gruppe - */ - private List findLatestEventsFromGroupsByType(EventType... types) { - return getEventsFromDTOs(eventStore.findLatestEventDTOsPartitionedByGroupByType(Arrays.asList(eventTypesToString(types)))); - } - + public List findAllEvents() { return getEventsFromDTOs(eventStore.findAllEvents()); } - - public List findNewEvents(long version, long maxid) { - return getEventsFromDTOs(eventStore.findNewEvents(version, maxid)); - } } diff --git a/src/main/java/mops/gruppen2/infrastructure/GroupCache.java b/src/main/java/mops/gruppen2/infrastructure/GroupCache.java index 16044be..baef40f 100644 --- a/src/main/java/mops/gruppen2/infrastructure/GroupCache.java +++ b/src/main/java/mops/gruppen2/infrastructure/GroupCache.java @@ -24,8 +24,7 @@ public class GroupCache { private final Map groups = new HashMap<>(); public void init() { - long maxid = eventStoreService.findMaxEventId(); - ProjectionHelper.project(groups, eventStoreService.findNewEvents(0, maxid), this); + ProjectionHelper.project(groups, eventStoreService.findAllEvents(), this); } public void put(Group group) { diff --git a/src/main/java/mops/gruppen2/infrastructure/controller/APIController.java b/src/main/java/mops/gruppen2/infrastructure/controller/APIController.java index 662bf99..ac02052 100644 --- a/src/main/java/mops/gruppen2/infrastructure/controller/APIController.java +++ b/src/main/java/mops/gruppen2/infrastructure/controller/APIController.java @@ -1,21 +1,13 @@ package mops.gruppen2.infrastructure.controller; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import mops.gruppen2.aspect.annotation.TraceMethodCalls; import mops.gruppen2.domain.service.EventStoreService; -import mops.gruppen2.domain.service.helper.CommonHelper; -import org.springframework.security.access.annotation.Secured; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.List; - /** * Api zum Datenabgleich. */ @@ -49,14 +41,14 @@ public class APIController { /** * Gibt die Gruppen-IDs von Gruppen, in welchen der übergebene Nutzer teilnimmt, zurück. */ - @GetMapping("/usergroups/{id}") + /*@GetMapping("/usergroups/{id}") @Secured("ROLE_api_user") @ApiOperation("Gibt Gruppen zurück, in welchen ein Nutzer teilnimmt") public List getApiUserGroups(@ApiParam("Nutzer-Id") @PathVariable("id") String userId) { return CommonHelper.uuidsToString(eventStoreService.findExistingUserGroups(userId)); - } + }*/ /** * Konstruiert eine einzelne, vollständige Gruppe. diff --git a/src/main/java/mops/gruppen2/persistance/EventRepository.java b/src/main/java/mops/gruppen2/persistance/EventRepository.java index 0b187d7..26f5ac4 100644 --- a/src/main/java/mops/gruppen2/persistance/EventRepository.java +++ b/src/main/java/mops/gruppen2/persistance/EventRepository.java @@ -3,7 +3,6 @@ package mops.gruppen2.persistance; import mops.gruppen2.persistance.dto.EventDTO; import org.springframework.data.jdbc.repository.query.Query; import org.springframework.data.repository.CrudRepository; -import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import java.util.List; @@ -15,37 +14,6 @@ public interface EventRepository extends CrudRepository { // ####################################### EVENT DTOs ######################################## - @Query("SELECT * FROM event WHERE event_id > :version AND event_id <= :max") - List findNewEvents(@Param("version") long version, - @Param("max") long maxid); - - @Query("SELECT * FROM event") + @Query("SELECT * FROM heroku_f6ff902475fc2fa") List findAllEvents(); - - - // ################################ LATEST EVENT DTOs ######################################## - - - @Query("WITH ranked_events AS (" - + "SELECT *, ROW_NUMBER() OVER (PARTITION BY group_id ORDER BY event_id DESC) AS rn" - + " FROM event" - + " WHERE target_id = :userId AND event_type IN ('ADDMEMBER', 'KICKMEMBER')" - + ")" - + "SELECT * FROM ranked_events WHERE rn = 1;") - List findLatestEventDTOsPartitionedByGroupTarget(@Param("userId") String target); - - @Query("WITH ranked_events AS (" - + "SELECT *, ROW_NUMBER() OVER (PARTITION BY group_id ORDER BY event_id DESC) AS rn" - + " FROM event" - + " WHERE event_type IN (:types)" - + ")" - + "SELECT * FROM ranked_events WHERE rn = 1;") - List findLatestEventDTOsPartitionedByGroupByType(@Param("types") List types); - - - // ######################################### COUNT ########################################### - - - @Query("SELECT MAX(event_id) FROM event") - Long findMaxEventId(); }