From 7e52935b777f9fec88ebb26bb555826d16b59318 Mon Sep 17 00:00:00 2001 From: XXNitram Date: Wed, 18 Mar 2020 15:05:09 +0100 Subject: [PATCH 01/14] Add check for empty csv file and set required parameter to false Co-Authored-By: Lukas Ettel --- .../java/mops/gruppen2/controller/Gruppen2Controller.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java index a6bdcca..9ae3d51 100644 --- a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java +++ b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java @@ -79,10 +79,13 @@ public class Gruppen2Controller { @RequestParam(value = "title") String title, @RequestParam(value = "beschreibung") String beschreibung, @RequestParam(value = "visibility", required = false) Boolean visibility, - @RequestParam("file") MultipartFile file) throws IOException { + @RequestParam(value = "file", required = false) MultipartFile file) throws IOException { Account account = keyCloakService.createAccountFromPrincipal(token); - List userList = CsvService.read(file.getInputStream()); + List userList = new ArrayList<>(); + if(!file.isEmpty()) { + userList = CsvService.read(file.getInputStream()); + } visibility = visibility == null; controllerService.createLecture(account, title, beschreibung, visibility, userList); From 90124a7c15247444d0a7b73ff934d4f87e0ae8f3 Mon Sep 17 00:00:00 2001 From: XXNitram Date: Wed, 18 Mar 2020 16:40:40 +0100 Subject: [PATCH 02/14] Fix file input alignment --- src/main/resources/templates/createLecture.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/templates/createLecture.html b/src/main/resources/templates/createLecture.html index e6fb1e5..73c3cc8 100644 --- a/src/main/resources/templates/createLecture.html +++ b/src/main/resources/templates/createLecture.html @@ -49,7 +49,7 @@
-
+
From 4450a091de049cc057cfe1f5eec47d09f11f9321 Mon Sep 17 00:00:00 2001 From: XXNitram Date: Wed, 18 Mar 2020 16:42:06 +0100 Subject: [PATCH 03/14] Add addUsersFromCsv in editMembers Overview Co-Authored-By: Lukas Ettel Co-Authored-By: tomvahl --- .../controller/Gruppen2Controller.java | 17 +++++++++++++++-- .../gruppen2/service/ControllerService.java | 8 +++++--- src/main/resources/templates/editMembers.html | 19 +++++++++++++++++++ 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java index d7ec39d..3623712 100644 --- a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java +++ b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java @@ -83,7 +83,7 @@ public class Gruppen2Controller { @RequestParam(value = "title") String title, @RequestParam(value = "beschreibung") String beschreibung, @RequestParam(value = "visibility", required = false) Boolean visibility, - @RequestParam(value = "file", required = false) MultipartFile file) throws IOException { + @RequestParam(value = "file", required = false) MultipartFile file) throws IOException, EventException { Account account = keyCloakService.createAccountFromPrincipal(token); List userList = new ArrayList<>(); @@ -96,6 +96,18 @@ public class Gruppen2Controller { return "redirect:/gruppen2/"; } + @RolesAllowed({"ROLE_orga", "ROLE_actuator)"}) + @PostMapping("/details/members/addUsersFromCsv") + public String addUsersFromCsv(@RequestParam (value = "group_id") Long id, + @RequestParam(value = "file", required = false) MultipartFile file) throws IOException { + List userList = new ArrayList<>(); + if(!file.isEmpty()) { + userList = CsvService.read(file.getInputStream()); + } + controllerService.addUserList(userList, id); + return "redirect:/gruppen2/"; + } + @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) @GetMapping("/createGroup") public String createGroup(KeycloakAuthenticationToken token, Model model) { @@ -193,10 +205,11 @@ public class Gruppen2Controller { @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) @GetMapping("/details/members") - public String editMembers(Model model, KeycloakAuthenticationToken token, @RequestParam (value="group_id") Long id) throws EventException { + public String editMembers(Model model, KeycloakAuthenticationToken token, @RequestParam (value = "group_id") Long id) throws EventException { Account account = keyCloakService.createAccountFromPrincipal(token); Group group = userService.getGroupById(id); if(group.getRoles().get(account.getName()) == Role.ADMIN) { + model.addAttribute("account", account); model.addAttribute("members", group.getMembers()); model.addAttribute("group", group); return "editMembers"; diff --git a/src/main/java/mops/gruppen2/service/ControllerService.java b/src/main/java/mops/gruppen2/service/ControllerService.java index f1fe45a..1152832 100644 --- a/src/main/java/mops/gruppen2/service/ControllerService.java +++ b/src/main/java/mops/gruppen2/service/ControllerService.java @@ -1,6 +1,7 @@ package mops.gruppen2.service; import mops.gruppen2.domain.*; +import mops.gruppen2.domain.Exceptions.EventException; import mops.gruppen2.domain.event.*; import mops.gruppen2.security.Account; import org.springframework.stereotype.Service; @@ -13,7 +14,7 @@ public class ControllerService { private final UserService userService; private final InviteLinkRepositoryService inviteLinkRepositoryService; - public ControllerService(EventService eventService, UserService userService) { + public ControllerService(EventService eventService, UserService userService, InviteLinkRepositoryService inviteLinkRepositoryService) { this.eventService = eventService; this.userService = userService; this.inviteLinkRepositoryService = inviteLinkRepositoryService; @@ -92,7 +93,7 @@ public class ControllerService { eventService.saveEvent(deleteUserEvent); } - public void createLecture(Account account, String title, String description, Boolean visibility, List users) { + public void createLecture(Account account, String title, String description, Boolean visibility, List users) throws EventException { Visibility visibility1; Long group_id = eventService.checkGroup(); @@ -104,11 +105,12 @@ public class ControllerService { CreateGroupEvent createGroupEvent = new CreateGroupEvent(group_id, account.getName(), null, GroupType.LECTURE, visibility1); eventService.saveEvent(createGroupEvent); + User user = new User(account.getName(), account.getGivenname(), account.getFamilyname(), account.getEmail()); addUser(account, group_id); updateTitle(account, group_id, title); updateDescription(account, group_id, description); - updateRole(account, group_id); + updateRole(user, group_id); addUserList(users, group_id); } diff --git a/src/main/resources/templates/editMembers.html b/src/main/resources/templates/editMembers.html index 9988370..f71895e 100644 --- a/src/main/resources/templates/editMembers.html +++ b/src/main/resources/templates/editMembers.html @@ -21,6 +21,9 @@
  • Suche
  • +
  • + Veranstaltung +
  • @@ -29,6 +32,22 @@
    + +
    +
    +
    +
    +
    + + +
    +
    +
    + +
    +
    +
    +
    From 1fbfd4978161a9d7bf9eed34f4e14c7aa6f9cb44 Mon Sep 17 00:00:00 2001 From: Lukas Ettel <34522828+LukasEttel@users.noreply.github.com> Date: Wed, 18 Mar 2020 16:55:07 +0100 Subject: [PATCH 04/14] show file thats choosen to load up Co-Authored-By: xxnitram Co-Authored-By: andibuls Co-Authored-By: tomvahl --- src/main/resources/templates/createLecture.html | 11 +++++++++++ src/main/resources/templates/editMembers.html | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/main/resources/templates/createLecture.html b/src/main/resources/templates/createLecture.html index 73c3cc8..4325d66 100644 --- a/src/main/resources/templates/createLecture.html +++ b/src/main/resources/templates/createLecture.html @@ -7,6 +7,10 @@ Gruppenerstellung + + + + @@ -65,6 +69,13 @@ + \ No newline at end of file diff --git a/src/main/resources/templates/editMembers.html b/src/main/resources/templates/editMembers.html index f71895e..0b07f9e 100644 --- a/src/main/resources/templates/editMembers.html +++ b/src/main/resources/templates/editMembers.html @@ -6,6 +6,10 @@ Gruppendetails + + + + @@ -74,4 +78,11 @@ + From c631f243a1305d5dc4cbc0012f58d595f88bb73e Mon Sep 17 00:00:00 2001 From: XXNitram Date: Wed, 18 Mar 2020 18:00:47 +0100 Subject: [PATCH 05/14] Refactor indentation in html files --- .../resources/templates/detailsMember.html | 45 +++++++++---------- .../resources/templates/detailsNoMember.html | 24 +++++----- src/main/resources/templates/editMembers.html | 2 +- src/main/resources/templates/index.html | 1 - 4 files changed, 35 insertions(+), 37 deletions(-) diff --git a/src/main/resources/templates/detailsMember.html b/src/main/resources/templates/detailsMember.html index a45d005..1298e46 100644 --- a/src/main/resources/templates/detailsMember.html +++ b/src/main/resources/templates/detailsMember.html @@ -30,36 +30,35 @@
    -
    -

    -

    - Private Gruppe - Öffentliche Gruppe - Veranstaltung -

    -
    -
    -

    -
    -
    - +

    +

    + Private Gruppe + Öffentliche Gruppe + Veranstaltung +

    +
    +
    +

    +
    +
    +

    Mitglieder

    - +

    diff --git a/src/main/resources/templates/detailsNoMember.html b/src/main/resources/templates/detailsNoMember.html index afd346c..0b3a032 100644 --- a/src/main/resources/templates/detailsNoMember.html +++ b/src/main/resources/templates/detailsNoMember.html @@ -32,22 +32,22 @@
    -

    -

    - Private Gruppe - Öffentliche Gruppe - Veranstaltung -

    +

    +

    + Private Gruppe + Öffentliche Gruppe + Veranstaltung +

    -
    -
    -
    - - -
    +
    +
    +
    + +
    +
    diff --git a/src/main/resources/templates/editMembers.html b/src/main/resources/templates/editMembers.html index 90511b3..5c67b93 100644 --- a/src/main/resources/templates/editMembers.html +++ b/src/main/resources/templates/editMembers.html @@ -35,7 +35,7 @@
    -
    +
    diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 5d51236..da57d1c 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -43,7 +43,6 @@
    -

    From 40d1c898e880f73baa0d87ecd9848ba2d0b7850a Mon Sep 17 00:00:00 2001 From: XXNitram Date: Wed, 18 Mar 2020 18:02:11 +0100 Subject: [PATCH 06/14] Refactor ControllerService --- .../mops/gruppen2/service/ControllerService.java | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/src/main/java/mops/gruppen2/service/ControllerService.java b/src/main/java/mops/gruppen2/service/ControllerService.java index 67ec2d1..b7f03f2 100644 --- a/src/main/java/mops/gruppen2/service/ControllerService.java +++ b/src/main/java/mops/gruppen2/service/ControllerService.java @@ -23,20 +23,11 @@ public class ControllerService { this.inviteLinkRepositoryService = inviteLinkRepositoryService; } - /** - * Erzeugt eine neue Gruppe, fügt den User, der die Gruppe erstellt hat, hinzu und setzt seine Rolle als Admin fest. - * Zudem wird der Gruppentitel und die Gruppenbeschreibung erzeugt, welche vorher der Methode übergeben wurden. - * Aus diesen Event Objekten wird eine Liste erzeugt, welche daraufhin mithilfe des EventServices gesichert wird. - * - * @param account Keycloak-Account - * @param title Gruppentitel - * @param description Gruppenbeschreibung - */ public void createGroup(Account account, String title, String description, Boolean visibility) throws EventException { Visibility visibility1; Long group_id = eventService.checkGroup(); - if(visibility) { + if (visibility) { visibility1 = Visibility.PUBLIC; } else { visibility1 = Visibility.PRIVATE; @@ -88,7 +79,7 @@ public class ControllerService { if(member.getUser_id().equals(user_id)) user = member; } assert user != null; - if(group.getRoles().get(user.getUser_id()) == Role.ADMIN) { + if (group.getRoles().get(user.getUser_id()) == Role.ADMIN) { updateRoleEvent = new UpdateRoleEvent(group_id, user.getUser_id(), Role.MEMBER); } else { updateRoleEvent = new UpdateRoleEvent(group_id, user.getUser_id(), Role.ADMIN); @@ -130,6 +121,5 @@ public class ControllerService { updateDescription(account, group_id, description); updateRole(account.getName(), group_id); addUserList(users, group_id); - } } From a1ee6a18cd6aa52f204e231dca321f19ec5fe2a1 Mon Sep 17 00:00:00 2001 From: XXNitram Date: Wed, 18 Mar 2020 18:03:02 +0100 Subject: [PATCH 07/14] Refactor Gruppen2Controller and change redirect in addUsersFromCsv method --- .../controller/Gruppen2Controller.java | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java index 5a56218..0b200d6 100644 --- a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java +++ b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java @@ -5,36 +5,27 @@ import mops.gruppen2.domain.Exceptions.EventException; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.Role; import mops.gruppen2.domain.User; -import mops.gruppen2.domain.Visibility; -import mops.gruppen2.domain.event.CreateGroupEvent; -import mops.gruppen2.domain.event.UpdateRoleEvent; import mops.gruppen2.security.Account; import mops.gruppen2.service.*; import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; -import org.springframework.web.client.RestTemplate; import org.springframework.web.context.annotation.SessionScope; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.server.ResponseStatusException; - import javax.annotation.security.RolesAllowed; import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Map; @Controller @SessionScope @RequestMapping("/gruppen2") public class Gruppen2Controller { - @Autowired Gruppen2Config gruppen2Config; - private final KeyCloakService keyCloakService; private final EventService eventService; private final GroupService groupService; @@ -86,7 +77,7 @@ public class Gruppen2Controller { Account account = keyCloakService.createAccountFromPrincipal(token); List userList = new ArrayList<>(); - if(!file.isEmpty()) { + if (!file.isEmpty()) { userList = CsvService.read(file.getInputStream()); } visibility = visibility == null; @@ -97,14 +88,14 @@ public class Gruppen2Controller { @RolesAllowed({"ROLE_orga", "ROLE_actuator)"}) @PostMapping("/details/members/addUsersFromCsv") - public String addUsersFromCsv(@RequestParam (value = "group_id") Long id, + public String addUsersFromCsv(@RequestParam (value = "group_id") Long group_id, @RequestParam(value = "file", required = false) MultipartFile file) throws IOException { List userList = new ArrayList<>(); - if(!file.isEmpty()) { + if (!file.isEmpty()) { userList = CsvService.read(file.getInputStream()); } - controllerService.addUserList(userList, id); - return "redirect:/gruppen2/"; + controllerService.addUserList(userList, group_id); + return "redirect:/gruppen2/details/members/" + group_id; } @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) From 2ba913f2c8e0698da0a246e4ba80787d7ce51bac Mon Sep 17 00:00:00 2001 From: Christoph Date: Wed, 18 Mar 2020 20:18:03 +0100 Subject: [PATCH 08/14] Formatting Co-authored-by: Christoph --- .../mops/gruppen2/Gruppen2Application.java | 7 -- .../mops/gruppen2/config/Gruppen2Config.java | 5 -- .../gruppen2/controller/APIController.java | 13 ++-- .../controller/Gruppen2Controller.java | 57 +++++++++------ .../domain/Exceptions/EventException.java | 1 + .../UserAlreadyExistsException.java | 5 +- .../Exceptions/UserNotFoundException.java | 5 +- src/main/java/mops/gruppen2/domain/Group.java | 14 ++-- src/main/java/mops/gruppen2/domain/User.java | 1 + .../apiWrapper/UpdatedGroupRequestMapper.java | 3 +- .../mops/gruppen2/domain/dto/EventDTO.java | 1 + .../gruppen2/domain/dto/InviteLinkDTO.java | 1 + .../gruppen2/domain/event/AddUserEvent.java | 5 +- .../domain/event/CreateGroupEvent.java | 3 +- .../domain/event/DeleteUserEvent.java | 5 +- .../mops/gruppen2/domain/event/Event.java | 15 ++-- .../event/UpdateGroupDescriptionEvent.java | 1 + .../domain/event/UpdateGroupTitleEvent.java | 1 + .../domain/event/UpdateRoleEvent.java | 14 ++-- .../gruppen2/repository/EventRepository.java | 7 +- .../java/mops/gruppen2/security/Account.java | 4 +- .../gruppen2/security/KeycloakConfig.java | 31 +++----- .../gruppen2/security/SecurityConfig.java | 19 ++--- .../gruppen2/service/APIFormatterService.java | 3 +- .../gruppen2/service/ControllerService.java | 36 +++++++--- .../mops/gruppen2/service/EventService.java | 1 + .../mops/gruppen2/service/GroupService.java | 26 ++++--- .../service/SerializationService.java | 2 +- .../mops/gruppen2/service/UserService.java | 7 +- src/main/resources/application-dev.properties | 2 - .../resources/application-docker.properties | 3 - src/main/resources/schema.sql | 2 + src/main/resources/templates/create.html | 25 ++++--- .../resources/templates/createLecture.html | 36 ++++++---- .../resources/templates/detailsMember.html | 36 ++++++---- .../resources/templates/detailsNoMember.html | 25 +++++-- src/main/resources/templates/editMembers.html | 70 ++++++++++++------- .../resources/templates/errorRenameLater.html | 18 +++-- src/main/resources/templates/index.html | 51 ++++++++------ src/main/resources/templates/search.html | 38 ++++++---- 40 files changed, 354 insertions(+), 245 deletions(-) diff --git a/src/main/java/mops/gruppen2/Gruppen2Application.java b/src/main/java/mops/gruppen2/Gruppen2Application.java index 1566a63..d4fd122 100644 --- a/src/main/java/mops/gruppen2/Gruppen2Application.java +++ b/src/main/java/mops/gruppen2/Gruppen2Application.java @@ -1,11 +1,5 @@ package mops.gruppen2; -import lombok.Setter; -import mops.gruppen2.domain.Exceptions.EventException; -import mops.gruppen2.domain.Group; -import mops.gruppen2.service.EventService; -import mops.gruppen2.service.GroupService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; @@ -18,7 +12,6 @@ import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; import java.util.Collections; -import java.util.List; @SpringBootApplication @EnableSwagger2 diff --git a/src/main/java/mops/gruppen2/config/Gruppen2Config.java b/src/main/java/mops/gruppen2/config/Gruppen2Config.java index 815ecc4..4b60fa5 100644 --- a/src/main/java/mops/gruppen2/config/Gruppen2Config.java +++ b/src/main/java/mops/gruppen2/config/Gruppen2Config.java @@ -1,15 +1,10 @@ package mops.gruppen2.config; -import mops.gruppen2.domain.Exceptions.EventException; -import mops.gruppen2.domain.Group; import mops.gruppen2.service.EventService; import mops.gruppen2.service.GroupService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import java.util.List; - @Configuration public class Gruppen2Config { diff --git a/src/main/java/mops/gruppen2/controller/APIController.java b/src/main/java/mops/gruppen2/controller/APIController.java index 28ce4f5..3cf64f3 100644 --- a/src/main/java/mops/gruppen2/controller/APIController.java +++ b/src/main/java/mops/gruppen2/controller/APIController.java @@ -7,13 +7,16 @@ import mops.gruppen2.domain.Exceptions.EventException; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.apiWrapper.UpdatedGroupRequestMapper; import mops.gruppen2.domain.event.Event; -import mops.gruppen2.service.*; +import mops.gruppen2.service.APIFormatterService; +import mops.gruppen2.service.EventService; +import mops.gruppen2.service.GroupService; +import mops.gruppen2.service.SerializationService; import org.springframework.security.access.annotation.Secured; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; +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.io.IOException; -import java.io.InputStream; import java.util.List; /** diff --git a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java index 0b200d6..c61456d 100644 --- a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java +++ b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java @@ -6,15 +6,27 @@ import mops.gruppen2.domain.Group; import mops.gruppen2.domain.Role; import mops.gruppen2.domain.User; import mops.gruppen2.security.Account; -import mops.gruppen2.service.*; +import mops.gruppen2.service.ControllerService; +import mops.gruppen2.service.CsvService; +import mops.gruppen2.service.EventService; +import mops.gruppen2.service.GroupService; +import mops.gruppen2.service.InviteLinkRepositoryService; +import mops.gruppen2.service.KeyCloakService; +import mops.gruppen2.service.UserService; import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.context.annotation.SessionScope; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.server.ResponseStatusException; + import javax.annotation.security.RolesAllowed; import java.io.IOException; import java.util.ArrayList; @@ -25,13 +37,14 @@ import java.util.List; @RequestMapping("/gruppen2") public class Gruppen2Controller { - Gruppen2Config gruppen2Config; private final KeyCloakService keyCloakService; private final EventService eventService; private final GroupService groupService; private final UserService userService; private final ControllerService controllerService; private final InviteLinkRepositoryService inviteLinkRepositoryService; + @Autowired + Gruppen2Config gruppen2Config; public Gruppen2Controller(KeyCloakService keyCloakService, EventService eventService, GroupService groupService, UserService userService, ControllerService controllerService, InviteLinkRepositoryService inviteLinkRepositoryService) { this.keyCloakService = keyCloakService; @@ -70,10 +83,10 @@ public class Gruppen2Controller { @RolesAllowed({"ROLE_orga", "ROLE_actuator)"}) @PostMapping("/createLecture") public String pCreateLecture(KeycloakAuthenticationToken token, - @RequestParam(value = "title") String title, - @RequestParam(value = "beschreibung") String beschreibung, - @RequestParam(value = "visibility", required = false) Boolean visibility, - @RequestParam(value = "file", required = false) MultipartFile file) throws IOException, EventException { + @RequestParam(value = "title") String title, + @RequestParam(value = "beschreibung") String beschreibung, + @RequestParam(value = "visibility", required = false) Boolean visibility, + @RequestParam(value = "file", required = false) MultipartFile file) throws IOException, EventException { Account account = keyCloakService.createAccountFromPrincipal(token); List userList = new ArrayList<>(); @@ -88,7 +101,7 @@ public class Gruppen2Controller { @RolesAllowed({"ROLE_orga", "ROLE_actuator)"}) @PostMapping("/details/members/addUsersFromCsv") - public String addUsersFromCsv(@RequestParam (value = "group_id") Long group_id, + public String addUsersFromCsv(@RequestParam(value = "group_id") Long group_id, @RequestParam(value = "file", required = false) MultipartFile file) throws IOException { List userList = new ArrayList<>(); if (!file.isEmpty()) { @@ -111,7 +124,7 @@ public class Gruppen2Controller { Account account = keyCloakService.createAccountFromPrincipal(token); List groupse = new ArrayList<>(); if (suchbegriff != null) { - groupse = groupService.findGroupWith(suchbegriff,account); + groupse = groupService.findGroupWith(suchbegriff, account); } model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); model.addAttribute("gruppen", groupse); @@ -134,7 +147,7 @@ public class Gruppen2Controller { @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) @GetMapping("/details/{id}") - public String showGroupDetails(KeycloakAuthenticationToken token, Model model, @PathVariable (value="id") Long id) throws EventException, ResponseStatusException { + public String showGroupDetails(KeycloakAuthenticationToken token, Model model, @PathVariable(value = "id") Long id) throws EventException, ResponseStatusException { model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); Group group = userService.getGroupById(id); @@ -154,11 +167,13 @@ public class Gruppen2Controller { @PostMapping("/detailsBeitreten") public String joinGroup(KeycloakAuthenticationToken token, Model model, @RequestParam(value = "id") Long id) throws EventException { model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); - Account account = keyCloakService.createAccountFromPrincipal (token); - User user = new User(account.getName(),account.getGivenname(),account.getFamilyname(),account.getEmail()); + Account account = keyCloakService.createAccountFromPrincipal(token); + User user = new User(account.getName(), account.getGivenname(), account.getFamilyname(), account.getEmail()); Group group = userService.getGroupById(id); - if(group.getMembers().contains(user)) return "errorRenameLater"; //hier soll eigentlich auf die bereits beigetretene Gruppe weitergeleitet werden - controllerService.addUser(account,id); + if (group.getMembers().contains(user)) { + return "errorRenameLater"; //hier soll eigentlich auf die bereits beigetretene Gruppe weitergeleitet werden + } + controllerService.addUser(account, id); return "redirect:/gruppen2/"; } @@ -188,7 +203,7 @@ public class Gruppen2Controller { @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) @PostMapping("/leaveGroup") - public String pLeaveGroup(KeycloakAuthenticationToken token, @RequestParam (value="group_id") Long id) throws EventException { + public String pLeaveGroup(KeycloakAuthenticationToken token, @RequestParam(value = "group_id") Long id) throws EventException { Account account = keyCloakService.createAccountFromPrincipal(token); User user = new User(account.getName(), account.getGivenname(), account.getFamilyname(), account.getEmail()); controllerService.deleteUser(user.getUser_id(), id); @@ -197,10 +212,10 @@ public class Gruppen2Controller { @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) @GetMapping("/details/members/{id}") - public String editMembers(Model model, KeycloakAuthenticationToken token, @PathVariable (value="id") Long id) throws EventException { + public String editMembers(Model model, KeycloakAuthenticationToken token, @PathVariable(value = "id") Long id) throws EventException { Account account = keyCloakService.createAccountFromPrincipal(token); Group group = userService.getGroupById(id); - if(group.getRoles().get(account.getName()) == Role.ADMIN) { + if (group.getRoles().get(account.getName()) == Role.ADMIN) { model.addAttribute("account", account); model.addAttribute("members", group.getMembers()); model.addAttribute("group", group); @@ -213,16 +228,16 @@ public class Gruppen2Controller { @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) @PostMapping("/details/members/changeRole") - public String changeRole(KeycloakAuthenticationToken token, @RequestParam (value = "group_id") Long group_id, - @RequestParam (value = "user_id") String user_id) throws EventException { + public String changeRole(KeycloakAuthenticationToken token, @RequestParam(value = "group_id") Long group_id, + @RequestParam(value = "user_id") String user_id) throws EventException { controllerService.updateRole(user_id, group_id); return "redirect:/gruppen2/details/members/" + group_id; } @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) @PostMapping("/details/members/deleteUser") - public String deleteUser(KeycloakAuthenticationToken token,@RequestParam (value = "group_id") Long group_id, - @RequestParam (value = "user_id") String user_id) throws EventException { + public String deleteUser(KeycloakAuthenticationToken token, @RequestParam(value = "group_id") Long group_id, + @RequestParam(value = "user_id") String user_id) throws EventException { controllerService.deleteUser(user_id, group_id); return "redirect:/gruppen2/details/members/" + group_id; } diff --git a/src/main/java/mops/gruppen2/domain/Exceptions/EventException.java b/src/main/java/mops/gruppen2/domain/Exceptions/EventException.java index 20bb176..893accc 100644 --- a/src/main/java/mops/gruppen2/domain/Exceptions/EventException.java +++ b/src/main/java/mops/gruppen2/domain/Exceptions/EventException.java @@ -1,6 +1,7 @@ package mops.gruppen2.domain.Exceptions; public class EventException extends Exception { + private String msg; public EventException(String msg) { diff --git a/src/main/java/mops/gruppen2/domain/Exceptions/UserAlreadyExistsException.java b/src/main/java/mops/gruppen2/domain/Exceptions/UserAlreadyExistsException.java index 8896356..6aae039 100644 --- a/src/main/java/mops/gruppen2/domain/Exceptions/UserAlreadyExistsException.java +++ b/src/main/java/mops/gruppen2/domain/Exceptions/UserAlreadyExistsException.java @@ -1,7 +1,8 @@ package mops.gruppen2.domain.Exceptions; public class UserAlreadyExistsException extends EventException { - public UserAlreadyExistsException(String msg){ - super(msg); + + public UserAlreadyExistsException(String msg) { + super(msg); } } diff --git a/src/main/java/mops/gruppen2/domain/Exceptions/UserNotFoundException.java b/src/main/java/mops/gruppen2/domain/Exceptions/UserNotFoundException.java index f7e0080..ac5fc2e 100644 --- a/src/main/java/mops/gruppen2/domain/Exceptions/UserNotFoundException.java +++ b/src/main/java/mops/gruppen2/domain/Exceptions/UserNotFoundException.java @@ -1,7 +1,8 @@ package mops.gruppen2.domain.Exceptions; -public class UserNotFoundException extends EventException{ - public UserNotFoundException(String msg){ +public class UserNotFoundException extends EventException { + + public UserNotFoundException(String msg) { super(msg); } } diff --git a/src/main/java/mops/gruppen2/domain/Group.java b/src/main/java/mops/gruppen2/domain/Group.java index 3a09149..3d2cd67 100644 --- a/src/main/java/mops/gruppen2/domain/Group.java +++ b/src/main/java/mops/gruppen2/domain/Group.java @@ -4,11 +4,11 @@ import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; -import mops.gruppen2.domain.Exceptions.UserAlreadyExistsException; -import mops.gruppen2.domain.Exceptions.UserNotFoundException; -import mops.gruppen2.domain.event.*; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * Repräsentiert den aggregierten Zustand einer Gruppe. @@ -18,12 +18,12 @@ import java.util.*; @Setter @AllArgsConstructor public class Group { + + private final List members; + private final Map roles; private long id; private String title; private String description; - private final List members; - private final Map roles; - private GroupType type; private Visibility visibility; private Long parent; diff --git a/src/main/java/mops/gruppen2/domain/User.java b/src/main/java/mops/gruppen2/domain/User.java index 5e103ae..45a0c89 100644 --- a/src/main/java/mops/gruppen2/domain/User.java +++ b/src/main/java/mops/gruppen2/domain/User.java @@ -10,6 +10,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor @EqualsAndHashCode(exclude = {"givenname", "familyname", "email"}) public class User { + String user_id; String givenname; String familyname; diff --git a/src/main/java/mops/gruppen2/domain/apiWrapper/UpdatedGroupRequestMapper.java b/src/main/java/mops/gruppen2/domain/apiWrapper/UpdatedGroupRequestMapper.java index ca35f5b..8fc2543 100644 --- a/src/main/java/mops/gruppen2/domain/apiWrapper/UpdatedGroupRequestMapper.java +++ b/src/main/java/mops/gruppen2/domain/apiWrapper/UpdatedGroupRequestMapper.java @@ -11,6 +11,7 @@ import java.util.List; @NoArgsConstructor @AllArgsConstructor public class UpdatedGroupRequestMapper { + private Long status; private List groupList; -} \ No newline at end of file +} diff --git a/src/main/java/mops/gruppen2/domain/dto/EventDTO.java b/src/main/java/mops/gruppen2/domain/dto/EventDTO.java index e3f5462..2c734d1 100644 --- a/src/main/java/mops/gruppen2/domain/dto/EventDTO.java +++ b/src/main/java/mops/gruppen2/domain/dto/EventDTO.java @@ -7,6 +7,7 @@ import org.springframework.data.relational.core.mapping.Table; @Table("event") @Data public class EventDTO { + @Id Long event_id; Long group_id; diff --git a/src/main/java/mops/gruppen2/domain/dto/InviteLinkDTO.java b/src/main/java/mops/gruppen2/domain/dto/InviteLinkDTO.java index cac347a..4c2dc04 100644 --- a/src/main/java/mops/gruppen2/domain/dto/InviteLinkDTO.java +++ b/src/main/java/mops/gruppen2/domain/dto/InviteLinkDTO.java @@ -9,6 +9,7 @@ import org.springframework.data.relational.core.mapping.Table; @Data @AllArgsConstructor public class InviteLinkDTO { + @Id Long link_id; Long group_id; diff --git a/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java b/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java index a97845c..b146d24 100644 --- a/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java @@ -16,6 +16,7 @@ import mops.gruppen2.domain.User; @AllArgsConstructor @NoArgsConstructor public class AddUserEvent extends Event { + String givenname; String familyname; String email; @@ -27,10 +28,10 @@ public class AddUserEvent extends Event { this.email = email; } - public void apply(Group group) throws EventException{ + public void apply(Group group) throws EventException { User user = new User(this.user_id, this.givenname, this.familyname, this.email); - if (group.getMembers().contains(user)){ + if (group.getMembers().contains(user)) { throw new UserAlreadyExistsException("Der User existiert bereits"); } diff --git a/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java b/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java index f5f49b1..c811402 100644 --- a/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java @@ -11,12 +11,11 @@ import mops.gruppen2.domain.Visibility; @AllArgsConstructor @NoArgsConstructor public class CreateGroupEvent extends Event { + private Visibility groupVisibility; private Long groupParent; private GroupType groupType; - - public CreateGroupEvent(Long group_id, String user_id, Long parent, GroupType type, Visibility visibility) { super(group_id, user_id); this.groupParent = parent; diff --git a/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java b/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java index 1afab84..e4fa0fe 100644 --- a/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java @@ -1,11 +1,11 @@ package mops.gruppen2.domain.event; -import lombok.*; +import lombok.Getter; +import lombok.NoArgsConstructor; import mops.gruppen2.domain.Exceptions.EventException; import mops.gruppen2.domain.Exceptions.UserNotFoundException; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.User; -import mops.gruppen2.domain.Group; /** * Entfernt ein einzelnes Mitglied einer Gruppe. @@ -13,6 +13,7 @@ import mops.gruppen2.domain.Group; @Getter @NoArgsConstructor public class DeleteUserEvent extends Event { + public DeleteUserEvent(Long group_id, String user_id) { super(group_id, user_id); } diff --git a/src/main/java/mops/gruppen2/domain/event/Event.java b/src/main/java/mops/gruppen2/domain/event/Event.java index 17a00f9..7eb5e9f 100644 --- a/src/main/java/mops/gruppen2/domain/event/Event.java +++ b/src/main/java/mops/gruppen2/domain/event/Event.java @@ -19,15 +19,16 @@ import mops.gruppen2.domain.Group; property = "type" ) @JsonSubTypes({ - @JsonSubTypes.Type(value = AddUserEvent.class, name = "AddUserEvent"), - @JsonSubTypes.Type(value = CreateGroupEvent.class, name = "CreateGroupEvent"), - @JsonSubTypes.Type(value = DeleteUserEvent.class, name = "DeleteUserEvent"), - @JsonSubTypes.Type(value = UpdateGroupDescriptionEvent.class, name = "UpdateGroupDescriptionEvent"), - @JsonSubTypes.Type(value = UpdateGroupTitleEvent.class, name = "UpdateGroupTitleEvent"), - @JsonSubTypes.Type(value = UpdateRoleEvent.class, name = "UpdateRoleEvent"), -}) + @JsonSubTypes.Type(value = AddUserEvent.class, name = "AddUserEvent"), + @JsonSubTypes.Type(value = CreateGroupEvent.class, name = "CreateGroupEvent"), + @JsonSubTypes.Type(value = DeleteUserEvent.class, name = "DeleteUserEvent"), + @JsonSubTypes.Type(value = UpdateGroupDescriptionEvent.class, name = "UpdateGroupDescriptionEvent"), + @JsonSubTypes.Type(value = UpdateGroupTitleEvent.class, name = "UpdateGroupTitleEvent"), + @JsonSubTypes.Type(value = UpdateRoleEvent.class, name = "UpdateRoleEvent"), + }) @Setter public class Event { + Long group_id; String user_id; diff --git a/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java b/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java index 83d4e88..7be94fa 100644 --- a/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java @@ -12,6 +12,7 @@ import mops.gruppen2.domain.Group; @AllArgsConstructor @NoArgsConstructor public class UpdateGroupDescriptionEvent extends Event { + String newGroupDescription; public UpdateGroupDescriptionEvent(Long group_id, String user_id, String newGroupDescription) { diff --git a/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java b/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java index dffb13d..2934a1e 100644 --- a/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java @@ -12,6 +12,7 @@ import mops.gruppen2.domain.Group; @AllArgsConstructor @NoArgsConstructor public class UpdateGroupTitleEvent extends Event { + String newGroupTitle; public UpdateGroupTitleEvent(Long group_id, String user_id, String newGroupTitle) { diff --git a/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java b/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java index eeea3d9..c8eca1b 100644 --- a/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java @@ -1,13 +1,11 @@ package mops.gruppen2.domain.event; -import lombok.*; -import mops.gruppen2.domain.Exceptions.EventException; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; import mops.gruppen2.domain.Exceptions.UserNotFoundException; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.Role; -import mops.gruppen2.domain.User; - -import java.util.Optional; /** * Aktualisiert die Gruppenrolle eines Teilnehmers. @@ -18,14 +16,14 @@ import java.util.Optional; public class UpdateRoleEvent extends Event { Role newRole; - + public UpdateRoleEvent(Long group_id, String user_id, Role newRole) { super(group_id, user_id); this.newRole = newRole; } - public void apply(Group group) throws UserNotFoundException{ - if (!group.getRoles().containsKey(user_id)){ + public void apply(Group group) throws UserNotFoundException { + if (!group.getRoles().containsKey(user_id)) { throw new UserNotFoundException("Der User wurde nicht gefunden"); } group.getRoles().put(this.user_id, this.newRole); diff --git a/src/main/java/mops/gruppen2/repository/EventRepository.java b/src/main/java/mops/gruppen2/repository/EventRepository.java index f328fdf..4c6c432 100644 --- a/src/main/java/mops/gruppen2/repository/EventRepository.java +++ b/src/main/java/mops/gruppen2/repository/EventRepository.java @@ -10,6 +10,7 @@ import java.util.List; @Repository public interface EventRepository extends CrudRepository { + @Query("select distinct group_id from event where user_id =:id") List findGroup_idsWhereUser_id(@Param("id") String user_id); @@ -19,9 +20,9 @@ public interface EventRepository extends CrudRepository { //@Query("SELECT * FROM event WHERE event_id > ?#{[0]}") //Iterable findNewEventSinceStatus(@Param("status") Long status); - @Query("select distinct group_id from event where visibility =:vis") - List findGroup_idsWhereVisibility(@Param("vis") Boolean visibility); - + @Query("select distinct group_id from event where visibility =:vis") + List findGroup_idsWhereVisibility(@Param("vis") Boolean visibility); + @Query("SELECT DISTINCT group_id FROM event WHERE event_id > :status") public List findNewEventSinceStatus(@Param("status") Long status); diff --git a/src/main/java/mops/gruppen2/security/Account.java b/src/main/java/mops/gruppen2/security/Account.java index bb97a8d..b25c33d 100644 --- a/src/main/java/mops/gruppen2/security/Account.java +++ b/src/main/java/mops/gruppen2/security/Account.java @@ -1,12 +1,14 @@ package mops.gruppen2.security; -import java.util.Set; import lombok.AllArgsConstructor; import lombok.Getter; +import java.util.Set; + @Getter @AllArgsConstructor public class Account { + private final String name; //user_id private final String email; private final String image; diff --git a/src/main/java/mops/gruppen2/security/KeycloakConfig.java b/src/main/java/mops/gruppen2/security/KeycloakConfig.java index d707be1..56e5c9a 100644 --- a/src/main/java/mops/gruppen2/security/KeycloakConfig.java +++ b/src/main/java/mops/gruppen2/security/KeycloakConfig.java @@ -16,39 +16,30 @@ import org.springframework.web.client.RestTemplate; @Configuration public class KeycloakConfig { + + @Value("${keycloak.resource}") + private String clientId; + + @Value("${keycloak.credentials.secret}") + private String clientSecret; + + @Value("${hhu_keycloak.token-uri}") + private String tokenUri; + @Bean public KeycloakSpringBootConfigResolver keycloakConfigResolver() { return new KeycloakSpringBootConfigResolver(); } - @Value("${keycloak.resource}") - - private String clientId; - - @Value("${keycloak.credentials.secret}") - - private String clientSecret; - - @Value("${hhu_keycloak.token-uri}") - - private String tokenUri; - - @Bean public RestTemplate serviceAccountRestTemplate() { - ClientCredentialsResourceDetails resourceDetails = new ClientCredentialsResourceDetails(); resourceDetails.setGrantType(OAuth2Constants.CLIENT_CREDENTIALS); - resourceDetails.setAccessTokenUri(tokenUri); - resourceDetails.setClientId(clientId); - resourceDetails.setClientSecret(clientSecret); - return new OAuth2RestTemplate(resourceDetails); - } -} \ No newline at end of file +} diff --git a/src/main/java/mops/gruppen2/security/SecurityConfig.java b/src/main/java/mops/gruppen2/security/SecurityConfig.java index 8816b24..751d14f 100644 --- a/src/main/java/mops/gruppen2/security/SecurityConfig.java +++ b/src/main/java/mops/gruppen2/security/SecurityConfig.java @@ -48,7 +48,7 @@ class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter { @Bean @Scope(scopeName = WebApplicationContext.SCOPE_REQUEST, - proxyMode = ScopedProxyMode.TARGET_CLASS) + proxyMode = ScopedProxyMode.TARGET_CLASS) public AccessToken getAccessToken() { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder @@ -61,14 +61,14 @@ class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter { protected void configure(HttpSecurity http) throws Exception { super.configure(http); http.authorizeRequests() - .antMatchers("/actuator/**") - .hasRole("monitoring") - .and() - .authorizeRequests() - .antMatchers("/h2-console/**") - .permitAll() - .anyRequest() - .permitAll(); + .antMatchers("/actuator/**") + .hasRole("monitoring") + .and() + .authorizeRequests() + .antMatchers("/h2-console/**") + .permitAll() + .anyRequest() + .permitAll(); http.csrf().disable(); http.headers().frameOptions().disable(); @@ -88,5 +88,6 @@ class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter { jsr250Enabled = true) public static class MethodSecurityConfig extends GlobalMethodSecurityConfiguration { + } } diff --git a/src/main/java/mops/gruppen2/service/APIFormatterService.java b/src/main/java/mops/gruppen2/service/APIFormatterService.java index 5665bdf..ee9d376 100644 --- a/src/main/java/mops/gruppen2/service/APIFormatterService.java +++ b/src/main/java/mops/gruppen2/service/APIFormatterService.java @@ -8,7 +8,8 @@ import java.util.List; @Service public class APIFormatterService { - static public UpdatedGroupRequestMapper wrapp(Long status, List groupList){ + + static public UpdatedGroupRequestMapper wrapp(Long status, List groupList) { return new UpdatedGroupRequestMapper(status, groupList); } } diff --git a/src/main/java/mops/gruppen2/service/ControllerService.java b/src/main/java/mops/gruppen2/service/ControllerService.java index b7f03f2..c38455e 100644 --- a/src/main/java/mops/gruppen2/service/ControllerService.java +++ b/src/main/java/mops/gruppen2/service/ControllerService.java @@ -1,8 +1,18 @@ package mops.gruppen2.service; -import mops.gruppen2.domain.*; import mops.gruppen2.domain.Exceptions.EventException; -import mops.gruppen2.domain.event.*; +import mops.gruppen2.domain.Group; +import mops.gruppen2.domain.GroupType; +import mops.gruppen2.domain.Role; +import mops.gruppen2.domain.User; +import mops.gruppen2.domain.Visibility; +import mops.gruppen2.domain.event.AddUserEvent; +import mops.gruppen2.domain.event.CreateGroupEvent; +import mops.gruppen2.domain.event.DeleteGroupEvent; +import mops.gruppen2.domain.event.DeleteUserEvent; +import mops.gruppen2.domain.event.UpdateGroupDescriptionEvent; +import mops.gruppen2.domain.event.UpdateGroupTitleEvent; +import mops.gruppen2.domain.event.UpdateRoleEvent; import mops.gruppen2.security.Account; import org.springframework.stereotype.Service; @@ -34,7 +44,7 @@ public class ControllerService { createInviteLink(group_id); } - CreateGroupEvent createGroupEvent = new CreateGroupEvent(group_id, account.getName(), null , GroupType.SIMPLE, visibility1); + CreateGroupEvent createGroupEvent = new CreateGroupEvent(group_id, account.getName(), null, GroupType.SIMPLE, visibility1); eventService.saveEvent(createGroupEvent); User user = new User(account.getName(), account.getGivenname(), account.getFamilyname(), account.getEmail()); @@ -49,8 +59,8 @@ public class ControllerService { } - public void addUser(Account account, Long group_id){ - AddUserEvent addUserEvent = new AddUserEvent(group_id,account.getName(),account.getGivenname(),account.getFamilyname(),account.getEmail()); + public void addUser(Account account, Long group_id) { + AddUserEvent addUserEvent = new AddUserEvent(group_id, account.getName(), account.getGivenname(), account.getFamilyname(), account.getEmail()); eventService.saveEvent(addUserEvent); } @@ -61,13 +71,13 @@ public class ControllerService { } } - public void updateTitle(Account account, Long group_id, String title){ - UpdateGroupTitleEvent updateGroupTitleEvent = new UpdateGroupTitleEvent(group_id,account.getName(),title); + public void updateTitle(Account account, Long group_id, String title) { + UpdateGroupTitleEvent updateGroupTitleEvent = new UpdateGroupTitleEvent(group_id, account.getName(), title); eventService.saveEvent(updateGroupTitleEvent); } - public void updateDescription(Account account, Long group_id, String description){ - UpdateGroupDescriptionEvent updateGroupDescriptionEvent = new UpdateGroupDescriptionEvent(group_id,account.getName(),description); + public void updateDescription(Account account, Long group_id, String description) { + UpdateGroupDescriptionEvent updateGroupDescriptionEvent = new UpdateGroupDescriptionEvent(group_id, account.getName(), description); eventService.saveEvent(updateGroupDescriptionEvent); } @@ -76,7 +86,9 @@ public class ControllerService { Group group = userService.getGroupById(group_id); User user = null; for (User member : group.getMembers()) { - if(member.getUser_id().equals(user_id)) user = member; + if (member.getUser_id().equals(user_id)) { + user = member; + } } assert user != null; if (group.getRoles().get(user.getUser_id()) == Role.ADMIN) { @@ -91,7 +103,9 @@ public class ControllerService { Group group = userService.getGroupById(group_id); User user = null; for (User member : group.getMembers()) { - if(member.getUser_id().equals(user_id)) user = member; + if (member.getUser_id().equals(user_id)) { + user = member; + } } assert user != null; DeleteUserEvent deleteUserEvent = new DeleteUserEvent(group_id, user.getUser_id()); diff --git a/src/main/java/mops/gruppen2/service/EventService.java b/src/main/java/mops/gruppen2/service/EventService.java index 7fd67e8..010ff02 100644 --- a/src/main/java/mops/gruppen2/service/EventService.java +++ b/src/main/java/mops/gruppen2/service/EventService.java @@ -13,6 +13,7 @@ import java.util.List; @Service public class EventService { + private final SerializationService serializationService; private final EventRepository eventStore; diff --git a/src/main/java/mops/gruppen2/service/GroupService.java b/src/main/java/mops/gruppen2/service/GroupService.java index ec3c4e6..b741cac 100644 --- a/src/main/java/mops/gruppen2/service/GroupService.java +++ b/src/main/java/mops/gruppen2/service/GroupService.java @@ -1,9 +1,8 @@ package mops.gruppen2.service; -import mops.gruppen2.domain.dto.EventDTO; import mops.gruppen2.domain.Exceptions.EventException; import mops.gruppen2.domain.Group; -import mops.gruppen2.domain.Visibility; +import mops.gruppen2.domain.dto.EventDTO; import mops.gruppen2.domain.event.Event; import mops.gruppen2.repository.EventRepository; import mops.gruppen2.security.Account; @@ -25,7 +24,8 @@ public class GroupService { this.eventRepository = eventRepository; } - /** Sucht in der DB alle Zeilen raus welche eine der Gruppen_ids hat. + /** + * 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 @@ -33,14 +33,15 @@ public class GroupService { */ public List getGroupEvents(List group_ids) { List eventDTOS = new ArrayList<>(); - for (Long group_id: group_ids) { + for (Long group_id : group_ids) { eventDTOS.addAll(eventRepository.findEventDTOByGroup_id(group_id)); } return 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 + /** + * 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 @@ -57,8 +58,9 @@ 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 + /** + * 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 @@ -73,7 +75,7 @@ public class GroupService { } private List removeUserGroups(List group_ids, List user_groups) { - for (Long group_id: user_groups) { + for (Long group_id : user_groups) { group_ids.remove(group_id); } return group_ids; @@ -82,6 +84,7 @@ public class GroupService { /** * sucht alle Zeilen in der DB wo die Visibility true ist und entfernt alle Gruppen des Users. * Erstellt eine Liste aus Gruppen. + * * @return * @throws EventException */ @@ -97,14 +100,15 @@ public class GroupService { /** * 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, Account account) throws EventException { List groups = new ArrayList<>(); - for (Group group: getAllGroupWithVisibilityPublic(account.getName())) { - if (group.getTitle().toLowerCase().contains(search.toLowerCase()) || group.getDescription().toLowerCase().contains(search.toLowerCase())){ + for (Group group : getAllGroupWithVisibilityPublic(account.getName())) { + if (group.getTitle().toLowerCase().contains(search.toLowerCase()) || group.getDescription().toLowerCase().contains(search.toLowerCase())) { groups.add(group); } } diff --git a/src/main/java/mops/gruppen2/service/SerializationService.java b/src/main/java/mops/gruppen2/service/SerializationService.java index 3c7f8ba..c08d0f1 100644 --- a/src/main/java/mops/gruppen2/service/SerializationService.java +++ b/src/main/java/mops/gruppen2/service/SerializationService.java @@ -28,7 +28,7 @@ public class SerializationService { * @return JSON-Event-Payload als String * @throws JsonProcessingException */ - + public String serializeEvent(Event event) throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); return mapper.writeValueAsString(event); diff --git a/src/main/java/mops/gruppen2/service/UserService.java b/src/main/java/mops/gruppen2/service/UserService.java index 74a9ca4..4f83c37 100644 --- a/src/main/java/mops/gruppen2/service/UserService.java +++ b/src/main/java/mops/gruppen2/service/UserService.java @@ -9,6 +9,7 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; + //Hallo @Service public class UserService { @@ -25,11 +26,11 @@ public class UserService { public List getUserGroups(User user) throws EventException { List group_ids = eventRepository.findGroup_idsWhereUser_id(user.getUser_id()); - List events = groupService.getGroupEvents(group_ids); + List events = groupService.getGroupEvents(group_ids); List groups = groupService.projectEventList(events); List newGroups = new ArrayList<>(); - for (Group group: groups) { - if(group.getMembers().contains(user)){ + for (Group group : groups) { + if (group.getMembers().contains(user)) { newGroups.add(group); } } diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties index ee53a97..9bd5615 100644 --- a/src/main/resources/application-dev.properties +++ b/src/main/resources/application-dev.properties @@ -1,4 +1,3 @@ -server.port=8080 application.name=gruppen2 logging.pattern.console=[${application.name}],%magenta(%-5level), %d{dd-MM-yyyy HH:mm:ss.SSS}, %highlight(%msg),%thread,%logger.%M%n spring.datasource.url=jdbc:h2:mem:blogdb @@ -16,6 +15,5 @@ keycloak.resource=gruppenfindung keycloak.credentials.secret=fc6ebf10-8c63-4e71-a667-4eae4e8209a1 keycloak.verify-token-audience=true keycloak.use-resource-role-mappings=true - keycloak.autodetect-bearer-only=true keycloak.confidential-port= 443 diff --git a/src/main/resources/application-docker.properties b/src/main/resources/application-docker.properties index 76fce96..52656f7 100644 --- a/src/main/resources/application-docker.properties +++ b/src/main/resources/application-docker.properties @@ -1,5 +1,4 @@ application.name=gruppen2 - logging.pattern.console=[${application.name}],%magenta(%-5level), %d{dd-MM-yyyy HH:mm:ss.SSS}, %highlight(%msg),%thread,%logger.%M%n spring.datasource.initialization-mode=always @@ -10,12 +9,10 @@ spring.datasource.password=geheim keycloak.principal-attribute=preferred_username keycloak.auth-server-url=https://keycloak.cs.hhu.de/auth keycloak.realm=MOPS - hhu_keycloak.token-uri=https://keycloak.cs.hhu.de/auth/realms/MOPS/protocol/openid-connect/token keycloak.resource=gruppenfindung keycloak.credentials.secret= fc6ebf10-8c63-4e71-a667-4eae4e8209a1 keycloak.verify-token-audience=true keycloak.use-resource-role-mappings=true - keycloak.autodetect-bearer-only=true keycloak.confidential-port= 443 diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql index dc80759..d72a7a8 100644 --- a/src/main/resources/schema.sql +++ b/src/main/resources/schema.sql @@ -1,3 +1,5 @@ +-- noinspection SqlDialectInspectionForFile + -- noinspection SqlNoDataSourceInspectionForFile DROP TABLE IF EXISTS event; diff --git a/src/main/resources/templates/create.html b/src/main/resources/templates/create.html index c43add0..2b93f80 100644 --- a/src/main/resources/templates/create.html +++ b/src/main/resources/templates/create.html @@ -16,7 +16,7 @@
  • Gruppen
  • -
  • +
  • Erstellen
  • @@ -34,23 +34,29 @@

    Gruppenerstellung

    -
    +
    - +
    - +
    - - + +
    - +
    diff --git a/src/main/resources/templates/createLecture.html b/src/main/resources/templates/createLecture.html index 4325d66..04be706 100644 --- a/src/main/resources/templates/createLecture.html +++ b/src/main/resources/templates/createLecture.html @@ -7,7 +7,8 @@ Gruppenerstellung - + @@ -37,32 +38,43 @@

    Veranstaltung erstellen

    -
    -
    +
    +
    - +
    - +
    - - + +
    - - + +
    - +
    @@ -71,11 +83,11 @@
  • - \ No newline at end of file + diff --git a/src/main/resources/templates/detailsMember.html b/src/main/resources/templates/detailsMember.html index 1298e46..b5c7fc2 100644 --- a/src/main/resources/templates/detailsMember.html +++ b/src/main/resources/templates/detailsMember.html @@ -30,12 +30,16 @@
    -
    +

    - Private Gruppe - Öffentliche Gruppe - Veranstaltung + Private Gruppe + Öffentliche Gruppe + Veranstaltung


    @@ -43,11 +47,15 @@

    @@ -55,8 +63,10 @@

    Mitglieder

    -
    - @@ -65,10 +75,12 @@
    -
      -
    • +
        +
      • - admin + admin
    @@ -77,4 +89,4 @@
    - \ No newline at end of file + diff --git a/src/main/resources/templates/detailsNoMember.html b/src/main/resources/templates/detailsNoMember.html index 0b3a032..5d5684a 100644 --- a/src/main/resources/templates/detailsNoMember.html +++ b/src/main/resources/templates/detailsNoMember.html @@ -31,20 +31,31 @@
    -
    +

    - Private Gruppe - Öffentliche Gruppe - Veranstaltung + Private Gruppe + Öffentliche Gruppe + Veranstaltung

    -

    +

    - +
    @@ -54,4 +65,4 @@
    - \ No newline at end of file + diff --git a/src/main/resources/templates/editMembers.html b/src/main/resources/templates/editMembers.html index 5c67b93..515fd20 100644 --- a/src/main/resources/templates/editMembers.html +++ b/src/main/resources/templates/editMembers.html @@ -6,7 +6,8 @@ Gruppendetails - + @@ -38,16 +39,25 @@
    -
    +
    - - + +
    - +
    @@ -62,28 +72,36 @@
    - - - - - + + + + +
    - Mitglied - Admin - -
    - - - -
    -
    - - - -
    -
    + Mitglied + Admin + +
    + + + +
    +
    + + + +
    +
    -
    @@ -92,7 +110,7 @@