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">
- - + + +
+
+ +

Mitglieder

+
+

+ + von maximal + + Benutzern. +

+
- +

diff --git a/src/main/resources/templates/editMembers.html b/src/main/resources/templates/editMembers.html index aff7bd5..bedf91a 100644 --- a/src/main/resources/templates/editMembers.html +++ b/src/main/resources/templates/editMembers.html @@ -36,7 +36,7 @@
-
+
- -
-
+ + +
diff --git a/src/test/java/mops/gruppen2/builder/EventBuilder.java b/src/test/java/mops/gruppen2/builder/EventBuilder.java index fa36457..38c392d 100644 --- a/src/test/java/mops/gruppen2/builder/EventBuilder.java +++ b/src/test/java/mops/gruppen2/builder/EventBuilder.java @@ -56,7 +56,8 @@ public class EventBuilder { faker.random().hex(), null, GroupType.SIMPLE, - Visibility.PRIVATE + Visibility.PRIVATE, + null ); } diff --git a/src/test/java/mops/gruppen2/domain/event/AddUserEventTest.java b/src/test/java/mops/gruppen2/domain/event/AddUserEventTest.java index 943dc54..d4ccbbf 100644 --- a/src/test/java/mops/gruppen2/domain/event/AddUserEventTest.java +++ b/src/test/java/mops/gruppen2/domain/event/AddUserEventTest.java @@ -16,6 +16,7 @@ class AddUserEventTest { Group group = new Group(); User user = new User("user1", "Stein", "Speck", "@sdasd"); group.getMembers().add(user); + group.setUserMaximum(10L); Event event1 = new AddUserEvent(4L, "user2", "Rock", "Roll", "and"); event1.apply(group); diff --git a/src/test/java/mops/gruppen2/service/EventServiceTest.java b/src/test/java/mops/gruppen2/service/EventServiceTest.java index bdec85f..4bf9601 100644 --- a/src/test/java/mops/gruppen2/service/EventServiceTest.java +++ b/src/test/java/mops/gruppen2/service/EventServiceTest.java @@ -56,7 +56,7 @@ class EventServiceTest { @Test void getDTOOffentlichTest() { - CreateGroupEvent createGroupEvent = new CreateGroupEvent(eventService.checkGroup(), "test", null, GroupType.LECTURE, Visibility.PUBLIC); + CreateGroupEvent createGroupEvent = new CreateGroupEvent(eventService.checkGroup(), "test", null, GroupType.LECTURE, Visibility.PUBLIC, null); EventDTO eventDTO = eventService.getDTO(createGroupEvent); assertTrue(eventDTO.isVisibility()); } diff --git a/src/test/java/mops/gruppen2/service/GroupServiceTest.java b/src/test/java/mops/gruppen2/service/GroupServiceTest.java index e6e0696..9aec529 100644 --- a/src/test/java/mops/gruppen2/service/GroupServiceTest.java +++ b/src/test/java/mops/gruppen2/service/GroupServiceTest.java @@ -27,9 +27,9 @@ class GroupServiceTest { @Test - void rightClassForSuccessfulGroup() throws Exception { + void rightClassForSuccessfulGroup() { List eventList = new ArrayList<>(); - eventList.add(new CreateGroupEvent(1L, "Prof", null, GroupType.LECTURE, Visibility.PRIVATE)); + eventList.add(new CreateGroupEvent(1L, "Prof", null, GroupType.LECTURE, Visibility.PRIVATE,1000L)); eventList.add(new AddUserEvent(1L, "Ulli", "Ulli", "Honnis", "FC@B.de")); List groups = groupService.projectEventList(eventList);