From a30d45821909d601cc48e360c85e336a09c5f665 Mon Sep 17 00:00:00 2001 From: LukasEttel Date: Thu, 12 Mar 2020 14:40:07 +0100 Subject: [PATCH 1/4] Created first Api implementation --- .../gruppen2/repository/EventRepository.java | 8 +++++-- .../mops/gruppen2/service/EventService.java | 17 ++++++++++++-- .../gruppen2/service/EventServiceTest.java | 23 +++++++++++++++++++ 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/src/main/java/mops/gruppen2/repository/EventRepository.java b/src/main/java/mops/gruppen2/repository/EventRepository.java index 57b39b5..d518286 100644 --- a/src/main/java/mops/gruppen2/repository/EventRepository.java +++ b/src/main/java/mops/gruppen2/repository/EventRepository.java @@ -1,14 +1,18 @@ 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; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public interface EventRepository extends CrudRepository { - @Query("SELECT * FROM event WHERE event_id > ?#{[0]}") + @Query("SELECT * FROM event WHERE event_id > @status") public Iterable findNewEventSinceStatus(@Param("status") Long status); + + @Query("SELECT * FROM event WHERE group_id IN @groupIds ") + public Iterable findAllEventsOfGroups(@Param("groupIds") List groupIds); } diff --git a/src/main/java/mops/gruppen2/service/EventService.java b/src/main/java/mops/gruppen2/service/EventService.java index aba10cc..4da92dd 100644 --- a/src/main/java/mops/gruppen2/service/EventService.java +++ b/src/main/java/mops/gruppen2/service/EventService.java @@ -55,9 +55,11 @@ public class EventService { public List getNewEvents(Long status){ - Iterable eventDTOS = eventStore.findNewEventSinceStatus(status); + Iterable newEventDTOS = eventStore.findNewEventSinceStatus(status); + List groupIdsThatChanged = this.getAllGroupIds(newEventDTOS); - return translateEventDTOs(eventDTOS); + Iterable groupEventDTOS = eventStore.findAllEventsOfGroups(groupIdsThatChanged); + return translateEventDTOs(groupEventDTOS); } private List translateEventDTOs(Iterable eventDTOS){ @@ -74,4 +76,15 @@ public class EventService { return events; } + private List getAllGroupIds(Iterable eventDTOS){ + List idsOfChangedGroups = new ArrayList<>(); + for (EventDTO eventDTO : eventDTOS){ + if (!idsOfChangedGroups.contains(eventDTO.getGroup_id())) { + idsOfChangedGroups.add(eventDTO.getGroup_id()); + + } + } + return idsOfChangedGroups; + } + } diff --git a/src/test/java/mops/gruppen2/service/EventServiceTest.java b/src/test/java/mops/gruppen2/service/EventServiceTest.java index a89540e..159bcf1 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; @@ -37,4 +38,26 @@ class EventServiceTest { when(eventRepositoryMock.findAll()).thenReturn(eventDTOS); assertEquals(eventDTO1.getGroup_id()+1, eventService.checkGroup()); } + + @Test + void checkGetAllGroupIdsWithRepeadedId(){ + ArrayList eventDTOS = new ArrayList<>(); + + EventDTO eventDTO1 = new EventDTO(); + eventDTO1.setGroup_id(1L); + eventDTOS.add(eventDTO1); + + EventDTO eventDTO2 = new EventDTO(); + eventDTO2.setGroup_id(2L); + eventDTOS.add(eventDTO2); + + EventDTO eventDTO3 = new EventDTO(); + eventDTO3.setGroup_id(1L); + eventDTOS.add(eventDTO3); + + List groupIds = eventService.getAllGroupIds(eventDTOS); + + assertThat(groupIds.size()).isEqualTo(2); + + } } \ No newline at end of file From 9795c10c148dd0813e72ff29dd6868dc498a4856 Mon Sep 17 00:00:00 2001 From: LukasEttel Date: Thu, 12 Mar 2020 16:11:32 +0100 Subject: [PATCH 2/4] Impletended the updategroup(status) method in the API --- .../mops/gruppen2/Gruppen2Application.java | 2 +- .../gruppen2/controller/APIController.java | 10 +++++++-- .../apiWrapper/UpdatedGroupRequestMapper.java | 16 ++++++++++++++ .../gruppen2/repository/EventRepository.java | 7 ++++-- .../mops/gruppen2/service/APIFormatter.java | 12 ++++++++++ .../mops/gruppen2/service/EventService.java | 4 ++++ .../gruppen2/service/EventServiceTest.java | 22 ------------------- 7 files changed, 46 insertions(+), 27 deletions(-) create mode 100644 src/main/java/mops/gruppen2/domain/apiWrapper/UpdatedGroupRequestMapper.java create mode 100644 src/main/java/mops/gruppen2/service/APIFormatter.java 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..940d7f1 100644 --- a/src/main/java/mops/gruppen2/controller/APIController.java +++ b/src/main/java/mops/gruppen2/controller/APIController.java @@ -1,13 +1,17 @@ package mops.gruppen2.controller; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; 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.APIFormatter; import mops.gruppen2.service.EventService; import mops.gruppen2.service.GroupService; import mops.gruppen2.service.SerializationService; @@ -35,9 +39,11 @@ public class APIController { @GetMapping("/updatedGroups/{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, JsonProcessingException { List events = eventService.getNewEvents(status); - return groupService.projectEventList(events); + UpdatedGroupRequestMapper updatedGroupRequestMapper = APIFormatter.wrapp(eventService.getMaxEvent_id(), groupService.projectEventList(events)); + + return updatedGroupRequestMapper; } 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 d518286..04112ae 100644 --- a/src/main/java/mops/gruppen2/repository/EventRepository.java +++ b/src/main/java/mops/gruppen2/repository/EventRepository.java @@ -10,9 +10,12 @@ import java.util.List; @Repository public interface EventRepository extends CrudRepository { - @Query("SELECT * FROM event WHERE event_id > @status") + @Query("SELECT * FROM event WHERE event_id > :status") public Iterable findNewEventSinceStatus(@Param("status") Long status); - @Query("SELECT * FROM event WHERE group_id IN @groupIds ") + @Query("SELECT * FROM event WHERE group_id IN (:groupIds) ") public Iterable 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/APIFormatter.java b/src/main/java/mops/gruppen2/service/APIFormatter.java new file mode 100644 index 0000000..c18c6e9 --- /dev/null +++ b/src/main/java/mops/gruppen2/service/APIFormatter.java @@ -0,0 +1,12 @@ +package mops.gruppen2.service; + +import mops.gruppen2.domain.Group; +import mops.gruppen2.domain.apiWrapper.UpdatedGroupRequestMapper; + +import java.util.List; + +public class APIFormatter { + 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 4da92dd..1552a5b 100644 --- a/src/main/java/mops/gruppen2/service/EventService.java +++ b/src/main/java/mops/gruppen2/service/EventService.java @@ -87,4 +87,8 @@ public class EventService { return idsOfChangedGroups; } + public Long getMaxEvent_id(){ + return eventStore.getHighesEvent_ID(); + } + } diff --git a/src/test/java/mops/gruppen2/service/EventServiceTest.java b/src/test/java/mops/gruppen2/service/EventServiceTest.java index 159bcf1..77a2b7b 100644 --- a/src/test/java/mops/gruppen2/service/EventServiceTest.java +++ b/src/test/java/mops/gruppen2/service/EventServiceTest.java @@ -38,26 +38,4 @@ class EventServiceTest { when(eventRepositoryMock.findAll()).thenReturn(eventDTOS); assertEquals(eventDTO1.getGroup_id()+1, eventService.checkGroup()); } - - @Test - void checkGetAllGroupIdsWithRepeadedId(){ - ArrayList eventDTOS = new ArrayList<>(); - - EventDTO eventDTO1 = new EventDTO(); - eventDTO1.setGroup_id(1L); - eventDTOS.add(eventDTO1); - - EventDTO eventDTO2 = new EventDTO(); - eventDTO2.setGroup_id(2L); - eventDTOS.add(eventDTO2); - - EventDTO eventDTO3 = new EventDTO(); - eventDTO3.setGroup_id(1L); - eventDTOS.add(eventDTO3); - - List groupIds = eventService.getAllGroupIds(eventDTOS); - - assertThat(groupIds.size()).isEqualTo(2); - - } } \ No newline at end of file From 4e874bf6e21cac532f54087185bfe528a95ebd3f Mon Sep 17 00:00:00 2001 From: LukasEttel Date: Thu, 12 Mar 2020 16:27:52 +0100 Subject: [PATCH 3/4] Impletended the updategroup(status) method in the API --- .../java/mops/gruppen2/controller/APIController.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/mops/gruppen2/controller/APIController.java b/src/main/java/mops/gruppen2/controller/APIController.java index 940d7f1..92d4de2 100644 --- a/src/main/java/mops/gruppen2/controller/APIController.java +++ b/src/main/java/mops/gruppen2/controller/APIController.java @@ -39,12 +39,20 @@ public class APIController { @GetMapping("/updatedGroups/{status}") @ApiOperation(value = "Gibt alle Gruppen zurück in denen sich etwas geändert hat") - public UpdatedGroupRequestMapper updateGroup(@ApiParam("Status des Anfragestellers") @PathVariable Long status) throws EventException, JsonProcessingException { + public UpdatedGroupRequestMapper updateGroup(@ApiParam("Status des Anfragestellers") @PathVariable Long status) throws EventException { List events = eventService.getNewEvents(status); UpdatedGroupRequestMapper updatedGroupRequestMapper = APIFormatter.wrapp(eventService.getMaxEvent_id(), groupService.projectEventList(events)); return updatedGroupRequestMapper; } + @GetMapping("/getGroups/{teilnehme}") + @ApiOperation(value = "Gibt alle Gruppen zurück in denen sich ein Teilnehmer befindet") + public List getGroupsOfUser(@ApiParam("Der Teilnehmer") @PathVariable String userId) throws EventException { + List asd = new ArrayList<>(); + + return asd; + } + } From d1f296129d7368c0ef306d0054b3242bff3c7346 Mon Sep 17 00:00:00 2001 From: LukasEttel Date: Fri, 13 Mar 2020 13:50:49 +0100 Subject: [PATCH 4/4] Impletended SwaggerApi with all provisionally funktiontionallitys --- .../gruppen2/controller/APIController.java | 26 +++++++++---------- .../gruppen2/repository/EventRepository.java | 6 ++--- ...ormatter.java => APIFormatterService.java} | 4 ++- .../mops/gruppen2/service/EventService.java | 25 ++++++++---------- 4 files changed, 30 insertions(+), 31 deletions(-) rename src/main/java/mops/gruppen2/service/{APIFormatter.java => APIFormatterService.java} (77%) diff --git a/src/main/java/mops/gruppen2/controller/APIController.java b/src/main/java/mops/gruppen2/controller/APIController.java index 92d4de2..93bcc90 100644 --- a/src/main/java/mops/gruppen2/controller/APIController.java +++ b/src/main/java/mops/gruppen2/controller/APIController.java @@ -1,23 +1,18 @@ package mops.gruppen2.controller; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -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.APIFormatter; +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; /** @@ -37,22 +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 UpdatedGroupRequestMapper updateGroup(@ApiParam("Status des Anfragestellers") @PathVariable Long status) throws EventException { List events = eventService.getNewEvents(status); - UpdatedGroupRequestMapper updatedGroupRequestMapper = APIFormatter.wrapp(eventService.getMaxEvent_id(), groupService.projectEventList(events)); + UpdatedGroupRequestMapper updatedGroupRequestMapper = APIFormatterService.wrapp(eventService.getMaxEvent_id(), groupService.projectEventList(events)); return updatedGroupRequestMapper; } - @GetMapping("/getGroups/{teilnehme}") + @GetMapping("/getGroupIdsOfUser/{teilnehmer}") @ApiOperation(value = "Gibt alle Gruppen zurück in denen sich ein Teilnehmer befindet") - public List getGroupsOfUser(@ApiParam("Der Teilnehmer") @PathVariable String userId) throws EventException { - List asd = new ArrayList<>(); - - return asd; + 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/repository/EventRepository.java b/src/main/java/mops/gruppen2/repository/EventRepository.java index 609b417..6629440 100644 --- a/src/main/java/mops/gruppen2/repository/EventRepository.java +++ b/src/main/java/mops/gruppen2/repository/EventRepository.java @@ -16,11 +16,11 @@ 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 > :status") - 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 Iterable findAllEventsOfGroups(@Param("groupIds") List 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/APIFormatter.java b/src/main/java/mops/gruppen2/service/APIFormatterService.java similarity index 77% rename from src/main/java/mops/gruppen2/service/APIFormatter.java rename to src/main/java/mops/gruppen2/service/APIFormatterService.java index c18c6e9..5665bdf 100644 --- a/src/main/java/mops/gruppen2/service/APIFormatter.java +++ b/src/main/java/mops/gruppen2/service/APIFormatterService.java @@ -2,10 +2,12 @@ package mops.gruppen2.service; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.apiWrapper.UpdatedGroupRequestMapper; +import org.springframework.stereotype.Service; import java.util.List; -public class APIFormatter { +@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 c958493..e45644d 100644 --- a/src/main/java/mops/gruppen2/service/EventService.java +++ b/src/main/java/mops/gruppen2/service/EventService.java @@ -70,10 +70,9 @@ public class EventService { * @return Liste von Events */ public List getNewEvents(Long status){ - Iterable newEventDTOS = eventStore.findNewEventSinceStatus(status); - List groupIdsThatChanged = this.getAllGroupIds(newEventDTOS); + List groupIdsThatChanged = eventStore.findNewEventSinceStatus(status); - Iterable groupEventDTOS = eventStore.findAllEventsOfGroups(groupIdsThatChanged); + List groupEventDTOS = eventStore.findAllEventsOfGroups(groupIdsThatChanged); return translateEventDTOs(groupEventDTOS); } @@ -96,19 +95,17 @@ public class EventService { return events; } - private List getAllGroupIds(Iterable eventDTOS){ - List idsOfChangedGroups = new ArrayList<>(); - for (EventDTO eventDTO : eventDTOS){ - if (!idsOfChangedGroups.contains(eventDTO.getGroup_id())) { - idsOfChangedGroups.add(eventDTO.getGroup_id()); - - } - } - return idsOfChangedGroups; - } - 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); + } + }