From fa79b3f136d392a5e07bbb7a10a9a9338fc662ee Mon Sep 17 00:00:00 2001 From: tomvahl Date: Sat, 14 Mar 2020 09:17:32 +0100 Subject: [PATCH 1/3] change EventDTO, add AddUserEventController, add the search function in UI and backend --- .../controller/Gruppen2Controller.java | 13 +++++ .../java/mops/gruppen2/domain/EventDTO.java | 1 + .../mops/gruppen2/domain/event/Event.java | 1 + .../gruppen2/repository/EventRepository.java | 6 ++- .../gruppen2/service/ControllerService.java | 6 +++ .../mops/gruppen2/service/EventService.java | 23 ++++++-- .../mops/gruppen2/service/GroupService.java | 52 +++++++++++++++++-- .../service/SerializationService.java | 1 + src/main/resources/schema.sql | 3 +- src/main/resources/templates/search.html | 22 +++----- .../gruppen2/service/EventServiceTest.java | 21 +++++++- 11 files changed, 123 insertions(+), 26 deletions(-) diff --git a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java index 96ec538..0c0693e 100644 --- a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java +++ b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java @@ -2,6 +2,7 @@ package mops.gruppen2.controller; import mops.gruppen2.config.Gruppen2Config; import mops.gruppen2.domain.Exceptions.EventException; +import mops.gruppen2.domain.Group; import mops.gruppen2.domain.GroupType; import mops.gruppen2.domain.User; import mops.gruppen2.domain.Visibility; @@ -18,6 +19,8 @@ import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import javax.annotation.security.RolesAllowed; +import java.util.ArrayList; +import java.util.List; @Controller @RequestMapping("/gruppen2") @@ -31,6 +34,7 @@ public class Gruppen2Controller { private final GroupService groupService; private final UserService userService; private final ControllerService controllerService; + private List groups = new ArrayList<>(); public Gruppen2Controller(KeyCloakService keyCloakService, EventService eventService, GroupService groupService, UserService userService, ControllerService controllerService) { this.keyCloakService = keyCloakService; @@ -69,9 +73,18 @@ public class Gruppen2Controller { @GetMapping("/findGroup") public String findGroup(KeycloakAuthenticationToken token, Model model) { model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); + model.addAttribute("gruppen",groups); return "search"; } + @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) + @PostMapping("/findGroup") + public String searchGroup(KeycloakAuthenticationToken token, Model model, @RequestParam(value = "suchbegriff") String suchbegriff) throws EventException { + model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); + groups = groupService.findGroupWith(suchbegriff); + return "redirect:/gruppen2/findGroup"; + } + @PostMapping("/createGroup") public String pCreateGroup(KeycloakAuthenticationToken token, @RequestParam(value = "title") String title, diff --git a/src/main/java/mops/gruppen2/domain/EventDTO.java b/src/main/java/mops/gruppen2/domain/EventDTO.java index df78071..764a454 100644 --- a/src/main/java/mops/gruppen2/domain/EventDTO.java +++ b/src/main/java/mops/gruppen2/domain/EventDTO.java @@ -12,4 +12,5 @@ public class EventDTO { Long group_id; String user_id; String event_payload; + boolean visibility; } diff --git a/src/main/java/mops/gruppen2/domain/event/Event.java b/src/main/java/mops/gruppen2/domain/event/Event.java index 830f355..7db544a 100644 --- a/src/main/java/mops/gruppen2/domain/event/Event.java +++ b/src/main/java/mops/gruppen2/domain/event/Event.java @@ -28,6 +28,7 @@ public class Event { Long group_id; String user_id; + public Event(Long group_id,String user_id){ this.group_id = group_id; this.user_id = user_id; diff --git a/src/main/java/mops/gruppen2/repository/EventRepository.java b/src/main/java/mops/gruppen2/repository/EventRepository.java index 9811270..38bfda7 100644 --- a/src/main/java/mops/gruppen2/repository/EventRepository.java +++ b/src/main/java/mops/gruppen2/repository/EventRepository.java @@ -16,6 +16,10 @@ 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); + Iterable findNewEventSinceStatus(@Param("status") Long status); + + @Query("select * from event where visibility =:vis") + List findEventDTOByVisibility(@Param("vis") Boolean visibility); } diff --git a/src/main/java/mops/gruppen2/service/ControllerService.java b/src/main/java/mops/gruppen2/service/ControllerService.java index 75f0b78..9b49dc8 100644 --- a/src/main/java/mops/gruppen2/service/ControllerService.java +++ b/src/main/java/mops/gruppen2/service/ControllerService.java @@ -1,5 +1,6 @@ package mops.gruppen2.service; +import mops.gruppen2.domain.Group; import mops.gruppen2.domain.GroupType; import mops.gruppen2.domain.Visibility; import mops.gruppen2.domain.event.*; @@ -26,4 +27,9 @@ public class ControllerService { eventService.saveEvent(updateGroupTitleEvent); eventService.saveEvent(updateGroupDescriptionEvent); } + + public void addUser(Account account, Group group){ + AddUserEvent addUserEvent = new AddUserEvent(eventService.checkGroup(),group.getId(),account.getName(),account.getGivenname(),account.getFamilyname(),account.getEmail()); + eventService.saveEvent(addUserEvent); + } } diff --git a/src/main/java/mops/gruppen2/service/EventService.java b/src/main/java/mops/gruppen2/service/EventService.java index cb4a0c9..ac9e3af 100644 --- a/src/main/java/mops/gruppen2/service/EventService.java +++ b/src/main/java/mops/gruppen2/service/EventService.java @@ -2,9 +2,12 @@ package mops.gruppen2.service; import com.fasterxml.jackson.core.JsonProcessingException; import mops.gruppen2.domain.EventDTO; +import mops.gruppen2.domain.Exceptions.EventException; +import mops.gruppen2.domain.Group; +import mops.gruppen2.domain.Visibility; +import mops.gruppen2.domain.event.CreateGroupEvent; import mops.gruppen2.domain.event.Event; import mops.gruppen2.repository.EventRepository; -import org.bouncycastle.jcajce.provider.asymmetric.ec.KeyFactorySpi; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -29,15 +32,25 @@ public class EventService { eventStore.save(eventDTO); } - /** Erzeugt aus einem Event Objekt ein EventDTO Objekt + /** Erzeugt aus einem Event Objekt ein EventDTO Objekt. + * Ist die Gruppe öffentlich, dann wird die visibility auf true gesetzt. * * @param event * @return EventDTO */ - public EventDTO getDTO(Event event){ + public EventDTO getDTO(Event event) { EventDTO eventDTO = new EventDTO(); eventDTO.setGroup_id(event.getGroup_id()); eventDTO.setUser_id(event.getUser_id()); + if(event instanceof CreateGroupEvent) { + if(((CreateGroupEvent) event).getGroupVisibility() == Visibility.PRIVATE) { + eventDTO.setVisibility(false); + }else { + eventDTO.setVisibility(true); + } + } + + try { eventDTO.setEvent_payload(serializationService.serializeEvent(event)); } catch (JsonProcessingException e) { @@ -75,7 +88,7 @@ public class EventService { return translateEventDTOs(eventDTOS); } - /** Erzeugt aus der Datenbank eine Liste von Events + /** Erzeugt aus einer Liste von eventDTOs eine Liste von Events * * @param eventDTOS * @return Liste von Events @@ -86,7 +99,6 @@ public class EventService { for (EventDTO eventDTO : eventDTOS) { try { events.add(serializationService.deserializeEvent(eventDTO.getEvent_payload())); - }catch (JsonProcessingException e) { e.printStackTrace(); } @@ -94,4 +106,5 @@ public class EventService { return events; } + } diff --git a/src/main/java/mops/gruppen2/service/GroupService.java b/src/main/java/mops/gruppen2/service/GroupService.java index f6b7fac..a1a669c 100644 --- a/src/main/java/mops/gruppen2/service/GroupService.java +++ b/src/main/java/mops/gruppen2/service/GroupService.java @@ -23,6 +23,12 @@ public class GroupService { this.eventRepository = eventRepository; } + /** Sucht in der DB alle Zeilen raus welche eine der Gruppen_ids hat. + * Wandelt die Zeilen in Events um und gibt davon eine Liste zurück. + * + * @param group_ids + * @return + */ public List getGroupEvents(List group_ids) { List eventDTOS = new ArrayList<>(); List events = new ArrayList<>(); @@ -32,8 +38,13 @@ public class GroupService { return events = eventService.translateEventDTOs(eventDTOS); } - - + /** Erzeugt eine neue Map wo Gruppen aus den Events erzeugt und den Gruppen_ids zugeordnet werden. + * Die Gruppen werden als Liste zurückgegeben + * + * @param events + * @return + * @throws EventException + */ public List projectEventList(List events) throws EventException { Map groupMap = new HashMap<>(); @@ -44,7 +55,13 @@ public class GroupService { return new ArrayList<>(groupMap.values()); } - // + /** guckt in der Map anhand der Id nach ob die Gruppe schon in der Map vorhanden ist, wenn nicht wird eine neue + * Gruppe erzeugt + * + * @param groups + * @param group_id + * @return + */ private Group getOrCreateGroup(Map groups, long group_id) { if (!groups.containsKey(group_id)) { groups.put(group_id, new Group()); @@ -52,4 +69,33 @@ public class GroupService { return groups.get(group_id); } + + /** + * sucht alle Zeilen in der DB wo die Visibility gleich true ist und wandelt diese in + * eine Liste von Gruppen + * @return + * @throws EventException + */ + public List getAllGroupWithVisibilityPublic() throws EventException { + return projectEventList(eventService.translateEventDTOs(eventRepository.findEventDTOByVisibility(Boolean.FALSE))); + } + + + /** + * Filtert alle öffentliche Gruppen nach dem suchbegriff und gibt diese als Liste von Gruppen zurück. + * Groß und kleinschreibung wird beachtet. + * @param search + * @return + * @throws EventException + */ + public List findGroupWith(String search) throws EventException { + List groups = new ArrayList<>(); + for (Group group: getAllGroupWithVisibilityPublic()) { + if (group.getTitle().contains(search)){ + groups.add(group); + } + } + return groups; + } + } diff --git a/src/main/java/mops/gruppen2/service/SerializationService.java b/src/main/java/mops/gruppen2/service/SerializationService.java index 1737ccc..f9ede29 100644 --- a/src/main/java/mops/gruppen2/service/SerializationService.java +++ b/src/main/java/mops/gruppen2/service/SerializationService.java @@ -22,6 +22,7 @@ public class SerializationService { this.eventStore = eventStore; } + public String serializeEvent(Event event) throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); return mapper.writeValueAsString(event); diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql index 51b59eb..9a3fe1f 100644 --- a/src/main/resources/schema.sql +++ b/src/main/resources/schema.sql @@ -7,5 +7,6 @@ CREATE TABLE event event_id INT PRIMARY KEY AUTO_INCREMENT, group_id INT NOT NULL, user_id VARCHAR(50), - event_payload VARCHAR(255) + event_payload VARCHAR(255), + visibility BOOLEAN ); diff --git a/src/main/resources/templates/search.html b/src/main/resources/templates/search.html index 6efe4e7..c1d0d75 100644 --- a/src/main/resources/templates/search.html +++ b/src/main/resources/templates/search.html @@ -29,13 +29,13 @@

Gruppensuche

-
+
- +
- +

@@ -49,18 +49,12 @@ Mitgliederanzahl - + - LA1 Kursgruppe - Gruppe für den Kurs LA1 - Öffentlich - 318 - - - Lerngruppe LA1 - Lerngruppe zur Bearbeitung von Übungszetteln - Privat - 6 + Gruppenname + Beschreibung + Öffentlich + Mitgliederanzahl diff --git a/src/test/java/mops/gruppen2/service/EventServiceTest.java b/src/test/java/mops/gruppen2/service/EventServiceTest.java index a89540e..b6274ba 100644 --- a/src/test/java/mops/gruppen2/service/EventServiceTest.java +++ b/src/test/java/mops/gruppen2/service/EventServiceTest.java @@ -1,9 +1,11 @@ package mops.gruppen2.service; import mops.gruppen2.domain.EventDTO; -import mops.gruppen2.domain.event.Event; +import mops.gruppen2.domain.GroupType; +import mops.gruppen2.domain.Visibility; +import mops.gruppen2.domain.event.AddUserEvent; +import mops.gruppen2.domain.event.CreateGroupEvent; import mops.gruppen2.repository.EventRepository; -import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -37,4 +39,19 @@ class EventServiceTest { when(eventRepositoryMock.findAll()).thenReturn(eventDTOS); assertEquals(eventDTO1.getGroup_id()+1, eventService.checkGroup()); } + + @Test + void getDTOOffentlichTest(){ + CreateGroupEvent createGroupEvent = new CreateGroupEvent(eventService.checkGroup(), "test", null , GroupType.LECTURE, Visibility.PUBLIC); + EventDTO eventDTO = eventService.getDTO(createGroupEvent); + assertEquals(eventDTO.isVisibility(), true); + } + + @Test + void getDTOPrivatTest(){ + AddUserEvent addUserEvent = new AddUserEvent(eventService.checkGroup(), "test","franz","mueller","a@a"); + EventDTO eventDTO = eventService.getDTO(addUserEvent); + assertEquals(eventDTO.isVisibility(), false); + } + } \ No newline at end of file From 403b32ed76a3a2cb7a972d42f655e54eb60887a9 Mon Sep 17 00:00:00 2001 From: Talha Caliskan <49568605+killerber4t@users.noreply.github.com> Date: Sat, 14 Mar 2020 09:30:49 +0100 Subject: [PATCH 2/3] Update EventRepository.java --- src/main/java/mops/gruppen2/repository/EventRepository.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/mops/gruppen2/repository/EventRepository.java b/src/main/java/mops/gruppen2/repository/EventRepository.java index 788cead..363ad70 100644 --- a/src/main/java/mops/gruppen2/repository/EventRepository.java +++ b/src/main/java/mops/gruppen2/repository/EventRepository.java @@ -29,4 +29,5 @@ public interface EventRepository extends CrudRepository { public List findAllEventsOfGroups(@Param("groupIds") List groupIds); @Query("SELECT MAX(event_id) FROM event") + public Long getHighesEvent_ID(); } From d939631eacd463ce14850c22d8a8e78318137916 Mon Sep 17 00:00:00 2001 From: Talha Caliskan <49568605+killerber4t@users.noreply.github.com> Date: Sat, 14 Mar 2020 09:31:48 +0100 Subject: [PATCH 3/3] Update EventRepository.java --- src/main/java/mops/gruppen2/repository/EventRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/mops/gruppen2/repository/EventRepository.java b/src/main/java/mops/gruppen2/repository/EventRepository.java index 363ad70..4bbd2d7 100644 --- a/src/main/java/mops/gruppen2/repository/EventRepository.java +++ b/src/main/java/mops/gruppen2/repository/EventRepository.java @@ -29,5 +29,5 @@ public interface EventRepository extends CrudRepository { public List findAllEventsOfGroups(@Param("groupIds") List groupIds); @Query("SELECT MAX(event_id) FROM event") - public Long getHighesEvent_ID(); + public Long getHighesEvent_ID(); }