diff --git a/src/main/java/mops/gruppen2/Gruppen2Application.java b/src/main/java/mops/gruppen2/Gruppen2Application.java index 8261158..8127e46 100644 --- a/src/main/java/mops/gruppen2/Gruppen2Application.java +++ b/src/main/java/mops/gruppen2/Gruppen2Application.java @@ -32,7 +32,7 @@ public class Gruppen2Application { public Docket productAPI() { return new Docket(DocumentationType.SWAGGER_2) .select() - .paths(PathSelectors.ant("/products/**")) + .paths(PathSelectors.ant("/gruppen2/**")) .apis(RequestHandlerSelectors.basePackage("mops.gruppen2")) .build() .apiInfo(apiMetadata()); diff --git a/src/main/java/mops/gruppen2/controller/APIController.java b/src/main/java/mops/gruppen2/controller/APIController.java index 832f6b3..93bcc90 100644 --- a/src/main/java/mops/gruppen2/controller/APIController.java +++ b/src/main/java/mops/gruppen2/controller/APIController.java @@ -1,19 +1,18 @@ package mops.gruppen2.controller; -import com.github.javafaker.Faker; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import mops.gruppen2.domain.Exceptions.EventException; import mops.gruppen2.domain.Group; -import mops.gruppen2.domain.ProductSwaggerExample; +import mops.gruppen2.domain.apiWrapper.UpdatedGroupRequestMapper; import mops.gruppen2.domain.event.Event; +import mops.gruppen2.service.APIFormatterService; import mops.gruppen2.service.EventService; import mops.gruppen2.service.GroupService; import mops.gruppen2.service.SerializationService; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; import java.util.List; /** @@ -33,12 +32,27 @@ public class APIController { this.groupService = groupService; } - @GetMapping("/updatedGroups/{status}") + @GetMapping("/updateGroups/{status}") @ApiOperation(value = "Gibt alle Gruppen zurück in denen sich etwas geändert hat") - public List updateGroup(@ApiParam("Status des Anfragestellers") @PathVariable Long status) throws EventException { + public UpdatedGroupRequestMapper updateGroup(@ApiParam("Status des Anfragestellers") @PathVariable Long status) throws EventException { List events = eventService.getNewEvents(status); - return groupService.projectEventList(events); + UpdatedGroupRequestMapper updatedGroupRequestMapper = APIFormatterService.wrapp(eventService.getMaxEvent_id(), groupService.projectEventList(events)); + + return updatedGroupRequestMapper; } + @GetMapping("/getGroupIdsOfUser/{teilnehmer}") + @ApiOperation(value = "Gibt alle Gruppen zurück in denen sich ein Teilnehmer befindet") + public List getGroupsOfUser(@ApiParam("Der Teilnehmer") @PathVariable String teilnehmer) throws EventException { + return eventService.getGroupsOfUser(teilnehmer); + } + @GetMapping("/getGroup/{groupId}") + @ApiOperation(value = "Gibt alle die Gruppe mit der als Parameter mitgegebenden groupId zurück") + public Group getGroupFromId(@ApiParam("Die GruppenId der gefordeten Gruppe") @PathVariable Long groupId) throws EventException{ + List eventList = eventService.getEventsOfGroup(groupId); + + List groups = groupService.projectEventList(eventList); + return groups.get(0); + } } diff --git a/src/main/java/mops/gruppen2/domain/apiWrapper/UpdatedGroupRequestMapper.java b/src/main/java/mops/gruppen2/domain/apiWrapper/UpdatedGroupRequestMapper.java new file mode 100644 index 0000000..ae9c4f3 --- /dev/null +++ b/src/main/java/mops/gruppen2/domain/apiWrapper/UpdatedGroupRequestMapper.java @@ -0,0 +1,16 @@ +package mops.gruppen2.domain.apiWrapper; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import mops.gruppen2.domain.Group; + +import java.util.List; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class UpdatedGroupRequestMapper { + private Long status; + private List groupList; +} diff --git a/src/main/java/mops/gruppen2/repository/EventRepository.java b/src/main/java/mops/gruppen2/repository/EventRepository.java index 9811270..6629440 100644 --- a/src/main/java/mops/gruppen2/repository/EventRepository.java +++ b/src/main/java/mops/gruppen2/repository/EventRepository.java @@ -1,7 +1,6 @@ package mops.gruppen2.repository; import mops.gruppen2.domain.EventDTO; -import mops.gruppen2.domain.event.Event; import org.springframework.data.jdbc.repository.query.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; @@ -16,6 +15,13 @@ public interface EventRepository extends CrudRepository { @Query("select * from event where group_id =:id") List findEventDTOByGroup_id(@Param("id") Long group_id); - @Query("SELECT * FROM event WHERE event_id > ?#{[0]}") - public Iterable findNewEventSinceStatus(@Param("status") Long status); + + @Query("SELECT DISTINCT group_id FROM event WHERE event_id > :status") + public List findNewEventSinceStatus(@Param("status") Long status); + + @Query("SELECT * FROM event WHERE group_id IN (:groupIds) ") + public List findAllEventsOfGroups(@Param("groupIds") List groupIds); + + @Query("SELECT MAX(event_id) FROM event") + public Long getHighesEvent_ID(); } diff --git a/src/main/java/mops/gruppen2/service/APIFormatterService.java b/src/main/java/mops/gruppen2/service/APIFormatterService.java new file mode 100644 index 0000000..5665bdf --- /dev/null +++ b/src/main/java/mops/gruppen2/service/APIFormatterService.java @@ -0,0 +1,14 @@ +package mops.gruppen2.service; + +import mops.gruppen2.domain.Group; +import mops.gruppen2.domain.apiWrapper.UpdatedGroupRequestMapper; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class APIFormatterService { + static public UpdatedGroupRequestMapper wrapp(Long status, List groupList){ + return new UpdatedGroupRequestMapper(status, groupList); + } +} diff --git a/src/main/java/mops/gruppen2/service/EventService.java b/src/main/java/mops/gruppen2/service/EventService.java index 6007bc5..f0327db 100644 --- a/src/main/java/mops/gruppen2/service/EventService.java +++ b/src/main/java/mops/gruppen2/service/EventService.java @@ -70,9 +70,10 @@ public class EventService { * @return Liste von Events */ public List getNewEvents(Long status){ - Iterable eventDTOS = eventStore.findNewEventSinceStatus(status); + List groupIdsThatChanged = eventStore.findNewEventSinceStatus(status); - return translateEventDTOs(eventDTOS); + List groupEventDTOS = eventStore.findAllEventsOfGroups(groupIdsThatChanged); + return translateEventDTOs(groupEventDTOS); } /** Erzeugt aus der Datenbank eine Liste von Events @@ -105,4 +106,17 @@ public class EventService { } } + public Long getMaxEvent_id(){ + return eventStore.getHighesEvent_ID(); + } + + public List getGroupsOfUser(String userID) { + return eventStore.findGroup_idsWhereUser_id(userID); + } + + public List getEventsOfGroup(Long groupId) { + List eventDTOList = eventStore.findEventDTOByGroup_id(groupId); + return translateEventDTOs(eventDTOList); + } + } diff --git a/src/test/java/mops/gruppen2/service/EventServiceTest.java b/src/test/java/mops/gruppen2/service/EventServiceTest.java index a89540e..77a2b7b 100644 --- a/src/test/java/mops/gruppen2/service/EventServiceTest.java +++ b/src/test/java/mops/gruppen2/service/EventServiceTest.java @@ -10,6 +10,7 @@ import org.junit.jupiter.api.Test; import java.util.ArrayList; import java.util.List; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when;