From df7803f83df516e1c6000a439bea554cde3370e8 Mon Sep 17 00:00:00 2001 From: Christoph Date: Wed, 18 Mar 2020 16:26:11 +0100 Subject: [PATCH 01/13] add error handling (frontend) + exception changes Co-authored-by: Christoph Co-authored-by: Mahgs --- .../controller/Gruppen2Controller.java | 17 ++++------ .../domain/Exceptions/EventException.java | 9 +++-- .../Exceptions/GroupIdMismatchException.java | 13 +++++++ .../Exceptions/GroupNotFoundException.java | 13 +++++++ .../UserAlreadyExistsException.java | 10 ++++-- .../Exceptions/UserNotFoundException.java | 12 +++++-- .../domain/ProductSwaggerExample.java | 12 ------- .../gruppen2/domain/event/AddUserEvent.java | 7 ++-- .../domain/event/CreateGroupEvent.java | 5 ++- .../domain/event/DeleteGroupEvent.java | 2 +- .../domain/event/DeleteUserEvent.java | 7 ++-- .../mops/gruppen2/domain/event/Event.java | 17 +++++++++- .../event/UpdateGroupDescriptionEvent.java | 3 +- .../domain/event/UpdateGroupTitleEvent.java | 3 +- .../domain/event/UpdateRoleEvent.java | 17 +++++----- .../gruppen2/security/SecurityConfig.java | 6 +--- .../mops/gruppen2/service/UserService.java | 10 ++++-- src/main/resources/application-dev.properties | 3 +- src/main/resources/templates/error.html | 34 +++++++++++++++++++ .../resources/templates/errorRenameLater.html | 26 -------------- 20 files changed, 140 insertions(+), 86 deletions(-) create mode 100644 src/main/java/mops/gruppen2/domain/Exceptions/GroupIdMismatchException.java create mode 100644 src/main/java/mops/gruppen2/domain/Exceptions/GroupNotFoundException.java delete mode 100644 src/main/java/mops/gruppen2/domain/ProductSwaggerExample.java create mode 100644 src/main/resources/templates/error.html delete mode 100644 src/main/resources/templates/errorRenameLater.html diff --git a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java index 842870d..217231b 100644 --- a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java +++ b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java @@ -2,19 +2,16 @@ package mops.gruppen2.controller; import mops.gruppen2.config.Gruppen2Config; import mops.gruppen2.domain.Exceptions.EventException; +import mops.gruppen2.domain.Exceptions.GroupNotFoundException; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.User; -import mops.gruppen2.domain.Visibility; -import mops.gruppen2.domain.event.CreateGroupEvent; 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; @@ -125,7 +122,7 @@ public class Gruppen2Controller { @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) @GetMapping("/details") - public String showGroupDetails(KeycloakAuthenticationToken token, Model model, @RequestParam(value = "id") Long id) throws EventException, ResponseStatusException { + public String showGroupDetails(KeycloakAuthenticationToken token, Model model, @RequestParam(value = "id") Long id) throws ResponseStatusException, EventException { model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); Group group = userService.getGroupById(id); Account account = keyCloakService.createAccountFromPrincipal(token); @@ -135,7 +132,7 @@ public class Gruppen2Controller { model.addAttribute("role", group.getRoles().get(user.getUser_id())); return "detailsMember"; } - throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Group not found"); + throw new GroupNotFoundException(); } @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) @@ -156,7 +153,7 @@ public class Gruppen2Controller { model.addAttribute("group", group); return "detailsNoMember"; } - throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Group not found"); + throw new GroupNotFoundException(); } @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) @@ -168,10 +165,10 @@ public class Gruppen2Controller { model.addAttribute("group", group); return "redirect:/gruppen2/detailsSearch?id=" + group.getId(); } - throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Group not found"); + throw new GroupNotFoundException(); } - @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) + @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) @PostMapping("/leaveGroup") public String pLeaveGroup(KeycloakAuthenticationToken token, @RequestParam(value = "group_id") Long id) { Account account = keyCloakService.createAccountFromPrincipal(token); @@ -181,6 +178,6 @@ public class Gruppen2Controller { @GetMapping("*") public String defaultLink() { - return "errorRenameLater"; + return "error"; } } diff --git a/src/main/java/mops/gruppen2/domain/Exceptions/EventException.java b/src/main/java/mops/gruppen2/domain/Exceptions/EventException.java index 20bb176..e562f51 100644 --- a/src/main/java/mops/gruppen2/domain/Exceptions/EventException.java +++ b/src/main/java/mops/gruppen2/domain/Exceptions/EventException.java @@ -1,10 +1,13 @@ package mops.gruppen2.domain.Exceptions; -public class EventException extends Exception { +import org.springframework.http.HttpStatus; +import org.springframework.web.server.ResponseStatusException; + +public class EventException extends ResponseStatusException { private String msg; - public EventException(String msg) { - this.msg = msg; + public EventException(String msg, HttpStatus status) { + super(status, msg); } @Override diff --git a/src/main/java/mops/gruppen2/domain/Exceptions/GroupIdMismatchException.java b/src/main/java/mops/gruppen2/domain/Exceptions/GroupIdMismatchException.java new file mode 100644 index 0000000..3d98e69 --- /dev/null +++ b/src/main/java/mops/gruppen2/domain/Exceptions/GroupIdMismatchException.java @@ -0,0 +1,13 @@ +package mops.gruppen2.domain.Exceptions; + +import org.springframework.http.HttpStatus; + +public class GroupIdMismatchException extends EventException { + public GroupIdMismatchException(String msg) { + super("Falsche Gruppe für Event." + " (" + msg + ")", HttpStatus.INTERNAL_SERVER_ERROR); + } + + public GroupIdMismatchException() { + super("", HttpStatus.INTERNAL_SERVER_ERROR); + } +} diff --git a/src/main/java/mops/gruppen2/domain/Exceptions/GroupNotFoundException.java b/src/main/java/mops/gruppen2/domain/Exceptions/GroupNotFoundException.java new file mode 100644 index 0000000..ca45554 --- /dev/null +++ b/src/main/java/mops/gruppen2/domain/Exceptions/GroupNotFoundException.java @@ -0,0 +1,13 @@ +package mops.gruppen2.domain.Exceptions; + +import org.springframework.http.HttpStatus; + +public class GroupNotFoundException extends EventException { + public GroupNotFoundException(String msg) { + super(msg, HttpStatus.NOT_FOUND); + } + + public GroupNotFoundException() { + super("Gruppe nicht gefunden.", HttpStatus.NOT_FOUND); + } +} diff --git a/src/main/java/mops/gruppen2/domain/Exceptions/UserAlreadyExistsException.java b/src/main/java/mops/gruppen2/domain/Exceptions/UserAlreadyExistsException.java index 8896356..07b593e 100644 --- a/src/main/java/mops/gruppen2/domain/Exceptions/UserAlreadyExistsException.java +++ b/src/main/java/mops/gruppen2/domain/Exceptions/UserAlreadyExistsException.java @@ -1,7 +1,13 @@ package mops.gruppen2.domain.Exceptions; +import org.springframework.http.HttpStatus; + public class UserAlreadyExistsException extends EventException { - public UserAlreadyExistsException(String msg){ - super(msg); + public UserAlreadyExistsException(String msg) { + super(msg, HttpStatus.INTERNAL_SERVER_ERROR); + } + + public UserAlreadyExistsException() { + super("Der User existiert bereits.", HttpStatus.INTERNAL_SERVER_ERROR); } } diff --git a/src/main/java/mops/gruppen2/domain/Exceptions/UserNotFoundException.java b/src/main/java/mops/gruppen2/domain/Exceptions/UserNotFoundException.java index f7e0080..fd10bb9 100644 --- a/src/main/java/mops/gruppen2/domain/Exceptions/UserNotFoundException.java +++ b/src/main/java/mops/gruppen2/domain/Exceptions/UserNotFoundException.java @@ -1,7 +1,13 @@ package mops.gruppen2.domain.Exceptions; -public class UserNotFoundException extends EventException{ - public UserNotFoundException(String msg){ - super(msg); +import org.springframework.http.HttpStatus; + +public class UserNotFoundException extends EventException { + public UserNotFoundException(String msg) { + super(msg, HttpStatus.NOT_FOUND); + } + + public UserNotFoundException() { + super("Der User wurde nicht gefunden.", HttpStatus.NOT_FOUND); } } diff --git a/src/main/java/mops/gruppen2/domain/ProductSwaggerExample.java b/src/main/java/mops/gruppen2/domain/ProductSwaggerExample.java deleted file mode 100644 index 14f50dd..0000000 --- a/src/main/java/mops/gruppen2/domain/ProductSwaggerExample.java +++ /dev/null @@ -1,12 +0,0 @@ -package mops.gruppen2.domain; - -import lombok.Value; - -// @ApiModelProperty -@Value -public class ProductSwaggerExample { - - // @ApiModelProperty - String name; - String description; -} diff --git a/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java b/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java index a97845c..9f36bce 100644 --- a/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java @@ -27,11 +27,12 @@ public class AddUserEvent extends Event { this.email = email; } - public void apply(Group group) throws EventException{ + @Override + public void applyEvent(Group group) throws EventException { User user = new User(this.user_id, this.givenname, this.familyname, this.email); - if (group.getMembers().contains(user)){ - throw new UserAlreadyExistsException("Der User existiert bereits"); + if (group.getMembers().contains(user)) { + throw new UserAlreadyExistsException(); } group.getMembers().add(user); diff --git a/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java b/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java index f5f49b1..878f2b6 100644 --- a/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java @@ -15,8 +15,6 @@ public class CreateGroupEvent extends Event { 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; @@ -24,7 +22,8 @@ public class CreateGroupEvent extends Event { this.groupVisibility = visibility; } - public void apply(Group group) { + @Override + public void applyEvent(Group group) { group.setId(this.group_id); group.setParent(this.groupParent); group.setType(this.groupType); diff --git a/src/main/java/mops/gruppen2/domain/event/DeleteGroupEvent.java b/src/main/java/mops/gruppen2/domain/event/DeleteGroupEvent.java index 4b8a6e3..0640d8d 100644 --- a/src/main/java/mops/gruppen2/domain/event/DeleteGroupEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/DeleteGroupEvent.java @@ -13,7 +13,7 @@ public class DeleteGroupEvent extends Event { } @Override - public void apply(Group group) { + public void applyEvent(Group group) { group.getRoles().clear(); group.getMembers().clear(); group.setTitle(null); diff --git a/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java b/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java index 1afab84..00c81ca 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. @@ -17,7 +17,8 @@ public class DeleteUserEvent extends Event { super(group_id, user_id); } - public void apply(Group group) throws EventException { + @Override + public void applyEvent(Group group) throws EventException { for (User user : group.getMembers()) { if (user.getUser_id().equals(this.user_id)) { group.getMembers().remove(user); diff --git a/src/main/java/mops/gruppen2/domain/event/Event.java b/src/main/java/mops/gruppen2/domain/event/Event.java index 17a00f9..cac4b9d 100644 --- a/src/main/java/mops/gruppen2/domain/event/Event.java +++ b/src/main/java/mops/gruppen2/domain/event/Event.java @@ -31,7 +31,22 @@ public class Event { Long group_id; String user_id; - public void apply(Group group) throws EventException { + checkGroupIdMatch(group.getId()); + applyEvent(group); + } + + protected void applyEvent(Group group) throws EventException { + + } + + private void checkGroupIdMatch(Long group_id) { + if (this.group_id.equals(group_id)) { + return; + } + + //throw new GroupIdMismatchException(this.getClass().toString()); + System.out.println(group_id); + System.out.println(this.group_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..8024365 100644 --- a/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java @@ -19,7 +19,8 @@ public class UpdateGroupDescriptionEvent extends Event { this.newGroupDescription = newGroupDescription; } - public void apply(Group group) { + @Override + public void applyEvent(Group group) { group.setDescription(this.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..7f2f1d1 100644 --- a/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java @@ -19,7 +19,8 @@ public class UpdateGroupTitleEvent extends Event { this.newGroupTitle = newGroupTitle; } - public void apply(Group group) { + @Override + public void applyEvent(Group group) { group.setTitle(this.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..64b488e 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,15 +16,16 @@ 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)){ - throw new UserNotFoundException("Der User wurde nicht gefunden"); + @Override + public void applyEvent(Group group) throws UserNotFoundException { + if (!group.getRoles().containsKey(user_id)) { + throw new UserNotFoundException(); } group.getRoles().put(this.user_id, this.newRole); } diff --git a/src/main/java/mops/gruppen2/security/SecurityConfig.java b/src/main/java/mops/gruppen2/security/SecurityConfig.java index 8816b24..df96dd7 100644 --- a/src/main/java/mops/gruppen2/security/SecurityConfig.java +++ b/src/main/java/mops/gruppen2/security/SecurityConfig.java @@ -6,11 +6,7 @@ import org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticatio import org.keycloak.adapters.springsecurity.config.KeycloakWebSecurityConfigurerAdapter; import org.keycloak.representations.AccessToken; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Scope; -import org.springframework.context.annotation.ScopedProxyMode; +import org.springframework.context.annotation.*; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration; diff --git a/src/main/java/mops/gruppen2/service/UserService.java b/src/main/java/mops/gruppen2/service/UserService.java index 74a9ca4..681b3c6 100644 --- a/src/main/java/mops/gruppen2/service/UserService.java +++ b/src/main/java/mops/gruppen2/service/UserService.java @@ -1,6 +1,7 @@ package mops.gruppen2.service; import mops.gruppen2.domain.Exceptions.EventException; +import mops.gruppen2.domain.Exceptions.GroupNotFoundException; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.User; import mops.gruppen2.domain.event.Event; @@ -39,7 +40,12 @@ public class UserService { public Group getGroupById(Long group_id) throws EventException { List group_ids = new ArrayList<>(); group_ids.add(group_id); - List events = groupService.getGroupEvents(group_ids); - return groupService.projectEventList(events).get(0); + + try { + List events = groupService.getGroupEvents(group_ids); + return groupService.projectEventList(events).get(0); + } catch (IndexOutOfBoundsException e) { + throw new GroupNotFoundException("Gruppe nicht gefunden"); + } } } diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties index ee53a97..bc79d39 100644 --- a/src/main/resources/application-dev.properties +++ b/src/main/resources/application-dev.properties @@ -18,4 +18,5 @@ keycloak.verify-token-audience=true keycloak.use-resource-role-mappings=true keycloak.autodetect-bearer-only=true -keycloak.confidential-port= 443 +keycloak.confidential-port=443 +server.error.include-stacktrace=always diff --git a/src/main/resources/templates/error.html b/src/main/resources/templates/error.html new file mode 100644 index 0000000..5ea8655 --- /dev/null +++ b/src/main/resources/templates/error.html @@ -0,0 +1,34 @@ + + + + + + + + + Seite nicht gefunden + + +
+
+
+

UPSI

+

Da ist wohl etwas schiefgelaufen :(


+
+
+
+
+
+

+
+
+

+
+
+

Zurück +

+
+
+ + diff --git a/src/main/resources/templates/errorRenameLater.html b/src/main/resources/templates/errorRenameLater.html deleted file mode 100644 index 01fbadc..0000000 --- a/src/main/resources/templates/errorRenameLater.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - Error - - -
-
-

Da ist etwas schiefgelaufen!

-

Die Seite, nach der du suchst, scheint nicht zu existieren.

-
- -
-
-
- - \ No newline at end of file From b1460abe481164070e57a2fc00a158c121434aef Mon Sep 17 00:00:00 2001 From: Christoph Date: Wed, 18 Mar 2020 18:49:40 +0100 Subject: [PATCH 02/13] Exception rework: clearer message + origin Co-authored-by: [Mahgs] Co-authored-by: Christoph --- .../mops/gruppen2/Gruppen2Application.java | 7 ----- .../controller/Gruppen2Controller.java | 17 +++++------ .../domain/Exceptions/EventException.java | 11 ++----- .../Exceptions/GroupIdMismatchException.java | 7 ++--- .../Exceptions/GroupNotFoundException.java | 7 ++--- .../domain/Exceptions/NoValueException.java | 10 +++++++ .../UserAlreadyExistsException.java | 7 ++--- .../Exceptions/UserNotFoundException.java | 7 ++--- src/main/java/mops/gruppen2/domain/Group.java | 10 +++---- .../gruppen2/domain/event/AddUserEvent.java | 9 +++--- .../domain/event/CreateGroupEvent.java | 1 + .../domain/event/DeleteUserEvent.java | 3 +- .../mops/gruppen2/domain/event/Event.java | 25 +++++++--------- .../event/UpdateGroupDescriptionEvent.java | 8 ++++- .../domain/event/UpdateGroupTitleEvent.java | 8 ++++- .../domain/event/UpdateRoleEvent.java | 9 +++--- .../gruppen2/service/ControllerService.java | 6 ++-- .../mops/gruppen2/service/EventService.java | 2 ++ .../mops/gruppen2/service/GroupService.java | 3 +- .../service/SerializationServiceTest.java | 30 ------------------- 20 files changed, 76 insertions(+), 111 deletions(-) create mode 100644 src/main/java/mops/gruppen2/domain/Exceptions/NoValueException.java delete mode 100644 src/test/java/mops/gruppen2/service/SerializationServiceTest.java 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/controller/Gruppen2Controller.java b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java index 3f6b0ce..a394758 100644 --- a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java +++ b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java @@ -2,19 +2,17 @@ package mops.gruppen2.controller; import mops.gruppen2.config.Gruppen2Config; import mops.gruppen2.domain.Exceptions.EventException; +import mops.gruppen2.domain.Exceptions.GroupNotFoundException; 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.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; @@ -33,15 +31,13 @@ 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; - public Gruppen2Controller(KeyCloakService keyCloakService, EventService eventService, GroupService groupService, UserService userService, ControllerService controllerService, InviteLinkRepositoryService inviteLinkRepositoryService) { + public Gruppen2Controller(KeyCloakService keyCloakService, GroupService groupService, UserService userService, ControllerService controllerService, InviteLinkRepositoryService inviteLinkRepositoryService) { this.keyCloakService = keyCloakService; - this.eventService = eventService; this.groupService = groupService; this.userService = userService; this.controllerService = controllerService; @@ -138,7 +134,8 @@ public class Gruppen2Controller { model.addAttribute("admin", Role.ADMIN); return "detailsMember"; } - throw new GroupNotFoundException(); + + throw new GroupNotFoundException(this.getClass().toString()); } @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) @@ -162,7 +159,7 @@ public class Gruppen2Controller { model.addAttribute("group", group); return "detailsNoMember"; } - throw new GroupNotFoundException(); + throw new GroupNotFoundException(this.getClass().toString()); } @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) @@ -174,7 +171,7 @@ public class Gruppen2Controller { model.addAttribute("group", group); return "redirect:/gruppen2/detailsSearch?id=" + group.getId(); } - throw new GroupNotFoundException(); + throw new GroupNotFoundException(this.getClass().toString()); } @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) diff --git a/src/main/java/mops/gruppen2/domain/Exceptions/EventException.java b/src/main/java/mops/gruppen2/domain/Exceptions/EventException.java index e562f51..7570f2a 100644 --- a/src/main/java/mops/gruppen2/domain/Exceptions/EventException.java +++ b/src/main/java/mops/gruppen2/domain/Exceptions/EventException.java @@ -3,15 +3,10 @@ package mops.gruppen2.domain.Exceptions; import org.springframework.http.HttpStatus; import org.springframework.web.server.ResponseStatusException; -public class EventException extends ResponseStatusException { - private String msg; +public abstract class EventException extends ResponseStatusException { - public EventException(String msg, HttpStatus status) { - super(status, msg); + public EventException(HttpStatus status, String msg, String info) { + super(status, msg + " (" + info + ")"); } - @Override - public String getMessage() { - return msg; - } } diff --git a/src/main/java/mops/gruppen2/domain/Exceptions/GroupIdMismatchException.java b/src/main/java/mops/gruppen2/domain/Exceptions/GroupIdMismatchException.java index 3d98e69..52d7c6b 100644 --- a/src/main/java/mops/gruppen2/domain/Exceptions/GroupIdMismatchException.java +++ b/src/main/java/mops/gruppen2/domain/Exceptions/GroupIdMismatchException.java @@ -3,11 +3,8 @@ package mops.gruppen2.domain.Exceptions; import org.springframework.http.HttpStatus; public class GroupIdMismatchException extends EventException { - public GroupIdMismatchException(String msg) { - super("Falsche Gruppe für Event." + " (" + msg + ")", HttpStatus.INTERNAL_SERVER_ERROR); - } - public GroupIdMismatchException() { - super("", HttpStatus.INTERNAL_SERVER_ERROR); + public GroupIdMismatchException(String info) { + super(HttpStatus.INTERNAL_SERVER_ERROR, "Falsche Gruppe für Event.", info); } } diff --git a/src/main/java/mops/gruppen2/domain/Exceptions/GroupNotFoundException.java b/src/main/java/mops/gruppen2/domain/Exceptions/GroupNotFoundException.java index ca45554..845d1be 100644 --- a/src/main/java/mops/gruppen2/domain/Exceptions/GroupNotFoundException.java +++ b/src/main/java/mops/gruppen2/domain/Exceptions/GroupNotFoundException.java @@ -3,11 +3,8 @@ package mops.gruppen2.domain.Exceptions; import org.springframework.http.HttpStatus; public class GroupNotFoundException extends EventException { - public GroupNotFoundException(String msg) { - super(msg, HttpStatus.NOT_FOUND); - } - public GroupNotFoundException() { - super("Gruppe nicht gefunden.", HttpStatus.NOT_FOUND); + public GroupNotFoundException(String info) { + super(HttpStatus.NOT_FOUND, "Gruppe wurde nicht gefunden.", info); } } diff --git a/src/main/java/mops/gruppen2/domain/Exceptions/NoValueException.java b/src/main/java/mops/gruppen2/domain/Exceptions/NoValueException.java new file mode 100644 index 0000000..b326c39 --- /dev/null +++ b/src/main/java/mops/gruppen2/domain/Exceptions/NoValueException.java @@ -0,0 +1,10 @@ +package mops.gruppen2.domain.Exceptions; + +import org.springframework.http.HttpStatus; + +public class NoValueException extends EventException { + + public NoValueException(String info) { + super(HttpStatus.NO_CONTENT, "Eine Information fehlt.", info); + } +} diff --git a/src/main/java/mops/gruppen2/domain/Exceptions/UserAlreadyExistsException.java b/src/main/java/mops/gruppen2/domain/Exceptions/UserAlreadyExistsException.java index 07b593e..5b8863a 100644 --- a/src/main/java/mops/gruppen2/domain/Exceptions/UserAlreadyExistsException.java +++ b/src/main/java/mops/gruppen2/domain/Exceptions/UserAlreadyExistsException.java @@ -3,11 +3,8 @@ package mops.gruppen2.domain.Exceptions; import org.springframework.http.HttpStatus; public class UserAlreadyExistsException extends EventException { - public UserAlreadyExistsException(String msg) { - super(msg, HttpStatus.INTERNAL_SERVER_ERROR); - } - public UserAlreadyExistsException() { - super("Der User existiert bereits.", HttpStatus.INTERNAL_SERVER_ERROR); + public UserAlreadyExistsException(String info) { + super(HttpStatus.INTERNAL_SERVER_ERROR, "Der User existiert bereits.", info); } } diff --git a/src/main/java/mops/gruppen2/domain/Exceptions/UserNotFoundException.java b/src/main/java/mops/gruppen2/domain/Exceptions/UserNotFoundException.java index fd10bb9..881e95c 100644 --- a/src/main/java/mops/gruppen2/domain/Exceptions/UserNotFoundException.java +++ b/src/main/java/mops/gruppen2/domain/Exceptions/UserNotFoundException.java @@ -3,11 +3,8 @@ package mops.gruppen2.domain.Exceptions; import org.springframework.http.HttpStatus; public class UserNotFoundException extends EventException { - public UserNotFoundException(String msg) { - super(msg, HttpStatus.NOT_FOUND); - } - public UserNotFoundException() { - super("Der User wurde nicht gefunden.", HttpStatus.NOT_FOUND); + public UserNotFoundException(String info) { + super(HttpStatus.NOT_FOUND, "Der User wurde nicht gefunden.", info); } } diff --git a/src/main/java/mops/gruppen2/domain/Group.java b/src/main/java/mops/gruppen2/domain/Group.java index 3a09149..d0fa90c 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,7 +18,7 @@ import java.util.*; @Setter @AllArgsConstructor public class Group { - private long id; + private Long id; private String title; private String description; private final List members; diff --git a/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java b/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java index 9f36bce..e515df3 100644 --- a/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java @@ -16,9 +16,10 @@ import mops.gruppen2.domain.User; @AllArgsConstructor @NoArgsConstructor public class AddUserEvent extends Event { - String givenname; - String familyname; - String email; + + private String givenname; + private String familyname; + private String email; public AddUserEvent(Long group_id, String user_id, String givenname, String familyname, String email) { super(group_id, user_id); @@ -32,7 +33,7 @@ public class AddUserEvent extends Event { User user = new User(this.user_id, this.givenname, this.familyname, this.email); if (group.getMembers().contains(user)) { - throw new UserAlreadyExistsException(); + throw new UserAlreadyExistsException(this.getClass().toString()); } group.getMembers().add(user); diff --git a/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java b/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java index 878f2b6..e385b8b 100644 --- a/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java @@ -11,6 +11,7 @@ import mops.gruppen2.domain.Visibility; @AllArgsConstructor @NoArgsConstructor public class CreateGroupEvent extends Event { + private Visibility groupVisibility; private Long groupParent; private GroupType groupType; diff --git a/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java b/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java index 00c81ca..89d4600 100644 --- a/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java @@ -13,6 +13,7 @@ import mops.gruppen2.domain.User; @Getter @NoArgsConstructor public class DeleteUserEvent extends Event { + public DeleteUserEvent(Long group_id, String user_id) { super(group_id, user_id); } @@ -26,6 +27,6 @@ public class DeleteUserEvent extends Event { return; } } - throw new UserNotFoundException("Der User existiert nicht"); + throw new UserNotFoundException(this.getClass().toString()); } } diff --git a/src/main/java/mops/gruppen2/domain/event/Event.java b/src/main/java/mops/gruppen2/domain/event/Event.java index cac4b9d..b2a820d 100644 --- a/src/main/java/mops/gruppen2/domain/event/Event.java +++ b/src/main/java/mops/gruppen2/domain/event/Event.java @@ -7,12 +7,9 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import mops.gruppen2.domain.Exceptions.EventException; +import mops.gruppen2.domain.Exceptions.GroupIdMismatchException; import mops.gruppen2.domain.Group; - -@Getter -@NoArgsConstructor -@AllArgsConstructor @JsonTypeInfo( include = JsonTypeInfo.As.PROPERTY, use = JsonTypeInfo.Id.NAME, @@ -26,27 +23,27 @@ import mops.gruppen2.domain.Group; @JsonSubTypes.Type(value = UpdateGroupTitleEvent.class, name = "UpdateGroupTitleEvent"), @JsonSubTypes.Type(value = UpdateRoleEvent.class, name = "UpdateRoleEvent"), }) +@Getter @Setter -public class Event { - Long group_id; - String user_id; +@NoArgsConstructor // Needed by Lombok in Subclasses +@AllArgsConstructor +public abstract class Event { + + protected Long group_id; + protected String user_id; public void apply(Group group) throws EventException { checkGroupIdMatch(group.getId()); applyEvent(group); } - protected void applyEvent(Group group) throws EventException { - - } + protected abstract void applyEvent(Group group) throws EventException; private void checkGroupIdMatch(Long group_id) { - if (this.group_id.equals(group_id)) { + if (group_id == null || this.group_id.equals(group_id)) { return; } - //throw new GroupIdMismatchException(this.getClass().toString()); - System.out.println(group_id); - System.out.println(this.group_id); + throw new GroupIdMismatchException(this.getClass().toString()); } } diff --git a/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java b/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java index 8024365..64739d6 100644 --- a/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java @@ -3,6 +3,7 @@ package mops.gruppen2.domain.event; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; +import mops.gruppen2.domain.Exceptions.NoValueException; import mops.gruppen2.domain.Group; /** @@ -12,7 +13,8 @@ import mops.gruppen2.domain.Group; @AllArgsConstructor @NoArgsConstructor public class UpdateGroupDescriptionEvent extends Event { - String newGroupDescription; + + private String newGroupDescription; public UpdateGroupDescriptionEvent(Long group_id, String user_id, String newGroupDescription) { super(group_id, user_id); @@ -21,6 +23,10 @@ public class UpdateGroupDescriptionEvent extends Event { @Override public void applyEvent(Group group) { + if (this.newGroupDescription.isEmpty()) { + throw new NoValueException(this.getClass().toString()); + } + group.setDescription(this.newGroupDescription); } } diff --git a/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java b/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java index 7f2f1d1..876feec 100644 --- a/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java @@ -3,6 +3,7 @@ package mops.gruppen2.domain.event; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; +import mops.gruppen2.domain.Exceptions.NoValueException; import mops.gruppen2.domain.Group; /** @@ -12,7 +13,8 @@ import mops.gruppen2.domain.Group; @AllArgsConstructor @NoArgsConstructor public class UpdateGroupTitleEvent extends Event { - String newGroupTitle; + + private String newGroupTitle; public UpdateGroupTitleEvent(Long group_id, String user_id, String newGroupTitle) { super(group_id, user_id); @@ -21,6 +23,10 @@ public class UpdateGroupTitleEvent extends Event { @Override public void applyEvent(Group group) { + if (this.getNewGroupTitle().isEmpty()) { + throw new NoValueException(this.getClass().toString()); + } + group.setTitle(this.newGroupTitle); } diff --git a/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java b/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java index 64b488e..292e27f 100644 --- a/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java @@ -15,7 +15,7 @@ import mops.gruppen2.domain.Role; @NoArgsConstructor public class UpdateRoleEvent extends Event { - Role newRole; + private Role newRole; public UpdateRoleEvent(Long group_id, String user_id, Role newRole) { super(group_id, user_id); @@ -24,10 +24,11 @@ public class UpdateRoleEvent extends Event { @Override public void applyEvent(Group group) throws UserNotFoundException { - if (!group.getRoles().containsKey(user_id)) { - throw new UserNotFoundException(); + if (group.getRoles().containsKey(user_id)) { + group.getRoles().put(this.user_id, this.newRole); } - group.getRoles().put(this.user_id, this.newRole); + + throw new UserNotFoundException(this.getClass().toString()); } } diff --git a/src/main/java/mops/gruppen2/service/ControllerService.java b/src/main/java/mops/gruppen2/service/ControllerService.java index 7f84660..9b8c0da 100644 --- a/src/main/java/mops/gruppen2/service/ControllerService.java +++ b/src/main/java/mops/gruppen2/service/ControllerService.java @@ -1,8 +1,7 @@ package mops.gruppen2.service; -import mops.gruppen2.domain.*; - import mops.gruppen2.domain.Exceptions.EventException; +import mops.gruppen2.domain.*; import mops.gruppen2.domain.event.*; import mops.gruppen2.security.Account; import org.springframework.stereotype.Service; @@ -47,12 +46,11 @@ public class ControllerService { 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()); addUser(account, group_id); updateTitle(account, group_id, title); updateDescription(account, group_id, description); - updateRole(user.getUser_id(), group_id); + updateRole(account.getName(), group_id); } private void createInviteLink(Long group_id) { diff --git a/src/main/java/mops/gruppen2/service/EventService.java b/src/main/java/mops/gruppen2/service/EventService.java index 7fd67e8..d5339dc 100644 --- a/src/main/java/mops/gruppen2/service/EventService.java +++ b/src/main/java/mops/gruppen2/service/EventService.java @@ -66,9 +66,11 @@ public class EventService { */ public Long checkGroup() { Long maxGroupID = eventStore.getMaxGroupID(); + if (maxGroupID == null) { return 1L; } + return maxGroupID + 1; } diff --git a/src/main/java/mops/gruppen2/service/GroupService.java b/src/main/java/mops/gruppen2/service/GroupService.java index ec3c4e6..94ff7cb 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; diff --git a/src/test/java/mops/gruppen2/service/SerializationServiceTest.java b/src/test/java/mops/gruppen2/service/SerializationServiceTest.java deleted file mode 100644 index d0070e1..0000000 --- a/src/test/java/mops/gruppen2/service/SerializationServiceTest.java +++ /dev/null @@ -1,30 +0,0 @@ -package mops.gruppen2.service; - -import com.fasterxml.jackson.core.JsonProcessingException; -import mops.gruppen2.domain.Role; -import mops.gruppen2.domain.event.*; -import mops.gruppen2.repository.EventRepository; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; - -class SerializationServiceTest { - - SerializationService serializationService; - - @BeforeEach - public void setUp() { - serializationService = new SerializationService(mock(EventRepository.class)); - } - - - @Test - void serializeEventTest() throws JsonProcessingException { - Event event = new Event(1L,"1"); - - assertThat(serializationService.serializeEvent(event)).isEqualTo("{\"type\":\"Event\",\"group_id\":1,\"user_id\":\"1\"}"); - } -} From 2ba913f2c8e0698da0a246e4ba80787d7ce51bac Mon Sep 17 00:00:00 2001 From: Christoph Date: Wed, 18 Mar 2020 20:18:03 +0100 Subject: [PATCH 03/13] 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 @@