diff --git a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java index 49cf570..aa663c1 100644 --- a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java +++ b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java @@ -131,12 +131,13 @@ public class Gruppen2Controller { @PostMapping("/createGroup") public String pCreateGroup(KeycloakAuthenticationToken token, @RequestParam("title") String title, - @RequestParam("beschreibung") String beschreibung, - @RequestParam(value = "visibility", required = false) Boolean visibility) throws EventException { + @RequestParam("description") String description, + @RequestParam(value = "visibility", required = false) Boolean visibility, + @RequestParam("userMaximum") Long userMaximum) throws EventException { Account account = keyCloakService.createAccountFromPrincipal(token); visibility = visibility == null; - controllerService.createGroup(account, title, beschreibung, visibility); + controllerService.createGroup(account, title, description, visibility, userMaximum); return "redirect:/gruppen2/"; } @@ -170,6 +171,7 @@ public class Gruppen2Controller { if (group.getMembers().contains(user)) { return "error"; //hier soll eigentlich auf die bereits beigetretene Gruppe weitergeleitet werden } + if (group.getUserMaximum() < group.getMembers().size()) return "error"; controllerService.addUser(account, groupId); return "redirect:/gruppen2/"; } @@ -179,7 +181,7 @@ public class Gruppen2Controller { public String showGroupDetailsNoMember(KeycloakAuthenticationToken token, Model model, @RequestParam("id") Long groupId) throws EventException { model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); Group group = userService.getGroupById(groupId); - if (group != null) { + if (group != null && group.getUserMaximum() > group.getMembers().size()) { model.addAttribute("group", group); return "detailsNoMember"; } diff --git a/src/main/java/mops/gruppen2/domain/Group.java b/src/main/java/mops/gruppen2/domain/Group.java index 89acc65..71b2eeb 100644 --- a/src/main/java/mops/gruppen2/domain/Group.java +++ b/src/main/java/mops/gruppen2/domain/Group.java @@ -20,6 +20,7 @@ public class Group { private Long id; private String title; private String description; + private Long userMaximum; private GroupType type; private Visibility visibility; private Long parent; diff --git a/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java b/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java index 09ca712..9491355 100644 --- a/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java @@ -7,6 +7,7 @@ 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.GroupFullException; import mops.gruppen2.domain.exception.UserAlreadyExistsException; /** @@ -35,6 +36,10 @@ public class AddUserEvent extends Event { if (group.getMembers().contains(user)) { throw new UserAlreadyExistsException(this.getClass().toString()); } + //andere exception + if (group.getMembers().size() == group.getUserMaximum()){ + throw new GroupFullException(this.getClass().toString()); + } group.getMembers().add(user); 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 ee750c9..f2e23f3 100644 --- a/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java @@ -15,12 +15,14 @@ public class CreateGroupEvent extends Event { private Visibility groupVisibility; private Long groupParent; private GroupType groupType; + private Long groupUserMaximum; - public CreateGroupEvent(Long groupId, String userId, Long parent, GroupType type, Visibility visibility) { + public CreateGroupEvent(Long groupId, String userId, Long parent, GroupType type, Visibility visibility, Long userMaximum) { super(groupId, userId); this.groupParent = parent; this.groupType = type; this.groupVisibility = visibility; + this.groupUserMaximum = userMaximum; } @Override @@ -29,5 +31,6 @@ public class CreateGroupEvent extends Event { group.setParent(this.groupParent); group.setType(this.groupType); group.setVisibility(this.groupVisibility); + group.setUserMaximum(this.groupUserMaximum); } } diff --git a/src/main/java/mops/gruppen2/domain/exception/GroupFullException.java b/src/main/java/mops/gruppen2/domain/exception/GroupFullException.java new file mode 100644 index 0000000..1fb1509 --- /dev/null +++ b/src/main/java/mops/gruppen2/domain/exception/GroupFullException.java @@ -0,0 +1,11 @@ +package mops.gruppen2.domain.exception; + +import org.springframework.http.HttpStatus; + +public class GroupFullException extends EventException { + + public GroupFullException(String info) { + super(HttpStatus.INTERNAL_SERVER_ERROR, "Der User existiert bereits.", info); + } +} + diff --git a/src/main/java/mops/gruppen2/service/ControllerService.java b/src/main/java/mops/gruppen2/service/ControllerService.java index cd27a39..81ce51a 100644 --- a/src/main/java/mops/gruppen2/service/ControllerService.java +++ b/src/main/java/mops/gruppen2/service/ControllerService.java @@ -43,7 +43,7 @@ public class ControllerService { * @param title Gruppentitel * @param description Gruppenbeschreibung */ - public void createGroup(Account account, String title, String description, Boolean visibility) throws EventException { + public void createGroup(Account account, String title, String description, Boolean visibility, Long userMaximum) throws EventException { Visibility visibility1; Long groupId = eventService.checkGroup(); @@ -54,7 +54,7 @@ public class ControllerService { createInviteLink(groupId); } - CreateGroupEvent createGroupEvent = new CreateGroupEvent(groupId, account.getName(), null, GroupType.SIMPLE, visibility1); + CreateGroupEvent createGroupEvent = new CreateGroupEvent(groupId, account.getName(), null, GroupType.SIMPLE, visibility1, userMaximum); eventService.saveEvent(createGroupEvent); addUser(account, groupId); @@ -144,7 +144,7 @@ public class ControllerService { visibility1 = Visibility.PRIVATE; } - CreateGroupEvent createGroupEvent = new CreateGroupEvent(groupId, account.getName(), null, GroupType.LECTURE, visibility1); + CreateGroupEvent createGroupEvent = new CreateGroupEvent(groupId, account.getName(), null, GroupType.LECTURE, visibility1, 1000L); //this has to be changed also Usermaximum eventService.saveEvent(createGroupEvent); addUser(account, groupId); diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql new file mode 100644 index 0000000..edf2d94 --- /dev/null +++ b/src/main/resources/data.sql @@ -0,0 +1,6 @@ +insert into event values +(1,1,'orga','{"type":"CreateGroupEvent","groupId":1,"userId":"orga","groupVisibility":"PUBLIC","groupParent":null,"groupType":"SIMPLE","groupUserMaximum":2}', TRUE), +(2,1,'orga','{"type":"AddUserEvent","groupId":1,"userId":"orga","givenname":"orga","familyname":"orga","email":"blorga@orga.org"}', FALSE), +(3,1,'orga','{"type":"UpdateGroupTitleEvent","groupId":1,"userId":"orga","newGroupTitle":"sdsad"}', FALSE), +(4,1,'orga','{"type":"UpdateGroupDescriptionEvent","groupId":1,"userId":"orga","newGroupDescription":"sadsad"}', FALSE), +(5,1,'orga','{"type":"UpdateRoleEvent","groupId":1,"userId":"orga","newRole":"ADMIN"}', FALSE); \ No newline at end of file diff --git a/src/main/resources/templates/create.html b/src/main/resources/templates/create.html index 663f4a2..65901cf 100644 --- a/src/main/resources/templates/create.html +++ b/src/main/resources/templates/create.html @@ -42,9 +42,14 @@ type="text">