diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml index 4506630..4d3c76b 100644 --- a/config/checkstyle/checkstyle.xml +++ b/config/checkstyle/checkstyle.xml @@ -16,7 +16,7 @@ Authors: Max Vetrenko, Ruslan Diachenko, Roman Ivanov. --> - + @@ -30,7 +30,7 @@ + default="checkstyle-suppressions.xml"/> @@ -40,13 +40,15 @@ - - - - - + + + + + + + @@ -234,7 +236,7 @@ + SUPER_CTOR_CALL, ENUM_CONSTANT_DEF"/> + EXPR, LITERAL_CATCH, LITERAL_DO, LITERAL_FOR, LITERAL_IF, LITERAL_NEW, + LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_WHILE, METHOD_CALL, + METHOD_DEF, QUESTION, RESOURCE_SPECIFICATION, SUPER_CTOR_CALL, LAMBDA"/> + LT, MINUS, MOD, NOT_EQUAL, PLUS, QUESTION, SL, SR, STAR, METHOD_REF "/> @@ -284,14 +286,14 @@ - - - - - - + + + + + + - + @@ -307,7 +309,7 @@ + default="checkstyle-xpath-suppressions.xml"/> 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..d1f6382 100644 --- a/src/main/java/mops/gruppen2/controller/APIController.java +++ b/src/main/java/mops/gruppen2/controller/APIController.java @@ -3,17 +3,19 @@ package mops.gruppen2.controller; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; -import mops.gruppen2.domain.Exceptions.EventException; import mops.gruppen2.domain.Group; -import mops.gruppen2.domain.apiWrapper.UpdatedGroupRequestMapper; +import mops.gruppen2.domain.api.GroupRequestWrapper; import mops.gruppen2.domain.event.Event; -import mops.gruppen2.service.*; +import mops.gruppen2.domain.exception.EventException; +import mops.gruppen2.service.APIFormatterService; +import mops.gruppen2.service.EventService; +import mops.gruppen2.service.GroupService; 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; /** @@ -23,40 +25,37 @@ import java.util.List; @RequestMapping("/gruppen2/api") public class APIController { - private final SerializationService serializationService; private final EventService eventService; private final GroupService groupService; - public APIController(SerializationService serializationService, EventService eventService, GroupService groupService) { - this.serializationService = serializationService; + public APIController(EventService eventService, GroupService groupService) { this.eventService = eventService; this.groupService = groupService; } @GetMapping("/updateGroups/{status}") @Secured("ROLE_api_user") - @ApiOperation(value = "Gibt alle Gruppen zurück in denen sich etwas geändert hat") - public UpdatedGroupRequestMapper updateGroup(@ApiParam("Letzter Status des Anfragestellers") @PathVariable Long status) throws EventException { + @ApiOperation("Gibt alle Gruppen zurück in denen sich etwas geändert hat") + public GroupRequestWrapper updateGroup(@ApiParam("Letzter Status des Anfragestellers") @PathVariable Long status) throws EventException { List events = eventService.getNewEvents(status); - UpdatedGroupRequestMapper updatedGroupRequestMapper = APIFormatterService.wrapp(eventService.getMaxEvent_id(), groupService.projectEventList(events)); - return updatedGroupRequestMapper; + return APIFormatterService.wrap(eventService.getMaxEvent_id(), groupService.projectEventList(events)); } @GetMapping("/getGroupIdsOfUser/{teilnehmer}") @Secured("ROLE_api_user") - @ApiOperation(value = "Gibt alle Gruppen zurück in denen sich ein Teilnehmer befindet") - public List getGroupsOfUser(@ApiParam("Teilnehmer dessen groupIds zurückgegeben werden sollen") @PathVariable String teilnehmer) throws EventException { + @ApiOperation("Gibt alle Gruppen zurück in denen sich ein Teilnehmer befindet") + public List getGroupsOfUser(@ApiParam("Teilnehmer dessen groupIds zurückgegeben werden sollen") @PathVariable String teilnehmer) { return eventService.getGroupsOfUser(teilnehmer); } @GetMapping("/getGroup/{groupId}") @Secured("ROLE_api_user") - @ApiOperation(value = "Gibt die Gruppe mit der als Parameter mitgegebenden groupId zurück") + @ApiOperation("Gibt die Gruppe mit der als Parameter mitgegebenden groupId zurück") public Group getGroupFromId(@ApiParam("GruppenId der gefordeten Gruppe") @PathVariable Long groupId) throws EventException { List eventList = eventService.getEventsOfGroup(groupId); - List groups = groupService.projectEventList(eventList); + return groups.get(0); } diff --git a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java index 0b200d6..fa3354d 100644 --- a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java +++ b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java @@ -1,20 +1,30 @@ package mops.gruppen2.controller; import mops.gruppen2.config.Gruppen2Config; -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.exception.EventException; +import mops.gruppen2.domain.exception.GroupNotFoundException; import mops.gruppen2.security.Account; -import mops.gruppen2.service.*; +import mops.gruppen2.service.ControllerService; +import mops.gruppen2.service.CsvService; +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.http.HttpStatus; +import org.springframework.beans.factory.annotation.Autowired; 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,17 +35,16 @@ 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) { + 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; @@ -70,10 +79,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("title") String title, + @RequestParam("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,14 +97,14 @@ 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("group_id") Long groupId, @RequestParam(value = "file", required = false) MultipartFile file) throws IOException { List userList = new ArrayList<>(); if (!file.isEmpty()) { userList = CsvService.read(file.getInputStream()); } - controllerService.addUserList(userList, group_id); - return "redirect:/gruppen2/details/members/" + group_id; + controllerService.addUserList(userList, groupId); + return "redirect:/gruppen2/details/members/" + groupId; } @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) @@ -107,11 +116,11 @@ public class Gruppen2Controller { @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) @GetMapping("/findGroup") - public String findGroup(KeycloakAuthenticationToken token, Model model, @RequestParam(value = "suchbegriff", required = false) String suchbegriff) throws EventException { + public String findGroup(KeycloakAuthenticationToken token, Model model, @RequestParam(value = "suchbegriff", required = false) String search) throws EventException { Account account = keyCloakService.createAccountFromPrincipal(token); List groupse = new ArrayList<>(); - if (suchbegriff != null) { - groupse = groupService.findGroupWith(suchbegriff,account); + if (search != null) { + groupse = groupService.findGroupWith(search, account); } model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); model.addAttribute("gruppen", groupse); @@ -121,8 +130,8 @@ public class Gruppen2Controller { @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) @PostMapping("/createGroup") public String pCreateGroup(KeycloakAuthenticationToken token, - @RequestParam(value = "title") String title, - @RequestParam(value = "beschreibung") String beschreibung, + @RequestParam("title") String title, + @RequestParam("beschreibung") String beschreibung, @RequestParam(value = "visibility", required = false) Boolean visibility) throws EventException { Account account = keyCloakService.createAccountFromPrincipal(token); @@ -134,10 +143,9 @@ 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("id") Long groupId) throws EventException { model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); - Group group = userService.getGroupById(id); + Group group = userService.getGroupById(groupId); Account account = keyCloakService.createAccountFromPrincipal(token); User user = new User(account.getName(), account.getGivenname(), account.getFamilyname(), account.getEmail()); if (group != null) { @@ -147,31 +155,34 @@ public class Gruppen2Controller { model.addAttribute("admin", Role.ADMIN); return "detailsMember"; } - throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Group not found"); + + throw new GroupNotFoundException(this.getClass().toString()); } @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) @PostMapping("/detailsBeitreten") - public String joinGroup(KeycloakAuthenticationToken token, Model model, @RequestParam(value = "id") Long id) throws EventException { + public String joinGroup(KeycloakAuthenticationToken token, Model model, @RequestParam("id") Long groupId) 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()); - 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); + Account account = keyCloakService.createAccountFromPrincipal(token); + User user = new User(account.getName(), account.getGivenname(), account.getFamilyname(), account.getEmail()); + Group group = userService.getGroupById(groupId); + if (group.getMembers().contains(user)) { + return "error"; //hier soll eigentlich auf die bereits beigetretene Gruppe weitergeleitet werden + } + controllerService.addUser(account, groupId); return "redirect:/gruppen2/"; } @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) @GetMapping("/detailsSearch") - public String showGroupDetailsNoMember(KeycloakAuthenticationToken token, Model model, @RequestParam(value = "id") Long id) throws EventException { + public String showGroupDetailsNoMember(KeycloakAuthenticationToken token, Model model, @RequestParam("id") Long groupId) throws EventException { model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); - Group group = userService.getGroupById(id); + Group group = userService.getGroupById(groupId); if (group != null) { model.addAttribute("group", group); return "detailsNoMember"; } - throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Group not found"); + throw new GroupNotFoundException(this.getClass().toString()); } @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) @@ -183,24 +194,24 @@ 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(this.getClass().toString()); } @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("group_id") Long groupId) 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); + controllerService.deleteUser(user.getId(), groupId); return "redirect:/gruppen2/"; } @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("id") Long groupId) throws EventException { Account account = keyCloakService.createAccountFromPrincipal(token); - Group group = userService.getGroupById(id); - if(group.getRoles().get(account.getName()) == Role.ADMIN) { + Group group = userService.getGroupById(groupId); + if (group.getRoles().get(account.getName()) == Role.ADMIN) { model.addAttribute("account", account); model.addAttribute("members", group.getMembers()); model.addAttribute("group", group); @@ -213,22 +224,17 @@ 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 { - controllerService.updateRole(user_id, group_id); - return "redirect:/gruppen2/details/members/" + group_id; + public String changeRole(KeycloakAuthenticationToken token, @RequestParam("group_id") Long groupId, + @RequestParam("user_id") String userId) throws EventException { + controllerService.updateRole(userId, groupId); + return "redirect:/gruppen2/details/members/" + groupId; } @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 { - controllerService.deleteUser(user_id, group_id); - return "redirect:/gruppen2/details/members/" + group_id; - } - - @GetMapping("*") - public String defaultLink() { - return "errorRenameLater"; + public String deleteUser(KeycloakAuthenticationToken token, @RequestParam("group_id") Long groupId, + @RequestParam("user_id") String userId) throws EventException { + controllerService.deleteUser(userId, groupId); + return "redirect:/gruppen2/details/members/" + groupId; } } diff --git a/src/main/java/mops/gruppen2/controller/MopsController.java b/src/main/java/mops/gruppen2/controller/MopsController.java index 3e77224..f1027af 100644 --- a/src/main/java/mops/gruppen2/controller/MopsController.java +++ b/src/main/java/mops/gruppen2/controller/MopsController.java @@ -18,4 +18,9 @@ public class MopsController { request.logout(); return "redirect:/gruppen2/"; } + + @GetMapping("*") + public String defaultLink() { + return "error"; + } } diff --git a/src/main/java/mops/gruppen2/domain/Exceptions/EventException.java b/src/main/java/mops/gruppen2/domain/Exceptions/EventException.java deleted file mode 100644 index 20bb176..0000000 --- a/src/main/java/mops/gruppen2/domain/Exceptions/EventException.java +++ /dev/null @@ -1,14 +0,0 @@ -package mops.gruppen2.domain.Exceptions; - -public class EventException extends Exception { - private String msg; - - public EventException(String msg) { - this.msg = msg; - } - - @Override - public String getMessage() { - return msg; - } -} diff --git a/src/main/java/mops/gruppen2/domain/Exceptions/UserAlreadyExistsException.java b/src/main/java/mops/gruppen2/domain/Exceptions/UserAlreadyExistsException.java deleted file mode 100644 index 8896356..0000000 --- a/src/main/java/mops/gruppen2/domain/Exceptions/UserAlreadyExistsException.java +++ /dev/null @@ -1,7 +0,0 @@ -package mops.gruppen2.domain.Exceptions; - -public class UserAlreadyExistsException extends EventException { - 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 deleted file mode 100644 index f7e0080..0000000 --- a/src/main/java/mops/gruppen2/domain/Exceptions/UserNotFoundException.java +++ /dev/null @@ -1,7 +0,0 @@ -package mops.gruppen2.domain.Exceptions; - -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..89acc65 100644 --- a/src/main/java/mops/gruppen2/domain/Group.java +++ b/src/main/java/mops/gruppen2/domain/Group.java @@ -1,29 +1,25 @@ package mops.gruppen2.domain; -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. */ -@EqualsAndHashCode(callSuper = false) @Getter @Setter -@AllArgsConstructor public class Group { - private long id; - private String title; - private String description; + private final List members; private final Map roles; - + private Long id; + private String title; + private String description; private GroupType type; private Visibility visibility; private Long parent; 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/User.java b/src/main/java/mops/gruppen2/domain/User.java index 5e103ae..08ff119 100644 --- a/src/main/java/mops/gruppen2/domain/User.java +++ b/src/main/java/mops/gruppen2/domain/User.java @@ -1,17 +1,16 @@ package mops.gruppen2.domain; import lombok.AllArgsConstructor; -import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; +import lombok.Getter; -@Data +@Getter @AllArgsConstructor -@NoArgsConstructor @EqualsAndHashCode(exclude = {"givenname", "familyname", "email"}) public class User { - String user_id; - String givenname; - String familyname; - String email; + + private final String id; + private final String givenname; + private final String familyname; + private final String email; } diff --git a/src/main/java/mops/gruppen2/domain/api/GroupRequestWrapper.java b/src/main/java/mops/gruppen2/domain/api/GroupRequestWrapper.java new file mode 100644 index 0000000..9ea8eb6 --- /dev/null +++ b/src/main/java/mops/gruppen2/domain/api/GroupRequestWrapper.java @@ -0,0 +1,16 @@ +package mops.gruppen2.domain.api; + +import lombok.AllArgsConstructor; +import mops.gruppen2.domain.Group; + +import java.util.List; + +/** + * Kombiniert den Status und die Gruppenliste zur ausgabe über die API. + */ +@AllArgsConstructor +public class GroupRequestWrapper { + + private final Long status; + private final List groupList; +} diff --git a/src/main/java/mops/gruppen2/domain/apiWrapper/UpdatedGroupRequestMapper.java b/src/main/java/mops/gruppen2/domain/apiWrapper/UpdatedGroupRequestMapper.java deleted file mode 100644 index ca35f5b..0000000 --- a/src/main/java/mops/gruppen2/domain/apiWrapper/UpdatedGroupRequestMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -package mops.gruppen2.domain.apiWrapper; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import mops.gruppen2.domain.Group; - -import java.util.List; - -@Getter -@NoArgsConstructor -@AllArgsConstructor -public class UpdatedGroupRequestMapper { - private Long status; - private List groupList; -} \ 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..61945ec 100644 --- a/src/main/java/mops/gruppen2/domain/dto/EventDTO.java +++ b/src/main/java/mops/gruppen2/domain/dto/EventDTO.java @@ -1,12 +1,15 @@ package mops.gruppen2.domain.dto; -import lombok.Data; +import lombok.AllArgsConstructor; +import lombok.Getter; import org.springframework.data.annotation.Id; import org.springframework.data.relational.core.mapping.Table; @Table("event") -@Data +@Getter +@AllArgsConstructor 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..2b1e09c 100644 --- a/src/main/java/mops/gruppen2/domain/dto/InviteLinkDTO.java +++ b/src/main/java/mops/gruppen2/domain/dto/InviteLinkDTO.java @@ -1,14 +1,15 @@ package mops.gruppen2.domain.dto; import lombok.AllArgsConstructor; -import lombok.Data; +import lombok.Getter; import org.springframework.data.annotation.Id; import org.springframework.data.relational.core.mapping.Table; @Table("invite") -@Data +@Getter @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..09ca712 100644 --- a/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java @@ -3,38 +3,40 @@ package mops.gruppen2.domain.event; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; -import mops.gruppen2.domain.Exceptions.EventException; -import mops.gruppen2.domain.Exceptions.UserAlreadyExistsException; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.Role; import mops.gruppen2.domain.User; +import mops.gruppen2.domain.exception.EventException; +import mops.gruppen2.domain.exception.UserAlreadyExistsException; /** * Fügt einen einzelnen Nutzer einer Gruppe hinzu. */ @Getter @AllArgsConstructor -@NoArgsConstructor +@NoArgsConstructor // For Jackson public class AddUserEvent extends Event { - String givenname; - String familyname; - String email; - public AddUserEvent(Long group_id, String user_id, String givenname, String familyname, String email) { - super(group_id, user_id); + private String givenname; + private String familyname; + private String email; + + public AddUserEvent(Long groupId, String userId, String givenname, String familyname, String email) { + super(groupId, userId); this.givenname = givenname; this.familyname = familyname; this.email = email; } - public void apply(Group group) throws EventException{ - User user = new User(this.user_id, this.givenname, this.familyname, this.email); + @Override + public void applyEvent(Group group) throws EventException { + User user = new User(this.userId, 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(this.getClass().toString()); } group.getMembers().add(user); - group.getRoles().put(user_id, Role.MEMBER); + group.getRoles().put(userId, Role.MEMBER); } } diff --git a/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java b/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java index f5f49b1..ee750c9 100644 --- a/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java @@ -9,23 +9,23 @@ import mops.gruppen2.domain.Visibility; @Getter @AllArgsConstructor -@NoArgsConstructor +@NoArgsConstructor // For Jackson 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); + public CreateGroupEvent(Long groupId, String userId, Long parent, GroupType type, Visibility visibility) { + super(groupId, userId); this.groupParent = parent; this.groupType = type; this.groupVisibility = visibility; } - public void apply(Group group) { - group.setId(this.group_id); + @Override + public void applyEvent(Group group) { + group.setId(this.groupId); group.setParent(this.groupParent); group.setType(this.groupType); group.setVisibility(this.groupVisibility); diff --git a/src/main/java/mops/gruppen2/domain/event/DeleteGroupEvent.java b/src/main/java/mops/gruppen2/domain/event/DeleteGroupEvent.java index 4b8a6e3..c0234ef 100644 --- a/src/main/java/mops/gruppen2/domain/event/DeleteGroupEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/DeleteGroupEvent.java @@ -1,19 +1,19 @@ package mops.gruppen2.domain.event; -import lombok.EqualsAndHashCode; -import lombok.Value; +import lombok.Getter; +import lombok.NoArgsConstructor; import mops.gruppen2.domain.Group; -@EqualsAndHashCode(callSuper = true) -@Value +@Getter +@NoArgsConstructor // For Jackson public class DeleteGroupEvent extends Event { - public DeleteGroupEvent(long group_id, String user_id) { - super(group_id, user_id); + public DeleteGroupEvent(Long groupId, String userId) { + super(groupId, userId); } @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..4c473af 100644 --- a/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java @@ -1,30 +1,32 @@ package mops.gruppen2.domain.event; -import lombok.*; -import mops.gruppen2.domain.Exceptions.EventException; -import mops.gruppen2.domain.Exceptions.UserNotFoundException; +import lombok.Getter; +import lombok.NoArgsConstructor; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.User; -import mops.gruppen2.domain.Group; +import mops.gruppen2.domain.exception.EventException; +import mops.gruppen2.domain.exception.UserNotFoundException; /** * Entfernt ein einzelnes Mitglied einer Gruppe. */ @Getter -@NoArgsConstructor +@NoArgsConstructor // For Jackson public class DeleteUserEvent extends Event { - public DeleteUserEvent(Long group_id, String user_id) { - super(group_id, user_id); + + public DeleteUserEvent(Long groupId, String userId) { + super(groupId, userId); } - 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)) { + if (user.getId().equals(this.userId)) { group.getMembers().remove(user); - group.getRoles().remove(user.getUser_id()); + group.getRoles().remove(user.getId()); 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 17a00f9..dd1a886 100644 --- a/src/main/java/mops/gruppen2/domain/event/Event.java +++ b/src/main/java/mops/gruppen2/domain/event/Event.java @@ -5,33 +5,43 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; -import lombok.Setter; -import mops.gruppen2.domain.Exceptions.EventException; import mops.gruppen2.domain.Group; +import mops.gruppen2.domain.exception.EventException; +import mops.gruppen2.domain.exception.GroupIdMismatchException; -@Getter -@NoArgsConstructor -@AllArgsConstructor @JsonTypeInfo( - include = JsonTypeInfo.As.PROPERTY, use = JsonTypeInfo.Id.NAME, 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"), -}) -@Setter -public class Event { - Long group_id; - String user_id; + @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"), + }) +@Getter +@NoArgsConstructor +@AllArgsConstructor +public abstract class Event { + protected Long groupId; + protected String userId; public void apply(Group group) throws EventException { + checkGroupIdMatch(group.getId()); + applyEvent(group); + } + + protected abstract void applyEvent(Group group) throws EventException; + + private void checkGroupIdMatch(Long groupId) { + if (groupId == null || this.groupId.equals(groupId)) { + return; + } + + 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 83d4e88..bbf3f16 100644 --- a/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java @@ -4,22 +4,29 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import mops.gruppen2.domain.Group; +import mops.gruppen2.domain.exception.NoValueException; /** * Ändert nur die Gruppenbeschreibung. */ @Getter @AllArgsConstructor -@NoArgsConstructor +@NoArgsConstructor // For Jackson public class UpdateGroupDescriptionEvent extends Event { - String newGroupDescription; - public UpdateGroupDescriptionEvent(Long group_id, String user_id, String newGroupDescription) { - super(group_id, user_id); + private String newGroupDescription; + + public UpdateGroupDescriptionEvent(Long groupId, String userId, String newGroupDescription) { + super(groupId, userId); this.newGroupDescription = newGroupDescription; } - public void apply(Group group) { + @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 dffb13d..df835cb 100644 --- a/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java @@ -4,22 +4,29 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import mops.gruppen2.domain.Group; +import mops.gruppen2.domain.exception.NoValueException; /** * Ändert nur den Gruppentitel. */ @Getter @AllArgsConstructor -@NoArgsConstructor +@NoArgsConstructor // For Jackson public class UpdateGroupTitleEvent extends Event { - String newGroupTitle; - public UpdateGroupTitleEvent(Long group_id, String user_id, String newGroupTitle) { - super(group_id, user_id); + private String newGroupTitle; + + public UpdateGroupTitleEvent(Long groupId, String userId, String newGroupTitle) { + super(groupId, userId); this.newGroupTitle = newGroupTitle; } - public void apply(Group group) { + @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 eeea3d9..6ce1562 100644 --- a/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java @@ -1,34 +1,35 @@ package mops.gruppen2.domain.event; -import lombok.*; -import mops.gruppen2.domain.Exceptions.EventException; -import mops.gruppen2.domain.Exceptions.UserNotFoundException; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.Role; -import mops.gruppen2.domain.User; - -import java.util.Optional; +import mops.gruppen2.domain.exception.UserNotFoundException; /** * Aktualisiert die Gruppenrolle eines Teilnehmers. */ @Getter @AllArgsConstructor -@NoArgsConstructor +@NoArgsConstructor // For Jackson public class UpdateRoleEvent extends Event { - Role newRole; - - public UpdateRoleEvent(Long group_id, String user_id, Role newRole) { - super(group_id, user_id); + private Role newRole; + + public UpdateRoleEvent(Long groupId, String userId, Role newRole) { + super(groupId, userId); 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(this.userId)) { + group.getRoles().put(this.userId, this.newRole); + return; } - group.getRoles().put(this.user_id, this.newRole); + + throw new UserNotFoundException(this.getClass().toString()); } } diff --git a/src/main/java/mops/gruppen2/domain/exception/EventException.java b/src/main/java/mops/gruppen2/domain/exception/EventException.java new file mode 100644 index 0000000..3b6c609 --- /dev/null +++ b/src/main/java/mops/gruppen2/domain/exception/EventException.java @@ -0,0 +1,12 @@ +package mops.gruppen2.domain.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.server.ResponseStatusException; + +public abstract class EventException extends ResponseStatusException { + + public EventException(HttpStatus status, String msg, String info) { + super(status, msg + " (" + info + ")"); + } + +} diff --git a/src/main/java/mops/gruppen2/domain/exception/GroupIdMismatchException.java b/src/main/java/mops/gruppen2/domain/exception/GroupIdMismatchException.java new file mode 100644 index 0000000..67d0905 --- /dev/null +++ b/src/main/java/mops/gruppen2/domain/exception/GroupIdMismatchException.java @@ -0,0 +1,10 @@ +package mops.gruppen2.domain.exception; + +import org.springframework.http.HttpStatus; + +public class GroupIdMismatchException extends EventException { + + public GroupIdMismatchException(String info) { + super(HttpStatus.INTERNAL_SERVER_ERROR, "Falsche Gruppe für Event.", info); + } +} diff --git a/src/main/java/mops/gruppen2/domain/exception/GroupNotFoundException.java b/src/main/java/mops/gruppen2/domain/exception/GroupNotFoundException.java new file mode 100644 index 0000000..82a2dc7 --- /dev/null +++ b/src/main/java/mops/gruppen2/domain/exception/GroupNotFoundException.java @@ -0,0 +1,10 @@ +package mops.gruppen2.domain.exception; + +import org.springframework.http.HttpStatus; + +public class GroupNotFoundException extends EventException { + + public GroupNotFoundException(String info) { + super(HttpStatus.NOT_FOUND, "Gruppe wurde nicht gefunden.", info); + } +} diff --git a/src/main/java/mops/gruppen2/domain/exception/NoValueException.java b/src/main/java/mops/gruppen2/domain/exception/NoValueException.java new file mode 100644 index 0000000..f4e24fa --- /dev/null +++ b/src/main/java/mops/gruppen2/domain/exception/NoValueException.java @@ -0,0 +1,10 @@ +package mops.gruppen2.domain.exception; + +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/exception/UserAlreadyExistsException.java b/src/main/java/mops/gruppen2/domain/exception/UserAlreadyExistsException.java new file mode 100644 index 0000000..ba8b676 --- /dev/null +++ b/src/main/java/mops/gruppen2/domain/exception/UserAlreadyExistsException.java @@ -0,0 +1,10 @@ +package mops.gruppen2.domain.exception; + +import org.springframework.http.HttpStatus; + +public class UserAlreadyExistsException extends EventException { + + public UserAlreadyExistsException(String info) { + super(HttpStatus.INTERNAL_SERVER_ERROR, "Der User existiert bereits.", info); + } +} diff --git a/src/main/java/mops/gruppen2/domain/exception/UserNotFoundException.java b/src/main/java/mops/gruppen2/domain/exception/UserNotFoundException.java new file mode 100644 index 0000000..29209bd --- /dev/null +++ b/src/main/java/mops/gruppen2/domain/exception/UserNotFoundException.java @@ -0,0 +1,10 @@ +package mops.gruppen2.domain.exception; + +import org.springframework.http.HttpStatus; + +public class UserNotFoundException extends EventException { + + public UserNotFoundException(String info) { + super(HttpStatus.NOT_FOUND, "Der User wurde nicht gefunden.", info); + } +} diff --git a/src/main/java/mops/gruppen2/repository/EventRepository.java b/src/main/java/mops/gruppen2/repository/EventRepository.java index f328fdf..3cd122b 100644 --- a/src/main/java/mops/gruppen2/repository/EventRepository.java +++ b/src/main/java/mops/gruppen2/repository/EventRepository.java @@ -10,27 +10,28 @@ 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); + List findGroup_idsWhereUser_id(@Param("id") String userId); @Query("select * from event where group_id =:id") - List findEventDTOByGroup_id(@Param("id") Long group_id); + List findEventDTOByGroup_id(@Param("id") Long groupId); //@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); + List findNewEventSinceStatus(@Param("status") Long status); @Query("SELECT * FROM event WHERE group_id IN (:groupIds) ") - public List findAllEventsOfGroups(@Param("groupIds") List groupIds); + List findAllEventsOfGroups(@Param("groupIds") List groupIds); @Query("SELECT MAX(event_id) FROM event") - public Long getHighesEvent_ID(); + Long getHighesEvent_ID(); @Query("SELECT MAX(group_id) FROM event") - public Long getMaxGroupID(); + Long getMaxGroupID(); } diff --git a/src/main/java/mops/gruppen2/security/Account.java b/src/main/java/mops/gruppen2/security/Account.java index bb97a8d..b0466b2 100644 --- a/src/main/java/mops/gruppen2/security/Account.java +++ b/src/main/java/mops/gruppen2/security/Account.java @@ -1,16 +1,16 @@ package mops.gruppen2.security; -import java.util.Set; -import lombok.AllArgsConstructor; -import lombok.Getter; +import lombok.Value; -@Getter -@AllArgsConstructor +import java.util.Set; + +@Value public class Account { - private final String name; //user_id - private final String email; - private final String image; - private final String givenname; - private final String familyname; - private final Set roles; + + String name; //user_id + String email; + String image; + String givenname; + String familyname; + Set roles; } 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..745dcdf 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; @@ -48,7 +44,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 +57,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 +84,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..a279688 100644 --- a/src/main/java/mops/gruppen2/service/APIFormatterService.java +++ b/src/main/java/mops/gruppen2/service/APIFormatterService.java @@ -1,14 +1,15 @@ package mops.gruppen2.service; import mops.gruppen2.domain.Group; -import mops.gruppen2.domain.apiWrapper.UpdatedGroupRequestMapper; +import mops.gruppen2.domain.api.GroupRequestWrapper; import org.springframework.stereotype.Service; import java.util.List; @Service public class APIFormatterService { - static public UpdatedGroupRequestMapper wrapp(Long status, List groupList){ - return new UpdatedGroupRequestMapper(status, groupList); + + public static GroupRequestWrapper wrap(Long status, List groupList) { + return new GroupRequestWrapper(status, groupList); } } diff --git a/src/main/java/mops/gruppen2/service/ControllerService.java b/src/main/java/mops/gruppen2/service/ControllerService.java index b7f03f2..cd27a39 100644 --- a/src/main/java/mops/gruppen2/service/ControllerService.java +++ b/src/main/java/mops/gruppen2/service/ControllerService.java @@ -1,8 +1,19 @@ 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.domain.exception.EventException; +import mops.gruppen2.domain.exception.UserNotFoundException; import mops.gruppen2.security.Account; import org.springframework.stereotype.Service; @@ -23,89 +34,109 @@ 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(); + Long groupId = eventService.checkGroup(); if (visibility) { visibility1 = Visibility.PUBLIC; } else { visibility1 = Visibility.PRIVATE; - createInviteLink(group_id); + createInviteLink(groupId); } - CreateGroupEvent createGroupEvent = new CreateGroupEvent(group_id, account.getName(), null , GroupType.SIMPLE, visibility1); + CreateGroupEvent createGroupEvent = new CreateGroupEvent(groupId, 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); + addUser(account, groupId); + updateTitle(account, groupId, title); + updateDescription(account, groupId, description); + updateRole(account.getName(), groupId); } - private void createInviteLink(Long group_id) { - inviteLinkRepositoryService.saveInvite(group_id, UUID.randomUUID()); + private void createInviteLink(Long groupId) { + inviteLinkRepositoryService.saveInvite(groupId, UUID.randomUUID()); } - 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 groupId) { + AddUserEvent addUserEvent = new AddUserEvent(groupId, account.getName(), account.getGivenname(), account.getFamilyname(), account.getEmail()); eventService.saveEvent(addUserEvent); } - public void addUserList(List users, Long group_id) { + public void addUserList(List users, Long groupId) { for (User user : users) { - AddUserEvent addUserEvent = new AddUserEvent(group_id, user.getUser_id(), user.getGivenname(), user.getFamilyname(), user.getEmail()); + AddUserEvent addUserEvent = new AddUserEvent(groupId, user.getId(), user.getGivenname(), user.getFamilyname(), user.getEmail()); eventService.saveEvent(addUserEvent); } } - 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 groupId, String title) { + UpdateGroupTitleEvent updateGroupTitleEvent = new UpdateGroupTitleEvent(groupId, 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 groupId, String description) { + UpdateGroupDescriptionEvent updateGroupDescriptionEvent = new UpdateGroupDescriptionEvent(groupId, account.getName(), description); eventService.saveEvent(updateGroupDescriptionEvent); } - public void updateRole(String user_id, Long group_id) throws EventException { + public void updateRole(String userId, Long groupId) throws EventException { UpdateRoleEvent updateRoleEvent; - Group group = userService.getGroupById(group_id); + Group group = userService.getGroupById(groupId); User user = null; for (User member : group.getMembers()) { - if(member.getUser_id().equals(user_id)) user = member; + if (member.getId().equals(userId)) { + user = member; + } } - assert user != null; - if (group.getRoles().get(user.getUser_id()) == Role.ADMIN) { - updateRoleEvent = new UpdateRoleEvent(group_id, user.getUser_id(), Role.MEMBER); + + if (user == null) { + throw new UserNotFoundException(this.getClass().toString()); + } + + if (group.getRoles().get(user.getId()) == Role.ADMIN) { + updateRoleEvent = new UpdateRoleEvent(groupId, user.getId(), Role.MEMBER); } else { - updateRoleEvent = new UpdateRoleEvent(group_id, user.getUser_id(), Role.ADMIN); + updateRoleEvent = new UpdateRoleEvent(groupId, user.getId(), Role.ADMIN); } eventService.saveEvent(updateRoleEvent); } - public void deleteUser(String user_id, Long group_id) throws EventException { - Group group = userService.getGroupById(group_id); + public void deleteUser(String userId, Long groupId) throws EventException { + Group group = userService.getGroupById(groupId); User user = null; for (User member : group.getMembers()) { - if(member.getUser_id().equals(user_id)) user = member; + if (member.getId().equals(userId)) { + user = member; + } } - assert user != null; - DeleteUserEvent deleteUserEvent = new DeleteUserEvent(group_id, user.getUser_id()); + + if (user == null) { + throw new UserNotFoundException(this.getClass().toString()); + } + + DeleteUserEvent deleteUserEvent = new DeleteUserEvent(groupId, user.getId()); eventService.saveEvent(deleteUserEvent); } - public void deleteGroupEvent(User user, Long group_id) { - DeleteGroupEvent deleteGroupEvent = new DeleteGroupEvent(group_id, user.getUser_id()); + public void deleteGroupEvent(User user, Long groupId) { + DeleteGroupEvent deleteGroupEvent = new DeleteGroupEvent(groupId, user.getId()); eventService.saveEvent(deleteGroupEvent); } public void createLecture(Account account, String title, String description, Boolean visibility, List users) throws EventException { Visibility visibility1; - Long group_id = eventService.checkGroup(); + Long groupId = eventService.checkGroup(); if (visibility) { visibility1 = Visibility.PUBLIC; @@ -113,13 +144,13 @@ public class ControllerService { visibility1 = Visibility.PRIVATE; } - CreateGroupEvent createGroupEvent = new CreateGroupEvent(group_id, account.getName(), null, GroupType.LECTURE, visibility1); + CreateGroupEvent createGroupEvent = new CreateGroupEvent(groupId, account.getName(), null, GroupType.LECTURE, visibility1); eventService.saveEvent(createGroupEvent); - addUser(account, group_id); - updateTitle(account, group_id, title); - updateDescription(account, group_id, description); - updateRole(account.getName(), group_id); - addUserList(users, group_id); + addUser(account, groupId); + updateTitle(account, groupId, title); + updateDescription(account, groupId, description); + updateRole(account.getName(), groupId); + addUserList(users, groupId); } } diff --git a/src/main/java/mops/gruppen2/service/EventService.java b/src/main/java/mops/gruppen2/service/EventService.java index 7fd67e8..6e315d7 100644 --- a/src/main/java/mops/gruppen2/service/EventService.java +++ b/src/main/java/mops/gruppen2/service/EventService.java @@ -13,18 +13,19 @@ import java.util.List; @Service public class EventService { - private final SerializationService serializationService; + + private final JsonService jsonService; private final EventRepository eventStore; - public EventService(SerializationService serializationService, EventRepository eventStore) { - this.serializationService = serializationService; + public EventService(JsonService jsonService, EventRepository eventStore) { + this.jsonService = jsonService; this.eventStore = eventStore; } /** - * sichert ein Event Objekt indem es ein EventDTO Objekt erzeugt + * Erzeugt ein DTO aus einem Event und speicher es. * - * @param event + * @param event Event, welches gespeichert wird */ public void saveEvent(Event event) { EventDTO eventDTO = getDTO(event); @@ -35,48 +36,46 @@ public class EventService { * Erzeugt aus einem Event Objekt ein EventDTO Objekt. * Ist die Gruppe öffentlich, dann wird die visibility auf true gesetzt. * - * @param event - * @return EventDTO + * @param event Event, welches in DTO übersetzt wird + * @return EventDTO Neues DTO */ public EventDTO getDTO(Event event) { - EventDTO eventDTO = new EventDTO(); - eventDTO.setGroup_id(event.getGroup_id()); - eventDTO.setUser_id(event.getUser_id()); + boolean visibility = false; if (event instanceof CreateGroupEvent) { - if (((CreateGroupEvent) event).getGroupVisibility() == Visibility.PRIVATE) { - eventDTO.setVisibility(false); - } else { - eventDTO.setVisibility(true); - } + visibility = ((CreateGroupEvent) event).getGroupVisibility() == Visibility.PUBLIC; } + String payload = ""; try { - eventDTO.setEvent_payload(serializationService.serializeEvent(event)); + payload = jsonService.serializeEvent(event); } catch (JsonProcessingException e) { e.printStackTrace(); } - return eventDTO; + + return new EventDTO(null, event.getGroupId(), event.getUserId(), payload, visibility); } /** * Gibt die nächst höhere groupID zurück die belegt werden kann. * Gibt 1 zurück, falls keine Gruppe vorhanden ist. * - * @return Gibt Long zurück + * @return Long GruppenId */ public Long checkGroup() { Long maxGroupID = eventStore.getMaxGroupID(); + if (maxGroupID == null) { return 1L; } + return maxGroupID + 1; } /** - * Findet alle Events welche ab dem neuen Status hinzugekommen sind + * Findet alle Events welche ab dem neuen Status hinzugekommen sind. * - * @param status - * @return Liste von Events + * @param status Die Id des zuletzt gespeicherten Events + * @return Liste von neueren Events */ public List getNewEvents(Long status) { List groupIdsThatChanged = eventStore.findNewEventSinceStatus(status); @@ -86,9 +85,9 @@ public class EventService { } /** - * Erzeugt aus einer Liste von eventDTOs eine Liste von Events + * Erzeugt aus einer Liste von eventDTOs eine Liste von Events. * - * @param eventDTOS + * @param eventDTOS Liste von DTOs * @return Liste von Events */ public List translateEventDTOs(Iterable eventDTOS) { @@ -96,7 +95,7 @@ public class EventService { for (EventDTO eventDTO : eventDTOS) { try { - events.add(serializationService.deserializeEvent(eventDTO.getEvent_payload())); + events.add(jsonService.deserializeEvent(eventDTO.getEvent_payload())); } catch (JsonProcessingException e) { e.printStackTrace(); } @@ -105,12 +104,12 @@ public class EventService { } /** - * Sichert eine Liste von Event Objekten mithilfe der Methode saveEvent(Event event) + * Sichert eine Liste von Event Objekten mithilfe der Methode saveEvent(Event event). * - * @param createGroupEvents Liste von Event Objekten + * @param eventList Liste von Event Objekten */ - public void saveEventList(List createGroupEvents) { - for (Event event : createGroupEvents) { + public void saveEventList(List eventList) { + for (Event event : eventList) { saveEvent(event); } } diff --git a/src/main/java/mops/gruppen2/service/GroupService.java b/src/main/java/mops/gruppen2/service/GroupService.java index ec3c4e6..3b3ff54 100644 --- a/src/main/java/mops/gruppen2/service/GroupService.java +++ b/src/main/java/mops/gruppen2/service/GroupService.java @@ -1,10 +1,9 @@ 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.domain.exception.EventException; import mops.gruppen2.repository.EventRepository; import mops.gruppen2.security.Account; import org.springframework.stereotype.Service; @@ -25,86 +24,82 @@ 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 - * @return + * @param groupIds Liste an IDs + * @return Liste an Events */ - public List getGroupEvents(List group_ids) { + public List getGroupEvents(List groupIds) { List eventDTOS = new ArrayList<>(); - for (Long group_id: group_ids) { - eventDTOS.addAll(eventRepository.findEventDTOByGroup_id(group_id)); + for (Long groupId : groupIds) { + eventDTOS.addAll(eventRepository.findEventDTOByGroup_id(groupId)); } 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 - * @throws EventException + * @param events Liste an Events + * @return Liste an Projizierten Gruppen + * @throws EventException Projektionsfehler */ public List projectEventList(List events) throws EventException { Map groupMap = new HashMap<>(); for (Event event : events) { - Group group = getOrCreateGroup(groupMap, event.getGroup_id()); + Group group = getOrCreateGroup(groupMap, event.getGroupId()); event.apply(group); } 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 + private Group getOrCreateGroup(Map groups, long groupId) { + if (!groups.containsKey(groupId)) { + groups.put(groupId, new Group()); + } + + return groups.get(groupId); + } + + private List removeUserGroups(List groupIds, List userGroups) { + for (Long groupId : userGroups) { + groupIds.remove(groupId); + } + return groupIds; + } + + /** + * Sucht alle Zeilen in der DB mit visibility=true. + * Erstellt eine Liste aus öffentlichen Gruppen (ohen bereits beigetretenen Gruppen). * - * @param groups - * @param group_id - * @return + * @return Liste von projizierten Gruppen + * @throws EventException Projektionsfehler */ - private Group getOrCreateGroup(Map groups, long group_id) { - if (!groups.containsKey(group_id)) { - groups.put(group_id, new Group()); - } - - return groups.get(group_id); - } - - private List removeUserGroups(List group_ids, List user_groups) { - for (Long group_id: user_groups) { - group_ids.remove(group_id); - } - return group_ids; - } - - /** - * 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 - */ - public List getAllGroupWithVisibilityPublic(String user_id) throws EventException { - List group_ids = removeUserGroups(eventRepository.findGroup_idsWhereVisibility(Boolean.TRUE), eventRepository.findGroup_idsWhereUser_id(user_id)); - List eventDTOS = eventRepository.findAllEventsOfGroups(group_ids); + public List getAllGroupWithVisibilityPublic(String userId) throws EventException { + List groupIds = removeUserGroups(eventRepository.findGroup_idsWhereVisibility(Boolean.TRUE), eventRepository.findGroup_idsWhereUser_id(userId)); + List eventDTOS = eventRepository.findAllEventsOfGroups(groupIds); List events = eventService.translateEventDTOs(eventDTOS); - List groups = projectEventList(events); - return groups; + return projectEventList(events); } /** - * 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 + * Filtert alle öffentliche Gruppen nach dem Suchbegriff und gibt diese als Liste von Gruppen zurück. + * Groß und Kleinschreibung wird nicht beachtet. + * + * @param search Der Suchstring + * @return Liste von projizierten Gruppen + * @throws EventException Projektionsfehler */ 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/InviteLinkRepositoryService.java b/src/main/java/mops/gruppen2/service/InviteLinkRepositoryService.java index 4bc082d..e46e521 100644 --- a/src/main/java/mops/gruppen2/service/InviteLinkRepositoryService.java +++ b/src/main/java/mops/gruppen2/service/InviteLinkRepositoryService.java @@ -19,8 +19,8 @@ public class InviteLinkRepositoryService { return inviteLinkRepository.findGroupIdByLink(link); } - public void saveInvite(Long group_id, UUID link) { - inviteLinkRepository.save(new InviteLinkDTO(null, group_id, link.toString())); + public void saveInvite(Long groupId, UUID link) { + inviteLinkRepository.save(new InviteLinkDTO(null, groupId, link.toString())); } } diff --git a/src/main/java/mops/gruppen2/service/SerializationService.java b/src/main/java/mops/gruppen2/service/JsonService.java similarity index 71% rename from src/main/java/mops/gruppen2/service/SerializationService.java rename to src/main/java/mops/gruppen2/service/JsonService.java index 3c7f8ba..b5c4730 100644 --- a/src/main/java/mops/gruppen2/service/SerializationService.java +++ b/src/main/java/mops/gruppen2/service/JsonService.java @@ -3,32 +3,22 @@ package mops.gruppen2.service; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import mops.gruppen2.domain.event.Event; -import mops.gruppen2.repository.EventRepository; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; /** * Übersetzt JSON-Event-Payloads zu Java-Event-Repräsentationen und zurück. */ @Service -public class SerializationService { - - private final EventRepository eventStore; - private final Logger log = LoggerFactory.getLogger(SerializationService.class); - - public SerializationService(EventRepository eventStore) { - this.eventStore = eventStore; - } +public class JsonService { /** * Übersetzt mithilfe der Jackson-Library eine Java-Event-Repräsentation zu einem JSON-Event-Payload. * * @param event Java-Event-Repräsentation * @return JSON-Event-Payload als String - * @throws JsonProcessingException + * @throws JsonProcessingException Bei JSON Fehler */ - + public String serializeEvent(Event event) throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); return mapper.writeValueAsString(event); @@ -39,7 +29,7 @@ public class SerializationService { * * @param json JSON-Event-Payload als String * @return Java-Event-Repräsentation - * @throws JsonProcessingException + * @throws JsonProcessingException Bei JSON Fehler */ public Event deserializeEvent(String json) throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); diff --git a/src/main/java/mops/gruppen2/service/UserService.java b/src/main/java/mops/gruppen2/service/UserService.java index 74a9ca4..498fa86 100644 --- a/src/main/java/mops/gruppen2/service/UserService.java +++ b/src/main/java/mops/gruppen2/service/UserService.java @@ -1,20 +1,22 @@ package mops.gruppen2.service; -import mops.gruppen2.domain.Exceptions.EventException; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.User; import mops.gruppen2.domain.event.Event; +import mops.gruppen2.domain.exception.EventException; +import mops.gruppen2.domain.exception.GroupNotFoundException; import mops.gruppen2.repository.EventRepository; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; + //Hallo @Service public class UserService { - final EventRepository eventRepository; - final GroupService groupService; + private final EventRepository eventRepository; + private final GroupService groupService; public UserService(EventRepository eventRepository, GroupService groupService) { this.eventRepository = eventRepository; @@ -24,22 +26,27 @@ public class UserService { //Test nötig?? public List getUserGroups(User user) throws EventException { - List group_ids = eventRepository.findGroup_idsWhereUser_id(user.getUser_id()); - List events = groupService.getGroupEvents(group_ids); + List groupIds = eventRepository.findGroup_idsWhereUser_id(user.getId()); + List events = groupService.getGroupEvents(groupIds); 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); } } return newGroups; } - 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); + public Group getGroupById(Long groupId) throws EventException { + List groupIds = new ArrayList<>(); + groupIds.add(groupId); + + try { + List events = groupService.getGroupEvents(groupIds); + return groupService.projectEventList(events).get(0); + } catch (IndexOutOfBoundsException e) { + throw new GroupNotFoundException(this.getClass().toString()); + } } } diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties index ee53a97..716d81c 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,6 @@ 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 +keycloak.confidential-port=443 +server.error.include-stacktrace=always 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..03436d8 100644 --- a/src/main/resources/templates/detailsMember.html +++ b/src/main/resources/templates/detailsMember.html @@ -1,6 +1,7 @@ - + Gruppendetails @@ -13,16 +14,16 @@ @@ -30,33 +31,43 @@
    -
    +

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



    -

    Mitglieder

    -
    -
    -
    @@ -65,10 +76,12 @@
    -
      -
    • - - admin +
        +
      • + + admin
    @@ -77,4 +90,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..edca787 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 @@