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/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 a394758..66b0895 100644 --- a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java +++ b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java @@ -6,13 +6,23 @@ 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.exception.EventException; 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.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; @@ -27,14 +37,13 @@ import java.util.List; @RequestMapping("/gruppen2") public class Gruppen2Controller { - @Autowired - Gruppen2Config gruppen2Config; - private final KeyCloakService keyCloakService; private final GroupService groupService; private final UserService userService; private final ControllerService controllerService; private final InviteLinkRepositoryService inviteLinkRepositoryService; + @Autowired + Gruppen2Config gruppen2Config; public Gruppen2Controller(KeyCloakService keyCloakService, GroupService groupService, UserService userService, ControllerService controllerService, InviteLinkRepositoryService inviteLinkRepositoryService) { this.keyCloakService = keyCloakService; @@ -72,19 +81,34 @@ 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") 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 = CsvService.read(file.getInputStream()); + List userList = new ArrayList<>(); + if (!file.isEmpty()) { + userList = CsvService.read(file.getInputStream()); + } visibility = visibility == null; controllerService.createLecture(account, title, beschreibung, visibility, userList); return "redirect:/gruppen2/"; } + @RolesAllowed({"ROLE_orga", "ROLE_actuator)"}) + @PostMapping("/details/members/addUsersFromCsv") + 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, groupId); + return "redirect:/gruppen2/details/members/" + groupId; + } + @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) @GetMapping("/createGroup") public String createGroup(KeycloakAuthenticationToken token, Model model) { @@ -94,11 +118,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); @@ -108,8 +132,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); @@ -121,10 +145,10 @@ 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, ResponseStatusException { 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) { @@ -140,21 +164,23 @@ public class Gruppen2Controller { @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 "errorRenameLater"; //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"; @@ -176,19 +202,20 @@ 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("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); model.addAttribute("admin", Role.ADMIN); @@ -200,22 +227,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 "error"; + 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..8e04634 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 "errorRenameLater"; + } } diff --git a/src/main/java/mops/gruppen2/domain/Group.java b/src/main/java/mops/gruppen2/domain/Group.java index d0fa90c..89acc65 100644 --- a/src/main/java/mops/gruppen2/domain/Group.java +++ b/src/main/java/mops/gruppen2/domain/Group.java @@ -1,7 +1,5 @@ package mops.gruppen2.domain; -import lombok.AllArgsConstructor; -import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; @@ -13,17 +11,15 @@ import java.util.Map; /** * Repräsentiert den aggregierten Zustand einer Gruppe. */ -@EqualsAndHashCode(callSuper = false) @Getter @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..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..92d5753 100644 --- a/src/main/java/mops/gruppen2/domain/dto/EventDTO.java +++ b/src/main/java/mops/gruppen2/domain/dto/EventDTO.java @@ -1,12 +1,13 @@ package mops.gruppen2.domain.dto; -import lombok.Data; +import lombok.Value; import org.springframework.data.annotation.Id; import org.springframework.data.relational.core.mapping.Table; @Table("event") -@Data +@Value 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..65216f9 100644 --- a/src/main/java/mops/gruppen2/domain/dto/InviteLinkDTO.java +++ b/src/main/java/mops/gruppen2/domain/dto/InviteLinkDTO.java @@ -1,14 +1,14 @@ package mops.gruppen2.domain.dto; -import lombok.AllArgsConstructor; -import lombok.Data; +import lombok.Value; import org.springframework.data.annotation.Id; import org.springframework.data.relational.core.mapping.Table; +@SuppressWarnings("checkstyle:membername") @Table("invite") -@Data -@AllArgsConstructor +@Value 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 e515df3..09ca712 100644 --- a/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java @@ -3,26 +3,26 @@ 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 { 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); + public AddUserEvent(Long groupId, String userId, String givenname, String familyname, String email) { + super(groupId, userId); this.givenname = givenname; this.familyname = familyname; this.email = email; @@ -30,13 +30,13 @@ public class AddUserEvent extends Event { @Override public void applyEvent(Group group) throws EventException { - User user = new User(this.user_id, this.givenname, this.familyname, this.email); + User user = new User(this.userId, this.givenname, this.familyname, this.email); 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 e385b8b..fc8be5b 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; } @Override - public void applyEvent(Group group) { - group.setId(this.group_id); + public void apply(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 0640d8d..c0234ef 100644 --- a/src/main/java/mops/gruppen2/domain/event/DeleteGroupEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/DeleteGroupEvent.java @@ -1,15 +1,15 @@ 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 diff --git a/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java b/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java index 89d4600..4c473af 100644 --- a/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java @@ -2,28 +2,28 @@ package mops.gruppen2.domain.event; 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.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); } @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; } } diff --git a/src/main/java/mops/gruppen2/domain/event/Event.java b/src/main/java/mops/gruppen2/domain/event/Event.java index b2a820d..19c8473 100644 --- a/src/main/java/mops/gruppen2/domain/event/Event.java +++ b/src/main/java/mops/gruppen2/domain/event/Event.java @@ -5,32 +5,29 @@ 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.Exceptions.GroupIdMismatchException; import mops.gruppen2.domain.Group; +import mops.gruppen2.domain.exception.EventException; + @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"), -}) + @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 -@Setter -@NoArgsConstructor // Needed by Lombok in Subclasses +@NoArgsConstructor @AllArgsConstructor public abstract class Event { - protected Long group_id; - protected String user_id; + protected Long groupId; + protected String userId; public void apply(Group group) throws EventException { checkGroupIdMatch(group.getId()); @@ -39,8 +36,8 @@ public abstract class Event { protected abstract void applyEvent(Group group) throws EventException; - private void checkGroupIdMatch(Long group_id) { - if (group_id == null || this.group_id.equals(group_id)) { + private void checkGroupIdMatch(Long groupId) { + if (groupId == null || this.group_id.equals(groupId)) { return; } diff --git a/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java b/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java index 64739d6..714c8ad 100644 --- a/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java @@ -11,13 +11,13 @@ import mops.gruppen2.domain.Group; */ @Getter @AllArgsConstructor -@NoArgsConstructor +@NoArgsConstructor // For Jackson public class UpdateGroupDescriptionEvent extends Event { private String newGroupDescription; - public UpdateGroupDescriptionEvent(Long group_id, String user_id, String newGroupDescription) { - super(group_id, user_id); + public UpdateGroupDescriptionEvent(Long groupId, String userId, String newGroupDescription) { + super(groupId, userId); this.newGroupDescription = newGroupDescription; } diff --git a/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java b/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java index 876feec..8e39867 100644 --- a/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java @@ -11,13 +11,13 @@ import mops.gruppen2.domain.Group; */ @Getter @AllArgsConstructor -@NoArgsConstructor +@NoArgsConstructor // For Jackson public class UpdateGroupTitleEvent extends Event { private String newGroupTitle; - public UpdateGroupTitleEvent(Long group_id, String user_id, String newGroupTitle) { - super(group_id, user_id); + public UpdateGroupTitleEvent(Long groupId, String userId, String newGroupTitle) { + super(groupId, userId); this.newGroupTitle = newGroupTitle; } diff --git a/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java b/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java index 292e27f..cef22bb 100644 --- a/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java @@ -3,29 +3,28 @@ package mops.gruppen2.domain.event; 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.exception.UserNotFoundException; /** * Aktualisiert die Gruppenrolle eines Teilnehmers. */ @Getter @AllArgsConstructor -@NoArgsConstructor +@NoArgsConstructor // For Jackson public class UpdateRoleEvent extends Event { private Role newRole; - public UpdateRoleEvent(Long group_id, String user_id, Role newRole) { - super(group_id, user_id); + public UpdateRoleEvent(Long groupId, String userId, Role newRole) { + super(groupId, userId); this.newRole = newRole; } - @Override public void applyEvent(Group group) throws UserNotFoundException { - if (group.getRoles().containsKey(user_id)) { - group.getRoles().put(this.user_id, this.newRole); + if (group.getRoles().containsKey(this.userId)) { + group.getRoles().put(this.userId, this.newRole); } throw new UserNotFoundException(this.getClass().toString()); diff --git a/src/main/java/mops/gruppen2/domain/Exceptions/EventException.java b/src/main/java/mops/gruppen2/domain/exception/EventException.java similarity index 88% rename from src/main/java/mops/gruppen2/domain/Exceptions/EventException.java rename to src/main/java/mops/gruppen2/domain/exception/EventException.java index 7570f2a..3b6c609 100644 --- a/src/main/java/mops/gruppen2/domain/Exceptions/EventException.java +++ b/src/main/java/mops/gruppen2/domain/exception/EventException.java @@ -1,4 +1,4 @@ -package mops.gruppen2.domain.Exceptions; +package mops.gruppen2.domain.exception; import org.springframework.http.HttpStatus; import org.springframework.web.server.ResponseStatusException; diff --git a/src/main/java/mops/gruppen2/domain/Exceptions/GroupIdMismatchException.java b/src/main/java/mops/gruppen2/domain/exception/GroupIdMismatchException.java similarity index 100% rename from src/main/java/mops/gruppen2/domain/Exceptions/GroupIdMismatchException.java rename to src/main/java/mops/gruppen2/domain/exception/GroupIdMismatchException.java diff --git a/src/main/java/mops/gruppen2/domain/Exceptions/GroupNotFoundException.java b/src/main/java/mops/gruppen2/domain/exception/GroupNotFoundException.java similarity index 100% rename from src/main/java/mops/gruppen2/domain/Exceptions/GroupNotFoundException.java rename to src/main/java/mops/gruppen2/domain/exception/GroupNotFoundException.java diff --git a/src/main/java/mops/gruppen2/domain/Exceptions/NoValueException.java b/src/main/java/mops/gruppen2/domain/exception/NoValueException.java similarity index 100% rename from src/main/java/mops/gruppen2/domain/Exceptions/NoValueException.java rename to src/main/java/mops/gruppen2/domain/exception/NoValueException.java 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..d189424 --- /dev/null +++ b/src/main/java/mops/gruppen2/domain/exception/UserAlreadyExistsException.java @@ -0,0 +1,8 @@ +package mops.gruppen2.domain.exception; + +public class UserAlreadyExistsException extends EventException { + + public UserAlreadyExistsException(String msg) { + super(msg); + } +} 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..84a434e --- /dev/null +++ b/src/main/java/mops/gruppen2/domain/exception/UserNotFoundException.java @@ -0,0 +1,8 @@ +package mops.gruppen2.domain.exception; + +public class UserNotFoundException extends EventException { + + public UserNotFoundException(String msg) { + super(msg); + } +} 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..6ba8dc4 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 email; + String image; + String name; //user_id + 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 df96dd7..745dcdf 100644 --- a/src/main/java/mops/gruppen2/security/SecurityConfig.java +++ b/src/main/java/mops/gruppen2/security/SecurityConfig.java @@ -44,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 @@ -57,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(); @@ -84,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 9b8c0da..aa22940 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.Exceptions.EventException; -import mops.gruppen2.domain.*; -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.security.Account; import org.springframework.stereotype.Service; @@ -14,7 +24,6 @@ import java.util.UUID; public class ControllerService { private final EventService eventService; - private final UserService userService; private final InviteLinkRepositoryService inviteLinkRepositoryService; @@ -35,86 +44,90 @@ public class ControllerService { */ 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) { + 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); - addUser(account, group_id); - updateTitle(account, group_id, title); - updateDescription(account, group_id, description); - updateRole(account.getName(), 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 (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()); + 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; @@ -122,14 +135,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 d5339dc..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,34 +36,30 @@ 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(); @@ -75,10 +72,10 @@ public class EventService { } /** - * 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); @@ -88,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) { @@ -98,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(); } @@ -107,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 94ff7cb..3b3ff54 100644 --- a/src/main/java/mops/gruppen2/service/GroupService.java +++ b/src/main/java/mops/gruppen2/service/GroupService.java @@ -1,9 +1,9 @@ package mops.gruppen2.service; -import mops.gruppen2.domain.Exceptions.EventException; import mops.gruppen2.domain.Group; 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; @@ -24,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 681b3c6..29037e7 100644 --- a/src/main/java/mops/gruppen2/service/UserService.java +++ b/src/main/java/mops/gruppen2/service/UserService.java @@ -1,21 +1,21 @@ 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; +import mops.gruppen2.domain.exception.EventException; 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; @@ -25,27 +25,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); + public Group getGroupById(Long groupId) throws EventException { + List groupIds = new ArrayList<>(); + group_ids.add(groupId); try { - List events = groupService.getGroupEvents(group_ids); + List events = groupService.getGroupEvents(groupIds); return groupService.projectEventList(events).get(0); } catch (IndexOutOfBoundsException e) { - throw new GroupNotFoundException("Gruppe nicht gefunden"); + throw new GroupNotFoundException(this.getClass().toString()); } } } diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties index bc79d39..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,7 +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 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 e6fb1e5..04be706 100644 --- a/src/main/resources/templates/createLecture.html +++ b/src/main/resources/templates/createLecture.html @@ -7,6 +7,11 @@ Gruppenerstellung + + + + @@ -33,38 +38,56 @@

    Veranstaltung erstellen

    -
    -
    +
    +
    - +
    - +
    - - + +
    -
    +
    - - + +
    - +
    + - \ No newline at end of file + diff --git a/src/main/resources/templates/detailsMember.html b/src/main/resources/templates/detailsMember.html index a45d005..1dbb75f 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,46 +31,57 @@
    - -
    -

    -

    - Private Gruppe - Öffentliche Gruppe - Veranstaltung -

    -
    -
    -

    -
    -
    - +
    +

    +

    + Private Gruppe + Öffentliche Gruppe + Veranstaltung +

    +
    +
    +

    +
    +
    +

    Mitglieder

    -
    -
    - +
    + +


    -
      -
    • +
        +
      • - admin + admin
    @@ -78,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 afd346c..5d5684a 100644 --- a/src/main/resources/templates/detailsNoMember.html +++ b/src/main/resources/templates/detailsNoMember.html @@ -31,27 +31,38 @@
    -
    -

    -

    - Private Gruppe - Öffentliche Gruppe - Veranstaltung -

    +
    +

    +

    + Private Gruppe + Öffentliche Gruppe + Veranstaltung +

    -

    +

    -
    -
    -
    - -
    -
    +
    +
    +
    + +
    +
    - \ No newline at end of file + diff --git a/src/main/resources/templates/editMembers.html b/src/main/resources/templates/editMembers.html index 1fbed6c..515fd20 100644 --- a/src/main/resources/templates/editMembers.html +++ b/src/main/resources/templates/editMembers.html @@ -6,6 +6,11 @@ Gruppendetails + + + + @@ -21,6 +26,9 @@
  • Suche
  • +
  • + Veranstaltung +
  • @@ -29,6 +37,31 @@
    + +
    +
    +
    +
    +
    + + +
    +
    +
    + +
    +
    +
    +
    @@ -39,32 +72,47 @@ - - - - - + + + + +
    - Mitglied - Admin - -
    - - - -
    -
    - - - -
    -
    + Mitglied + Admin + +
    + + + +
    +
    + + + +
    +
    -
    + diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 5d51236..cf38815 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -10,23 +10,23 @@
    - +
    @@ -36,19 +36,23 @@

    Mitglied in - - Gruppe. - Gruppen. + + Gruppe. + Gruppen.


    -

    - +

    -

    +


    @@ -59,4 +63,4 @@
    - \ No newline at end of file + diff --git a/src/main/resources/templates/search.html b/src/main/resources/templates/search.html index 3a8918f..0d41f05 100644 --- a/src/main/resources/templates/search.html +++ b/src/main/resources/templates/search.html @@ -36,29 +36,37 @@
    - +
    - +

    - - - - - + + + + + - - - - - + + + + +
    GruppennameBeschreibungMitgliederanzahl
    GruppennameBeschreibungMitgliederanzahl
    - Gruppenname - BeschreibungMitgliederanzahl
    + Gruppenname + + Beschreibung + Mitgliederanzahl
    @@ -66,4 +74,4 @@ - \ No newline at end of file + diff --git a/src/test/java/mops/gruppen2/architecture/ControllerTest.java b/src/test/java/mops/gruppen2/architecture/ControllerTest.java index 238fa7a..c954cce 100644 --- a/src/test/java/mops/gruppen2/architecture/ControllerTest.java +++ b/src/test/java/mops/gruppen2/architecture/ControllerTest.java @@ -5,13 +5,12 @@ import com.tngtech.archunit.junit.AnalyzeClasses; import com.tngtech.archunit.junit.ArchTest; import com.tngtech.archunit.lang.ArchRule; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes; import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses; -@AnalyzeClasses(packages = "mops.gruppen2", importOptions = { ImportOption.DoNotIncludeTests.class }) +@AnalyzeClasses(packages = "mops.gruppen2", importOptions = ImportOption.DoNotIncludeTests.class) public class ControllerTest { @ArchTest diff --git a/src/test/java/mops/gruppen2/architecture/DomainTest.java b/src/test/java/mops/gruppen2/architecture/DomainTest.java index 7340f80..279ba11 100644 --- a/src/test/java/mops/gruppen2/architecture/DomainTest.java +++ b/src/test/java/mops/gruppen2/architecture/DomainTest.java @@ -2,14 +2,13 @@ package mops.gruppen2.architecture; import com.tngtech.archunit.core.importer.ImportOption; import com.tngtech.archunit.junit.AnalyzeClasses; -import com.tngtech.archunit.junit.ArchIgnore; import com.tngtech.archunit.junit.ArchTest; import com.tngtech.archunit.lang.ArchRule; import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes; import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses; -@AnalyzeClasses(packages = "mops.gruppen2", importOptions = { ImportOption.DoNotIncludeTests.class }) +@AnalyzeClasses(packages = "mops.gruppen2", importOptions = ImportOption.DoNotIncludeTests.class) public class DomainTest { @ArchTest @@ -30,11 +29,11 @@ public class DomainTest { @ArchTest public static final ArchRule exceptionClassesShouldBeInExceptionPackage = classes() .that().haveSimpleNameEndingWith("Exception") - .should().resideInAPackage("..domain.Exceptions.."); + .should().resideInAPackage("..domain.exception.."); @ArchTest public static final ArchRule classesInExceptionPackageShouldHaveExceptionInName = classes() - .that().resideInAPackage("..domain.Exceptions..") + .that().resideInAPackage("..domain.exception..") .should().haveSimpleNameEndingWith("Exception"); @ArchTest diff --git a/src/test/java/mops/gruppen2/architecture/LayeredArchitectureTest.java b/src/test/java/mops/gruppen2/architecture/LayeredArchitectureTest.java index fbd0f48..fca3740 100644 --- a/src/test/java/mops/gruppen2/architecture/LayeredArchitectureTest.java +++ b/src/test/java/mops/gruppen2/architecture/LayeredArchitectureTest.java @@ -6,10 +6,10 @@ import com.tngtech.archunit.junit.ArchTest; import com.tngtech.archunit.lang.ArchRule; import com.tngtech.archunit.library.Architectures; -@AnalyzeClasses(packages = "mops.gruppen2", importOptions = { ImportOption.DoNotIncludeTests.class }) +@AnalyzeClasses(packages = "mops.gruppen2", importOptions = ImportOption.DoNotIncludeTests.class) public class LayeredArchitectureTest { - private static Architectures.LayeredArchitecture layeredArchitecture = Architectures + private static final Architectures.LayeredArchitecture layeredArchitecture = Architectures .layeredArchitecture() .layer("Domain").definedBy("..domain..") .layer("Service").definedBy("..service") diff --git a/src/test/java/mops/gruppen2/architecture/RepositoryTest.java b/src/test/java/mops/gruppen2/architecture/RepositoryTest.java index 81f86ee..946da19 100644 --- a/src/test/java/mops/gruppen2/architecture/RepositoryTest.java +++ b/src/test/java/mops/gruppen2/architecture/RepositoryTest.java @@ -9,7 +9,7 @@ import org.springframework.stereotype.Repository; import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes; -@AnalyzeClasses(packages = "mops.gruppen2", importOptions = { ImportOption.DoNotIncludeTests.class }) +@AnalyzeClasses(packages = "mops.gruppen2", importOptions = ImportOption.DoNotIncludeTests.class) public class RepositoryTest { @ArchTest diff --git a/src/test/java/mops/gruppen2/architecture/ServiceTest.java b/src/test/java/mops/gruppen2/architecture/ServiceTest.java index 2e65dee..716e8a0 100644 --- a/src/test/java/mops/gruppen2/architecture/ServiceTest.java +++ b/src/test/java/mops/gruppen2/architecture/ServiceTest.java @@ -8,7 +8,7 @@ import org.springframework.stereotype.Service; import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes; -@AnalyzeClasses(packages = "mops.gruppen2", importOptions = { ImportOption.DoNotIncludeTests.class }) +@AnalyzeClasses(packages = "mops.gruppen2", importOptions = ImportOption.DoNotIncludeTests.class) public class ServiceTest { @ArchTest diff --git a/src/test/java/mops/gruppen2/builder/EventBuilder.java b/src/test/java/mops/gruppen2/builder/EventBuilder.java index 8fd2952..fa36457 100644 --- a/src/test/java/mops/gruppen2/builder/EventBuilder.java +++ b/src/test/java/mops/gruppen2/builder/EventBuilder.java @@ -1,8 +1,18 @@ package mops.gruppen2.builder; import com.github.javafaker.Faker; -import mops.gruppen2.domain.*; -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.DeleteUserEvent; +import mops.gruppen2.domain.event.Event; +import mops.gruppen2.domain.event.UpdateGroupDescriptionEvent; +import mops.gruppen2.domain.event.UpdateGroupTitleEvent; +import mops.gruppen2.domain.event.UpdateRoleEvent; import java.util.ArrayList; import java.util.List; @@ -10,39 +20,39 @@ import java.util.List; public class EventBuilder { /** - * Generiert ein EventLog mit mehreren Gruppen nud Usern + * Generiert ein EventLog mit mehreren Gruppen nud Usern. * - * @param count Gruppenanzahl + * @param count Gruppenanzahl * @param membercount Gesamte Mitgliederanzahl - * @return + * @return Eventliste */ public static List completeGroups(int count, int membercount) { List eventList = new ArrayList<>(); for (int i = 1; i <= count; i++) { - eventList.addAll(EventBuilder.completeGroup(i, membercount / count)); + eventList.addAll(completeGroup(i, membercount / count)); } return eventList; } - public static List completeGroup(long group_id, int membercount) { + public static List completeGroup(long groupId, int membercount) { List eventList = new ArrayList<>(); - eventList.add(EventBuilder.createGroupEvent(group_id)); - eventList.add(EventBuilder.updateGroupTitleEvent(group_id)); - eventList.add(EventBuilder.updateGroupDescriptionEvent(group_id)); + eventList.add(createGroupEvent(groupId)); + eventList.add(updateGroupTitleEvent(groupId)); + eventList.add(updateGroupDescriptionEvent(groupId)); - eventList.addAll(EventBuilder.addUserEvents(membercount, group_id)); + eventList.addAll(addUserEvents(membercount, groupId)); return eventList; } - public static CreateGroupEvent createGroupEvent(long group_id) { + public static CreateGroupEvent createGroupEvent(long groupId) { Faker faker = new Faker(); return new CreateGroupEvent( - group_id, + groupId, faker.random().hex(), null, GroupType.SIMPLE, @@ -51,10 +61,10 @@ public class EventBuilder { } /** - * Generiert mehrere CreateGroupEvents, 1 <= group_id <= count + * Generiert mehrere CreateGroupEvents, 1 <= groupId <= count. * - * @param count Anzahl der verschiedenen Gruppen. - * @return + * @param count Anzahl der verschiedenen Gruppen + * @return Eventliste */ public static List createGroupEvents(int count) { List eventList = new ArrayList<>(); @@ -66,15 +76,15 @@ public class EventBuilder { return eventList; } - public static AddUserEvent addUserEvent(long group_id, String user_id) { + public static AddUserEvent addUserEvent(long groupId, String userId) { Faker faker = new Faker(); String firstname = faker.name().firstName(); String lastname = faker.name().lastName(); return new AddUserEvent( - group_id, - user_id, + groupId, + userId, firstname, lastname, firstname + "." + lastname + "@mail.de" @@ -82,73 +92,69 @@ public class EventBuilder { } /** - * Generiert mehrere AddUserEvents für eine Gruppe, 1 <= user_id <= count + * Generiert mehrere AddUserEvents für eine Gruppe, 1 <= user_id <= count. * - * @param count - * @param group_id - * @return + * @param count Anzahl der Mitglieder + * @param groupId Gruppe, zu welcher geaddet wird + * @return Eventliste */ - public static List addUserEvents(int count, long group_id) { + public static List addUserEvents(int count, long groupId) { List eventList = new ArrayList<>(); for (int i = 1; i <= count; i++) { - eventList.add(EventBuilder.addUserEvent(group_id, "" + i)); + eventList.add(addUserEvent(groupId, String.valueOf(i))); } return eventList; } - public static DeleteUserEvent deleteUserEvent(long group_id, String user_id) { - Faker faker = new Faker(); - + public static DeleteUserEvent deleteUserEvent(long groupId, String userId) { return new DeleteUserEvent( - group_id, - user_id + groupId, + userId ); } /** - * Erzeugt mehrere DeleteUserEvents, sodass eine Gruppe komplett geleert wird + * Erzeugt mehrere DeleteUserEvents, sodass eine Gruppe komplett geleert wird. * * @param group Gruppe welche geleert wird - * @return + * @return Eventliste */ public static List deleteUserEvents(Group group) { List eventList = new ArrayList<>(); for (User user : group.getMembers()) { - eventList.add(EventBuilder.deleteUserEvent(group.getId(), user.getUser_id())); + eventList.add(deleteUserEvent(group.getId(), user.getId())); } return eventList; } - public static UpdateGroupDescriptionEvent updateGroupDescriptionEvent(long group_id) { + public static UpdateGroupDescriptionEvent updateGroupDescriptionEvent(long groupId) { Faker faker = new Faker(); return new UpdateGroupDescriptionEvent( - group_id, + groupId, faker.random().hex(), faker.leagueOfLegends().quote() ); } - public static UpdateGroupTitleEvent updateGroupTitleEvent(long group_id) { + public static UpdateGroupTitleEvent updateGroupTitleEvent(long groupId) { Faker faker = new Faker(); return new UpdateGroupTitleEvent( - group_id, + groupId, faker.random().hex(), faker.leagueOfLegends().champion() ); } - public static UpdateRoleEvent randomUpdateRoleEvent(long group_id, String user_id, Role role) { - Faker faker = new Faker(); - + public static UpdateRoleEvent randomUpdateRoleEvent(long groupId, String userId, Role role) { return new UpdateRoleEvent( - group_id, - user_id, + groupId, + userId, role ); } diff --git a/src/test/java/mops/gruppen2/domain/GroupTest.java b/src/test/java/mops/gruppen2/domain/GroupTest.java index 1f3cba3..2c7e475 100644 --- a/src/test/java/mops/gruppen2/domain/GroupTest.java +++ b/src/test/java/mops/gruppen2/domain/GroupTest.java @@ -1,18 +1,5 @@ package mops.gruppen2.domain; -import mops.gruppen2.domain.Exceptions.UserAlreadyExistsException; -import mops.gruppen2.domain.Exceptions.UserNotFoundException; -import mops.gruppen2.domain.event.*; -import org.junit.jupiter.api.Assertions; -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.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; - - class GroupTest { /* @BeforeEach diff --git a/src/test/java/mops/gruppen2/domain/event/AddUserEventTest.java b/src/test/java/mops/gruppen2/domain/event/AddUserEventTest.java index 649166f..943dc54 100644 --- a/src/test/java/mops/gruppen2/domain/event/AddUserEventTest.java +++ b/src/test/java/mops/gruppen2/domain/event/AddUserEventTest.java @@ -1,35 +1,31 @@ package mops.gruppen2.domain.event; -import mops.gruppen2.domain.Exceptions.EventException; -import mops.gruppen2.domain.Exceptions.UserAlreadyExistsException; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.User; +import mops.gruppen2.domain.exception.EventException; +import mops.gruppen2.domain.exception.UserAlreadyExistsException; import org.junit.jupiter.api.Test; -import static mops.gruppen2.domain.Role.MEMBER; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertThrows; class AddUserEventTest { @Test - public void userAllreadyExistExeption() throws EventException { + void userAlreadyExistExeption() throws EventException { Group group = new Group(); - - User user = new User("user1","Stein", "Speck", "@sdasd"); - + User user = new User("user1", "Stein", "Speck", "@sdasd"); group.getMembers().add(user); - Event event1 = new AddUserEvent(4L, "user2", "Rock", "Roll", "and"); event1.apply(group); Event event2 = new AddUserEvent(4L, "user1", "Rock", "Roll", "and"); - assertThrows(UserAlreadyExistsException.class, ()-> + assertThrows(UserAlreadyExistsException.class, () -> event2.apply(group) - ); + ); assertThat(group.getMembers().size()).isEqualTo(2); } -} \ No newline at end of file +} diff --git a/src/test/java/mops/gruppen2/domain/event/DeleteUserEventTest.java b/src/test/java/mops/gruppen2/domain/event/DeleteUserEventTest.java index 6f3c67a..2ef1599 100644 --- a/src/test/java/mops/gruppen2/domain/event/DeleteUserEventTest.java +++ b/src/test/java/mops/gruppen2/domain/event/DeleteUserEventTest.java @@ -1,34 +1,28 @@ package mops.gruppen2.domain.event; -import mops.gruppen2.domain.Exceptions.EventException; -import mops.gruppen2.domain.Exceptions.UserAlreadyExistsException; -import mops.gruppen2.domain.Exceptions.UserNotFoundException; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.User; +import mops.gruppen2.domain.exception.EventException; +import mops.gruppen2.domain.exception.UserNotFoundException; import org.junit.jupiter.api.Test; import static mops.gruppen2.domain.Role.MEMBER; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertThrows; class DeleteUserEventTest { @Test void applyDeleteUser() throws EventException { Group group = new Group(); - - User user = new User("user1","Stein", "Speck", "@sdasd"); - + User user = new User("user1", "Stein", "Speck", "@sdasd"); group.getMembers().add(user); group.getRoles().put("user1", MEMBER); - - User user2 = new User("user2","Rock", "Roll", "and"); - + User user2 = new User("user2", "Rock", "Roll", "and"); group.getMembers().add(user2); group.getRoles().put("user2", MEMBER); Event event = new DeleteUserEvent(1L, "user1"); - event.apply(group); assertThat(group.getMembers().size()).isEqualTo(1); @@ -39,18 +33,14 @@ class DeleteUserEventTest { @Test void userDoesNotExistExeption() { Group group = new Group(); - - User user = new User("user1","Stein", "Speck", "@sdasd"); - + User user = new User("user1", "Stein", "Speck", "@sdasd"); group.getMembers().add(user); group.getRoles().put("user1", MEMBER); - Event event = new DeleteUserEvent(17L,"user5"); - - assertThrows(UserNotFoundException.class, ()-> + Event event = new DeleteUserEvent(17L, "user5"); + assertThrows(UserNotFoundException.class, () -> event.apply(group) ); - assertThat(group.getMembers().size()).isEqualTo(1); } -} \ No newline at end of file +} diff --git a/src/test/java/mops/gruppen2/service/EventServiceTest.java b/src/test/java/mops/gruppen2/service/EventServiceTest.java index c0cedb0..bdec85f 100644 --- a/src/test/java/mops/gruppen2/service/EventServiceTest.java +++ b/src/test/java/mops/gruppen2/service/EventServiceTest.java @@ -15,29 +15,33 @@ import java.util.ArrayList; import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) class EventServiceTest { - EventService eventService; - EventRepository eventRepositoryMock = mock(EventRepository.class); + + private EventRepository eventRepository; + private EventService eventService; @BeforeEach void setUp() { - eventService = new EventService(mock(SerializationService.class), eventRepositoryMock); + eventRepository = mock(EventRepository.class); + eventService = new EventService(mock(JsonService.class), eventRepository); } @Test void getMaxID() { - when(eventRepositoryMock.getHighesEvent_ID()).thenReturn(42L); + when(eventRepository.getHighesEvent_ID()).thenReturn(42L); assertEquals(eventService.getMaxEvent_id(), 42L); } @Test void checkGroupReturnNextValue() { - when(eventRepositoryMock.getMaxGroupID()).thenReturn(2L); + when(eventRepository.getMaxGroupID()).thenReturn(2L); assertEquals(eventService.checkGroup(), 3L); } @@ -45,7 +49,7 @@ class EventServiceTest { @Test void checkGroupReturnOneIfDBIsEmpty() { List eventDTOS = new ArrayList<>(); - when(eventRepositoryMock.findAll()).thenReturn(eventDTOS); + when(eventRepository.findAll()).thenReturn(eventDTOS); assertEquals(eventService.checkGroup(), 1); } @@ -54,14 +58,14 @@ class EventServiceTest { void getDTOOffentlichTest() { CreateGroupEvent createGroupEvent = new CreateGroupEvent(eventService.checkGroup(), "test", null, GroupType.LECTURE, Visibility.PUBLIC); EventDTO eventDTO = eventService.getDTO(createGroupEvent); - assertEquals(eventDTO.isVisibility(), true); + assertTrue(eventDTO.isVisibility()); } @Test void getDTOPrivatTest() { AddUserEvent addUserEvent = new AddUserEvent(eventService.checkGroup(), "test", "franz", "mueller", "a@a"); EventDTO eventDTO = eventService.getDTO(addUserEvent); - assertEquals(eventDTO.isVisibility(), false); + assertFalse(eventDTO.isVisibility()); } } diff --git a/src/test/java/mops/gruppen2/service/GroupServiceTest.java b/src/test/java/mops/gruppen2/service/GroupServiceTest.java index c67a227..e6e0696 100644 --- a/src/test/java/mops/gruppen2/service/GroupServiceTest.java +++ b/src/test/java/mops/gruppen2/service/GroupServiceTest.java @@ -5,12 +5,9 @@ import mops.gruppen2.domain.GroupType; import mops.gruppen2.domain.Visibility; import mops.gruppen2.domain.event.AddUserEvent; import mops.gruppen2.domain.event.CreateGroupEvent; -import mops.gruppen2.domain.event.DeleteGroupEvent; import mops.gruppen2.domain.event.Event; import mops.gruppen2.repository.EventRepository; -import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import java.util.ArrayList; @@ -20,23 +17,23 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; class GroupServiceTest { - GroupService groupService; - EventRepository eventRepository; + + private GroupService groupService; @BeforeEach - public void setUp() { - groupService = new GroupService(mock(EventService.class), eventRepository); + void setUp() { + groupService = new GroupService(mock(EventService.class), mock(EventRepository.class)); } @Test - void rightClassForSucsessfulGroup() throws Exception { + void rightClassForSuccessfulGroup() throws Exception { List eventList = new ArrayList<>(); - eventList.add(new CreateGroupEvent(1L, "Prof", null, GroupType.LECTURE, Visibility.PRIVATE)); - eventList.add(new AddUserEvent(1L, "Ulli", "Ulli", "Honnis", "FC@B.de")); - assertThat(groupService.projectEventList(eventList).get(0)).isInstanceOf(Group.class); + List groups = groupService.projectEventList(eventList); + + assertThat(groups.get(0)).isInstanceOf(Group.class); } -} \ No newline at end of file +}