1

change memberlist to map, introduce wrappertypes for title, description, limit for easy validation

This commit is contained in:
Christoph
2020-04-12 23:53:14 +02:00
parent cc29119b68
commit 58c38554b5
58 changed files with 291 additions and 510 deletions

1
lombok.config Normal file
View File

@ -0,0 +1 @@
lombok.anyConstructor.addConstructorProperties = true

View File

@ -1,7 +0,0 @@
package mops.gruppen2.domain;
public enum GroupType {
PUBLIC,
PRIVATE,
LECTURE
}

View File

@ -1,6 +0,0 @@
package mops.gruppen2.domain;
public enum Limit {
INFINITE,
LOCKED
}

View File

@ -1,23 +1,18 @@
package mops.gruppen2.domain.event; package mops.gruppen2.domain.event;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString; import lombok.ToString;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
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.EventException;
import mops.gruppen2.domain.exception.GroupFullException; import mops.gruppen2.domain.helper.ValidationHelper;
import mops.gruppen2.domain.exception.UserAlreadyExistsException; import mops.gruppen2.domain.model.Group;
import mops.gruppen2.domain.model.Role;
import java.util.UUID; import mops.gruppen2.domain.model.User;
/** /**
* Fügt einen einzelnen Nutzer einer Gruppe hinzu. * Fügt einen einzelnen Nutzer einer Gruppe hinzu.
*/ */
@Getter @Getter
@NoArgsConstructor // For Jackson
@ToString @ToString
@Log4j2 @Log4j2
public class AddUserEvent extends Event { public class AddUserEvent extends Event {
@ -26,12 +21,7 @@ public class AddUserEvent extends Event {
private String familyname; private String familyname;
private String email; private String email;
public AddUserEvent(UUID groupId, String userId, String givenname, String familyname, String email) { private AddUserEvent() {}
super(groupId, userId);
this.givenname = givenname;
this.familyname = familyname;
this.email = email;
}
public AddUserEvent(Group group, User user) { public AddUserEvent(Group group, User user) {
super(group.getId(), user.getId()); super(group.getId(), user.getId());
@ -42,17 +32,10 @@ public class AddUserEvent extends Event {
@Override @Override
protected void applyEvent(Group group) throws EventException { protected void applyEvent(Group group) throws EventException {
User user = new User(userId, givenname, familyname, email); ValidationHelper.throwIfMember(group, new User(userId));
ValidationHelper.throwIfGroupFull(group);
if (group.getMembers().contains(user)) { group.getMembers().put(userId, new User(userId, givenname, familyname, email));
throw new UserAlreadyExistsException(getClass().toString());
}
if (group.getMembers().size() >= group.getUserLimit()) {
throw new GroupFullException(getClass().toString());
}
group.getMembers().add(user);
group.getRoles().put(userId, Role.MEMBER); group.getRoles().put(userId, Role.MEMBER);
log.trace("\t\t\t\t\tNeue Members: {}", group.getMembers()); log.trace("\t\t\t\t\tNeue Members: {}", group.getMembers());

View File

@ -1,34 +1,34 @@
package mops.gruppen2.domain.event; package mops.gruppen2.domain.event;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString; import lombok.ToString;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import mops.gruppen2.domain.Group; import mops.gruppen2.domain.model.Group;
import mops.gruppen2.domain.GroupType; import mops.gruppen2.domain.model.Type;
import java.util.UUID; import java.util.UUID;
@Getter @Getter
@NoArgsConstructor // For Jackson
@ToString @ToString
@Log4j2 @Log4j2
public class CreateGroupEvent extends Event { public class CreateGroupEvent extends Event {
private UUID groupParent; private UUID groupParent;
private GroupType groupType; private Type type;
public CreateGroupEvent(UUID groupId, String userId, UUID parent, GroupType type) { private CreateGroupEvent() {}
public CreateGroupEvent(UUID groupId, String userId, UUID parent, Type type) {
super(groupId, userId); super(groupId, userId);
groupParent = parent; groupParent = parent;
groupType = type; this.type = type;
} }
@Override @Override
protected void applyEvent(Group group) { protected void applyEvent(Group group) {
group.setId(groupId); group.setId(groupId);
group.setParent(groupParent); group.setParent(groupParent);
group.setType(groupType); group.setType(type);
log.trace("\t\t\t\t\tNeue Gruppe: {}", group.toString()); log.trace("\t\t\t\t\tNeue Gruppe: {}", group.toString());
} }

View File

@ -1,23 +1,17 @@
package mops.gruppen2.domain.event; package mops.gruppen2.domain.event;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString; import lombok.ToString;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import mops.gruppen2.domain.Group; import mops.gruppen2.domain.model.Group;
import mops.gruppen2.domain.User; import mops.gruppen2.domain.model.User;
import java.util.UUID;
@Getter @Getter
@NoArgsConstructor // For Jackson
@ToString @ToString
@Log4j2 @Log4j2
public class DeleteGroupEvent extends Event { public class DeleteGroupEvent extends Event {
public DeleteGroupEvent(UUID groupId, String userId) { private DeleteGroupEvent() {}
super(groupId, userId);
}
public DeleteGroupEvent(Group group, User user) { public DeleteGroupEvent(Group group, User user) {
super(group.getId(), user.getId()); super(group.getId(), user.getId());
@ -31,7 +25,7 @@ public class DeleteGroupEvent extends Event {
group.setDescription(null); group.setDescription(null);
group.setType(null); group.setType(null);
group.setParent(null); group.setParent(null);
group.setUserLimit(0L); group.setUserLimit(null);
log.trace("\t\t\t\t\tGelöschte Gruppe: {}", group); log.trace("\t\t\t\t\tGelöschte Gruppe: {}", group);
} }

View File

@ -1,47 +1,35 @@
package mops.gruppen2.domain.event; package mops.gruppen2.domain.event;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString; import lombok.ToString;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import mops.gruppen2.domain.Group;
import mops.gruppen2.domain.User;
import mops.gruppen2.domain.exception.EventException; import mops.gruppen2.domain.exception.EventException;
import mops.gruppen2.domain.exception.UserNotFoundException; import mops.gruppen2.domain.helper.ValidationHelper;
import mops.gruppen2.domain.model.Group;
import java.util.UUID; import mops.gruppen2.domain.model.User;
/** /**
* Entfernt ein einzelnes Mitglied einer Gruppe. * Entfernt ein einzelnes Mitglied einer Gruppe.
*/ */
@Getter @Getter
@NoArgsConstructor // For Jackson
@ToString @ToString
@Log4j2 @Log4j2
public class DeleteUserEvent extends Event { public class DeleteUserEvent extends Event {
public DeleteUserEvent(UUID groupId, String userId) { private DeleteUserEvent() {}
super(groupId, userId);
}
public DeleteUserEvent(Group group, User user) { public DeleteUserEvent(Group group, User user) {
super(group.getId(), user.getId()); super(group.getId(), user.getId());
} }
//TODO: what the fuck use List.remove
@Override @Override
protected void applyEvent(Group group) throws EventException { protected void applyEvent(Group group) throws EventException {
for (User user : group.getMembers()) { ValidationHelper.throwIfNoMember(group, new User(userId));
if (user.getId().equals(userId)) {
group.getMembers().remove(user);
group.getRoles().remove(user.getId());
log.trace("\t\t\t\t\tNeue Members: {}", group.getMembers()); group.getMembers().remove(userId);
log.trace("\t\t\t\t\tNeue Rollen: {}", group.getRoles()); group.getRoles().remove(userId);
return; log.trace("\t\t\t\t\tNeue Members: {}", group.getMembers());
} log.trace("\t\t\t\t\tNeue Rollen: {}", group.getRoles());
}
throw new UserNotFoundException(getClass().toString());
} }
} }

View File

@ -6,9 +6,9 @@ import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import mops.gruppen2.domain.Group;
import mops.gruppen2.domain.exception.EventException; import mops.gruppen2.domain.exception.EventException;
import mops.gruppen2.domain.exception.GroupIdMismatchException; import mops.gruppen2.domain.exception.GroupIdMismatchException;
import mops.gruppen2.domain.model.Group;
import java.util.UUID; import java.util.UUID;

View File

@ -1,43 +1,32 @@
package mops.gruppen2.domain.event; package mops.gruppen2.domain.event;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString; import lombok.ToString;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import mops.gruppen2.domain.Group; import mops.gruppen2.domain.model.Description;
import mops.gruppen2.domain.User; import mops.gruppen2.domain.model.Group;
import mops.gruppen2.domain.exception.BadParameterException; import mops.gruppen2.domain.model.User;
import java.util.UUID;
/** /**
* Ändert nur die Gruppenbeschreibung. * Ändert nur die Gruppenbeschreibung.
*/ */
@Getter @Getter
@NoArgsConstructor // For Jackson
@ToString @ToString
@Log4j2 @Log4j2
public class UpdateGroupDescriptionEvent extends Event { public class UpdateGroupDescriptionEvent extends Event {
private String newGroupDescription; private Description groupDescription;
public UpdateGroupDescriptionEvent(UUID groupId, String userId, String newGroupDescription) { private UpdateGroupDescriptionEvent() {}
super(groupId, userId);
this.newGroupDescription = newGroupDescription;
}
public UpdateGroupDescriptionEvent(Group group, User user, String newGroupDescription) { public UpdateGroupDescriptionEvent(Group group, User user, Description groupDescription) {
super(group.getId(), user.getId()); super(group.getId(), user.getId());
this.newGroupDescription = newGroupDescription; this.groupDescription = groupDescription;
} }
@Override @Override
protected void applyEvent(Group group) { protected void applyEvent(Group group) {
if (newGroupDescription.isEmpty()) { group.setDescription(groupDescription);
throw new BadParameterException("Die Beschreibung ist leer.");
}
group.setDescription(newGroupDescription);
log.trace("\t\t\t\t\tNeue Beschreibung: {}", group.getDescription()); log.trace("\t\t\t\t\tNeue Beschreibung: {}", group.getDescription());
} }

View File

@ -1,42 +1,31 @@
package mops.gruppen2.domain.event; package mops.gruppen2.domain.event;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString; import lombok.ToString;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import mops.gruppen2.domain.Group; import mops.gruppen2.domain.model.Group;
import mops.gruppen2.domain.User; import mops.gruppen2.domain.model.Title;
import mops.gruppen2.domain.exception.BadParameterException; import mops.gruppen2.domain.model.User;
import java.util.UUID;
/** /**
* Ändert nur den Gruppentitel. * Ändert nur den Gruppentitel.
*/ */
@Getter @Getter
@NoArgsConstructor // For Jackson
@ToString @ToString
@Log4j2 @Log4j2
public class UpdateGroupTitleEvent extends Event { public class UpdateGroupTitleEvent extends Event {
private String newGroupTitle; private Title newGroupTitle;
public UpdateGroupTitleEvent(UUID groupId, String userId, String newGroupTitle) { private UpdateGroupTitleEvent() {}
super(groupId, userId);
this.newGroupTitle = newGroupTitle;
}
public UpdateGroupTitleEvent(Group group, User user, String newGroupTitle) { public UpdateGroupTitleEvent(Group group, User user, Title newGroupTitle) {
super(group.getId(), user.getId()); super(group.getId(), user.getId());
this.newGroupTitle = newGroupTitle; this.newGroupTitle = newGroupTitle;
} }
@Override @Override
protected void applyEvent(Group group) { protected void applyEvent(Group group) {
if (newGroupTitle.isEmpty()) {
throw new BadParameterException("Der Titel ist leer.");
}
group.setTitle(newGroupTitle); group.setTitle(newGroupTitle);
log.trace("\t\t\t\t\tNeuer Titel: {}", group.getTitle()); log.trace("\t\t\t\t\tNeuer Titel: {}", group.getTitle());

View File

@ -1,13 +1,13 @@
package mops.gruppen2.domain.event; package mops.gruppen2.domain.event;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString; import lombok.ToString;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import mops.gruppen2.domain.Group;
import mops.gruppen2.domain.Role;
import mops.gruppen2.domain.User;
import mops.gruppen2.domain.exception.UserNotFoundException; import mops.gruppen2.domain.exception.UserNotFoundException;
import mops.gruppen2.domain.helper.ValidationHelper;
import mops.gruppen2.domain.model.Group;
import mops.gruppen2.domain.model.Role;
import mops.gruppen2.domain.model.User;
import java.util.UUID; import java.util.UUID;
@ -15,13 +15,14 @@ import java.util.UUID;
* Aktualisiert die Gruppenrolle eines Teilnehmers. * Aktualisiert die Gruppenrolle eines Teilnehmers.
*/ */
@Getter @Getter
@NoArgsConstructor // For Jackson
@ToString @ToString
@Log4j2 @Log4j2
public class UpdateRoleEvent extends Event { public class UpdateRoleEvent extends Event {
private Role newRole; private Role newRole;
private UpdateRoleEvent() {}
public UpdateRoleEvent(UUID groupId, String userId, Role newRole) { public UpdateRoleEvent(UUID groupId, String userId, Role newRole) {
super(groupId, userId); super(groupId, userId);
this.newRole = newRole; this.newRole = newRole;
@ -34,15 +35,11 @@ public class UpdateRoleEvent extends Event {
@Override @Override
protected void applyEvent(Group group) throws UserNotFoundException { protected void applyEvent(Group group) throws UserNotFoundException {
if (group.getRoles().containsKey(userId)) { ValidationHelper.throwIfNoMember(group, new User(userId));
group.getRoles().put(userId, newRole);
log.trace("\t\t\t\t\tNeue Rollen: {}", group.getRoles()); group.getRoles().put(userId, newRole);
return; log.trace("\t\t\t\t\tNeue Rollen: {}", group.getRoles());
}
throw new UserNotFoundException(getClass().toString());
} }
} }

View File

@ -1,38 +1,32 @@
package mops.gruppen2.domain.event; package mops.gruppen2.domain.event;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString; import lombok.ToString;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import mops.gruppen2.domain.Group;
import mops.gruppen2.domain.User;
import mops.gruppen2.domain.exception.BadParameterException; import mops.gruppen2.domain.exception.BadParameterException;
import mops.gruppen2.domain.exception.EventException; import mops.gruppen2.domain.exception.EventException;
import mops.gruppen2.domain.model.Group;
import java.util.UUID; import mops.gruppen2.domain.model.Limit;
import mops.gruppen2.domain.model.User;
@Getter @Getter
@NoArgsConstructor
@ToString @ToString
@Log4j2 @Log4j2
public class UpdateUserLimitEvent extends Event { public class UpdateUserLimitEvent extends Event {
private long userLimit; private Limit userLimit;
public UpdateUserLimitEvent(UUID groupId, String userId, long userLimit) { private UpdateUserLimitEvent() {}
super(groupId, userId);
this.userLimit = userLimit;
}
public UpdateUserLimitEvent(Group group, User user, long userLimit) { public UpdateUserLimitEvent(Group group, User user, Limit userLimit) {
super(group.getId(), user.getId()); super(group.getId(), user.getId());
this.userLimit = userLimit; this.userLimit = userLimit;
} }
@Override @Override
protected void applyEvent(Group group) throws EventException { protected void applyEvent(Group group) throws EventException {
if (userLimit <= 0 || userLimit < group.getMembers().size()) { if (userLimit.getUserLimit() < group.getMembers().size()) {
throw new BadParameterException("Usermaximum zu klein."); throw new BadParameterException("Teilnehmerlimit zu klein.");
} }
group.setUserLimit(userLimit); group.setUserLimit(userLimit);

View File

@ -1,7 +1,7 @@
package mops.gruppen2.domain.helper; package mops.gruppen2.domain.helper;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import mops.gruppen2.domain.Group; import mops.gruppen2.domain.model.Group;
import mops.gruppen2.web.api.GroupRequestWrapper; import mops.gruppen2.web.api.GroupRequestWrapper;
import java.util.List; import java.util.List;

View File

@ -4,9 +4,9 @@ import com.fasterxml.jackson.databind.ObjectReader;
import com.fasterxml.jackson.dataformat.csv.CsvMapper; import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema; import com.fasterxml.jackson.dataformat.csv.CsvSchema;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import mops.gruppen2.domain.User;
import mops.gruppen2.domain.exception.EventException; import mops.gruppen2.domain.exception.EventException;
import mops.gruppen2.domain.exception.WrongFileException; import mops.gruppen2.domain.exception.WrongFileException;
import mops.gruppen2.domain.model.User;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.IOException; import java.io.IOException;

View File

@ -1,19 +1,19 @@
package mops.gruppen2.domain.helper; package mops.gruppen2.domain.helper;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import mops.gruppen2.domain.Group;
import mops.gruppen2.domain.GroupType;
import mops.gruppen2.domain.User;
import mops.gruppen2.domain.exception.BadParameterException; import mops.gruppen2.domain.exception.BadParameterException;
import mops.gruppen2.domain.exception.GroupFullException; import mops.gruppen2.domain.exception.GroupFullException;
import mops.gruppen2.domain.exception.NoAccessException; import mops.gruppen2.domain.exception.NoAccessException;
import mops.gruppen2.domain.exception.NoAdminAfterActionException; import mops.gruppen2.domain.exception.NoAdminAfterActionException;
import mops.gruppen2.domain.exception.UserAlreadyExistsException; import mops.gruppen2.domain.exception.UserAlreadyExistsException;
import mops.gruppen2.domain.exception.UserNotFoundException; import mops.gruppen2.domain.exception.UserNotFoundException;
import mops.gruppen2.domain.model.Group;
import mops.gruppen2.domain.model.Type;
import mops.gruppen2.domain.model.User;
import mops.gruppen2.web.form.CreateForm; import mops.gruppen2.web.form.CreateForm;
import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken; import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken;
import static mops.gruppen2.domain.Role.ADMIN; import static mops.gruppen2.domain.model.Role.ADMIN;
@Log4j2 @Log4j2
public final class ValidationHelper { public final class ValidationHelper {
@ -28,7 +28,7 @@ public final class ValidationHelper {
* Überprüft, ob ein User in einer Gruppe teilnimmt. * Überprüft, ob ein User in einer Gruppe teilnimmt.
*/ */
public static boolean checkIfMember(Group group, User user) { public static boolean checkIfMember(Group group, User user) {
return group.getMembers().contains(user); return group.getMembers().containsKey(user.getId());
} }
public static boolean checkIfLastMember(User user, Group group) { public static boolean checkIfLastMember(User user, Group group) {
@ -39,7 +39,7 @@ public final class ValidationHelper {
* Überprüft, ob eine Gruppe voll ist. * Überprüft, ob eine Gruppe voll ist.
*/ */
public static boolean checkIfGroupFull(Group group) { public static boolean checkIfGroupFull(Group group) {
return group.getMembers().size() >= group.getUserLimit(); return group.getMembers().size() >= group.getUserLimit().getUserLimit();
} }
/** /**
@ -111,7 +111,7 @@ public final class ValidationHelper {
public static void validateCreateForm(KeycloakAuthenticationToken token, CreateForm form) { public static void validateCreateForm(KeycloakAuthenticationToken token, CreateForm form) {
if (!token.getAccount().getRoles().contains("orga") if (!token.getAccount().getRoles().contains("orga")
&& form.getType() == GroupType.LECTURE) { && form.getType() == Type.LECTURE) {
throw new BadParameterException("Eine Veranstaltung kann nur von ORGA erstellt werden."); throw new BadParameterException("Eine Veranstaltung kann nur von ORGA erstellt werden.");
} }
} }

View File

@ -0,0 +1,20 @@
package mops.gruppen2.domain.model;
import lombok.Getter;
import lombok.Value;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
@Value
@Getter
//@AllArgsConstructor
//@NoArgsConstructor
public class Description {
//private Description() {}
@NotBlank
@Size(min = 4, max = 512)
String groupDescription;
}

View File

@ -1,13 +1,11 @@
package mops.gruppen2.domain; package mops.gruppen2.domain.model;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import lombok.ToString; import lombok.ToString;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
@ -26,19 +24,16 @@ public class Group {
@ToString.Exclude @ToString.Exclude
private UUID parent; private UUID parent;
//TODO: Single Type for Public/Private/Lecture? private Type type;
private GroupType type;
private String title; private Title title;
private String description; private Description description;
// Default + Minimum: 1
@ToString.Exclude @ToString.Exclude
private long userLimit = 1; private Limit userLimit = new Limit(1); // Add initial user
//TODO: List to Hashmap
@ToString.Exclude @ToString.Exclude
private final List<User> members = new ArrayList<>(); private final Map<String, User> members = new HashMap<>();
@ToString.Exclude @ToString.Exclude
private final Map<String, Role> roles = new HashMap<>(); private final Map<String, Role> roles = new HashMap<>();
} }

View File

@ -0,0 +1,19 @@
package mops.gruppen2.domain.model;
import lombok.Value;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
@Value
//@Getter
//@AllArgsConstructor
//@NoArgsConstructor
public class Limit {
//private Limit() {}
@Min(1)
@Max(999_999)
long userLimit;
}

View File

@ -1,4 +1,4 @@
package mops.gruppen2.domain; package mops.gruppen2.domain.model;
public enum Role { public enum Role {
ADMIN, ADMIN,

View File

@ -0,0 +1,19 @@
package mops.gruppen2.domain.model;
import lombok.Value;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
@Value
//@Getter
//@AllArgsConstructor
//@NoArgsConstructor
public class Title {
//private Title() {}
@NotBlank
@Size(min = 4, max = 128)
String groupTitle;
}

View File

@ -0,0 +1,7 @@
package mops.gruppen2.domain.model;
public enum Type {
PUBLIC,
PRIVATE,
LECTURE
}

View File

@ -1,4 +1,4 @@
package mops.gruppen2.domain; package mops.gruppen2.domain.model;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;

View File

@ -2,13 +2,13 @@ package mops.gruppen2.domain.service;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import mops.gruppen2.domain.User;
import mops.gruppen2.domain.event.AddUserEvent; import mops.gruppen2.domain.event.AddUserEvent;
import mops.gruppen2.domain.event.CreateGroupEvent; import mops.gruppen2.domain.event.CreateGroupEvent;
import mops.gruppen2.domain.event.Event; import mops.gruppen2.domain.event.Event;
import mops.gruppen2.domain.exception.BadPayloadException; import mops.gruppen2.domain.exception.BadPayloadException;
import mops.gruppen2.domain.helper.IdHelper; import mops.gruppen2.domain.helper.IdHelper;
import mops.gruppen2.domain.helper.JsonHelper; import mops.gruppen2.domain.helper.JsonHelper;
import mops.gruppen2.domain.model.User;
import mops.gruppen2.persistance.EventRepository; import mops.gruppen2.persistance.EventRepository;
import mops.gruppen2.persistance.dto.EventDTO; import mops.gruppen2.persistance.dto.EventDTO;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;

View File

@ -1,10 +1,6 @@
package mops.gruppen2.domain.service; package mops.gruppen2.domain.service;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import mops.gruppen2.domain.Group;
import mops.gruppen2.domain.GroupType;
import mops.gruppen2.domain.Role;
import mops.gruppen2.domain.User;
import mops.gruppen2.domain.event.AddUserEvent; import mops.gruppen2.domain.event.AddUserEvent;
import mops.gruppen2.domain.event.CreateGroupEvent; import mops.gruppen2.domain.event.CreateGroupEvent;
import mops.gruppen2.domain.event.DeleteGroupEvent; import mops.gruppen2.domain.event.DeleteGroupEvent;
@ -16,6 +12,13 @@ import mops.gruppen2.domain.event.UpdateRoleEvent;
import mops.gruppen2.domain.event.UpdateUserLimitEvent; import mops.gruppen2.domain.event.UpdateUserLimitEvent;
import mops.gruppen2.domain.exception.EventException; import mops.gruppen2.domain.exception.EventException;
import mops.gruppen2.domain.helper.ValidationHelper; import mops.gruppen2.domain.helper.ValidationHelper;
import mops.gruppen2.domain.model.Description;
import mops.gruppen2.domain.model.Group;
import mops.gruppen2.domain.model.Limit;
import mops.gruppen2.domain.model.Role;
import mops.gruppen2.domain.model.Title;
import mops.gruppen2.domain.model.Type;
import mops.gruppen2.domain.model.User;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
@ -49,16 +52,16 @@ public class GroupService {
* @param description Gruppenbeschreibung * @param description Gruppenbeschreibung
*/ */
public Group createGroup(User user, public Group createGroup(User user,
String title, Title title,
String description, Description description,
GroupType groupType, Type type,
long userLimit, Limit userLimit,
UUID parent) { UUID parent) {
// Regeln: // Regeln:
// isPrivate -> !isLecture // isPrivate -> !isLecture
// isLecture -> !isPrivate // isLecture -> !isPrivate
Group group = createGroup(user, parent, groupType); Group group = createGroup(user, parent, type);
// Die Reihenfolge ist wichtig, da der ausführende User Admin sein muss // Die Reihenfolge ist wichtig, da der ausführende User Admin sein muss
addUser(user, group); addUser(user, group);
@ -102,8 +105,8 @@ public class GroupService {
* *
* @return Das neue Teilnehmermaximum * @return Das neue Teilnehmermaximum
*/ */
private static long getAdjustedUserLimit(List<User> newUsers, Group group) { private static Limit getAdjustedUserLimit(List<User> newUsers, Group group) {
return Math.max((long) group.getMembers().size() + newUsers.size(), group.getUserLimit()); return new Limit(Math.max((long) group.getMembers().size() + newUsers.size(), group.getUserLimit().getUserLimit()));
} }
/** /**
@ -131,11 +134,11 @@ public class GroupService {
/** /**
* Erzeugt eine Gruppe, speichert diese und gibt diese zurück. * Erzeugt eine Gruppe, speichert diese und gibt diese zurück.
*/ */
private Group createGroup(User user, UUID parent, GroupType groupType) { private Group createGroup(User user, UUID parent, Type type) {
Event event = new CreateGroupEvent(UUID.randomUUID(), Event event = new CreateGroupEvent(UUID.randomUUID(),
user.getId(), user.getId(),
parent, parent,
groupType); type);
Group group = new Group(); Group group = new Group();
event.apply(group); event.apply(group);
@ -206,14 +209,14 @@ public class GroupService {
* Prüft, ob der Nutzer Admin ist und ob der Titel valide ist. * Prüft, ob der Nutzer Admin ist und ob der Titel valide ist.
* Bei keiner Änderung wird nichts erzeugt. * Bei keiner Änderung wird nichts erzeugt.
*/ */
public void updateTitle(User user, Group group, String title) { public void updateTitle(User user, Group group, Title title) {
ValidationHelper.throwIfNoAdmin(group, user); ValidationHelper.throwIfNoAdmin(group, user);
if (title.trim().equals(group.getTitle())) { if (title.equals(group.getTitle())) {
return; return;
} }
Event event = new UpdateGroupTitleEvent(group, user, title.trim()); Event event = new UpdateGroupTitleEvent(group, user, title);
event.apply(group); event.apply(group);
eventStoreService.saveEvent(event); eventStoreService.saveEvent(event);
@ -224,14 +227,14 @@ public class GroupService {
* Prüft, ob der Nutzer Admin ist und ob die Beschreibung valide ist. * Prüft, ob der Nutzer Admin ist und ob die Beschreibung valide ist.
* Bei keiner Änderung wird nichts erzeugt. * Bei keiner Änderung wird nichts erzeugt.
*/ */
public void updateDescription(User user, Group group, String description) { public void updateDescription(User user, Group group, Description description) {
ValidationHelper.throwIfNoAdmin(group, user); ValidationHelper.throwIfNoAdmin(group, user);
if (description.trim().equals(group.getDescription())) { if (description.equals(group.getDescription())) {
return; return;
} }
Event event = new UpdateGroupDescriptionEvent(group, user, description.trim()); Event event = new UpdateGroupDescriptionEvent(group, user, description);
event.apply(group); event.apply(group);
eventStoreService.saveEvent(event); eventStoreService.saveEvent(event);
@ -260,7 +263,7 @@ public class GroupService {
* Prüft, ob der Nutzer Admin ist und ob das Limit valide ist. * Prüft, ob der Nutzer Admin ist und ob das Limit valide ist.
* Bei keiner Änderung wird nichts erzeugt. * Bei keiner Änderung wird nichts erzeugt.
*/ */
public void updateUserLimit(User user, Group group, long userLimit) { public void updateUserLimit(User user, Group group, Limit userLimit) {
ValidationHelper.throwIfNoAdmin(group, user); ValidationHelper.throwIfNoAdmin(group, user);
if (userLimit == group.getUserLimit()) { if (userLimit == group.getUserLimit()) {
@ -268,8 +271,8 @@ public class GroupService {
} }
Event event; Event event;
if (userLimit < group.getMembers().size()) { if (userLimit.getUserLimit() < group.getMembers().size()) {
event = new UpdateUserLimitEvent(group, user, group.getMembers().size()); event = new UpdateUserLimitEvent(group, user, new Limit(group.getMembers().size()));
} else { } else {
event = new UpdateUserLimitEvent(group, user, userLimit); event = new UpdateUserLimitEvent(group, user, userLimit);
} }

View File

@ -1,9 +1,9 @@
package mops.gruppen2.domain.service; package mops.gruppen2.domain.service;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import mops.gruppen2.domain.Group;
import mops.gruppen2.domain.exception.InvalidInviteException; import mops.gruppen2.domain.exception.InvalidInviteException;
import mops.gruppen2.domain.exception.NoInviteExistException; import mops.gruppen2.domain.exception.NoInviteExistException;
import mops.gruppen2.domain.model.Group;
import mops.gruppen2.persistance.InviteRepository; import mops.gruppen2.persistance.InviteRepository;
import mops.gruppen2.persistance.dto.InviteLinkDTO; import mops.gruppen2.persistance.dto.InviteLinkDTO;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;

View File

@ -1,13 +1,13 @@
package mops.gruppen2.domain.service; package mops.gruppen2.domain.service;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import mops.gruppen2.domain.Group;
import mops.gruppen2.domain.GroupType;
import mops.gruppen2.domain.User;
import mops.gruppen2.domain.event.Event; import mops.gruppen2.domain.event.Event;
import mops.gruppen2.domain.exception.EventException; import mops.gruppen2.domain.exception.EventException;
import mops.gruppen2.domain.exception.GroupNotFoundException; import mops.gruppen2.domain.exception.GroupNotFoundException;
import mops.gruppen2.domain.helper.IdHelper; import mops.gruppen2.domain.helper.IdHelper;
import mops.gruppen2.domain.model.Group;
import mops.gruppen2.domain.model.Type;
import mops.gruppen2.domain.model.User;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -131,7 +131,7 @@ public class ProjectionService {
List<Group> groups = projectGroups(events); List<Group> groups = projectGroups(events);
return groups.stream() return groups.stream()
.filter(group -> group.getType() == GroupType.PUBLIC) .filter(group -> group.getType() != Type.PRIVATE)
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
@ -151,7 +151,7 @@ public class ProjectionService {
List<Group> lectures = projectGroups(events); List<Group> lectures = projectGroups(events);
return lectures.stream() return lectures.stream()
.filter(group -> group.getType() == GroupType.LECTURE) .filter(group -> group.getType() == Type.LECTURE)
.collect(Collectors.toList()); .collect(Collectors.toList());
} }

View File

@ -1,10 +1,10 @@
package mops.gruppen2.domain.service; package mops.gruppen2.domain.service;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import mops.gruppen2.domain.Group;
import mops.gruppen2.domain.GroupType;
import mops.gruppen2.domain.User;
import mops.gruppen2.domain.exception.EventException; import mops.gruppen2.domain.exception.EventException;
import mops.gruppen2.domain.model.Group;
import mops.gruppen2.domain.model.Type;
import mops.gruppen2.domain.model.User;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -56,10 +56,10 @@ public class SearchService {
*/ */
private static void sortByGroupType(List<Group> groups) { private static void sortByGroupType(List<Group> groups) {
groups.sort((Group g1, Group g2) -> { groups.sort((Group g1, Group g2) -> {
if (g1.getType() == GroupType.LECTURE) { if (g1.getType() == Type.LECTURE) {
return -1; return -1;
} }
if (g2.getType() == GroupType.LECTURE) { if (g2.getType() == Type.LECTURE) {
return 0; return 0;
} }

View File

@ -3,12 +3,13 @@ package mops.gruppen2.web;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import mops.gruppen2.aspect.annotation.TraceMethodCalls; import mops.gruppen2.aspect.annotation.TraceMethodCalls;
import mops.gruppen2.domain.Group;
import mops.gruppen2.domain.User;
import mops.gruppen2.domain.helper.APIHelper; import mops.gruppen2.domain.helper.APIHelper;
import mops.gruppen2.domain.helper.IdHelper; import mops.gruppen2.domain.helper.IdHelper;
import mops.gruppen2.domain.model.Group;
import mops.gruppen2.domain.model.User;
import mops.gruppen2.domain.service.EventStoreService; import mops.gruppen2.domain.service.EventStoreService;
import mops.gruppen2.domain.service.ProjectionService; import mops.gruppen2.domain.service.ProjectionService;
import mops.gruppen2.web.api.GroupRequestWrapper; import mops.gruppen2.web.api.GroupRequestWrapper;
@ -26,6 +27,7 @@ import java.util.UUID;
*/ */
@Log4j2 @Log4j2
@TraceMethodCalls @TraceMethodCalls
@RequiredArgsConstructor
@RestController @RestController
@RequestMapping("/gruppen2/api") @RequestMapping("/gruppen2/api")
public class APIController { public class APIController {
@ -33,11 +35,6 @@ public class APIController {
private final EventStoreService eventStoreService; private final EventStoreService eventStoreService;
private final ProjectionService projectionService; private final ProjectionService projectionService;
public APIController(EventStoreService eventStoreService, ProjectionService projectionService) {
this.eventStoreService = eventStoreService;
this.projectionService = projectionService;
}
/** /**
* Erzeugt eine Liste aus Gruppen, welche sich seit einer übergebenen Event-Id geändert haben. * Erzeugt eine Liste aus Gruppen, welche sich seit einer übergebenen Event-Id geändert haben.
* Die Gruppen werden vollständig projiziert, enthalten also alle Informationen zum entsprechenden Zeitpunkt. * Die Gruppen werden vollständig projiziert, enthalten also alle Informationen zum entsprechenden Zeitpunkt.

View File

@ -1,17 +1,19 @@
package mops.gruppen2.web; package mops.gruppen2.web;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import mops.gruppen2.aspect.annotation.TraceMethodCalls; import mops.gruppen2.aspect.annotation.TraceMethodCalls;
import mops.gruppen2.domain.Group;
import mops.gruppen2.domain.User;
import mops.gruppen2.domain.helper.CsvHelper; import mops.gruppen2.domain.helper.CsvHelper;
import mops.gruppen2.domain.helper.IdHelper; import mops.gruppen2.domain.helper.IdHelper;
import mops.gruppen2.domain.helper.ValidationHelper; import mops.gruppen2.domain.helper.ValidationHelper;
import mops.gruppen2.domain.model.Description;
import mops.gruppen2.domain.model.Group;
import mops.gruppen2.domain.model.Limit;
import mops.gruppen2.domain.model.Title;
import mops.gruppen2.domain.model.User;
import mops.gruppen2.domain.service.GroupService; import mops.gruppen2.domain.service.GroupService;
import mops.gruppen2.domain.service.ProjectionService; import mops.gruppen2.domain.service.ProjectionService;
import mops.gruppen2.web.form.CreateForm; import mops.gruppen2.web.form.CreateForm;
import mops.gruppen2.web.form.MetaForm;
import mops.gruppen2.web.form.UserLimitForm;
import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken; import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken;
import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
@ -26,6 +28,7 @@ import javax.validation.Valid;
@SuppressWarnings("SameReturnValue") @SuppressWarnings("SameReturnValue")
@Log4j2 @Log4j2
@TraceMethodCalls @TraceMethodCalls
@RequiredArgsConstructor
@Controller @Controller
@RequestMapping("/gruppen2") @RequestMapping("/gruppen2")
public class GroupCreationController { public class GroupCreationController {
@ -33,11 +36,6 @@ public class GroupCreationController {
private final GroupService groupService; private final GroupService groupService;
private final ProjectionService projectionService; private final ProjectionService projectionService;
public GroupCreationController(GroupService groupService, ProjectionService projectionService) {
this.groupService = groupService;
this.projectionService = projectionService;
}
@RolesAllowed({"ROLE_orga", "ROLE_studentin"}) @RolesAllowed({"ROLE_orga", "ROLE_studentin"})
@GetMapping("/create") @GetMapping("/create")
public String getCreate(Model model) { public String getCreate(Model model) {
@ -52,18 +50,19 @@ public class GroupCreationController {
@CacheEvict(value = "groups", allEntries = true) @CacheEvict(value = "groups", allEntries = true)
public String postCreateOrga(KeycloakAuthenticationToken token, public String postCreateOrga(KeycloakAuthenticationToken token,
@Valid CreateForm create, @Valid CreateForm create,
@Valid MetaForm meta, @Valid Title title,
@Valid UserLimitForm limit) { @Valid Description description,
@Valid Limit limit) {
// Zusätzlicher check: studentin kann keine lecture erstellen // Zusätzlicher check: studentin kann keine lecture erstellen
ValidationHelper.validateCreateForm(token, create); ValidationHelper.validateCreateForm(token, create);
User user = new User(token); User user = new User(token);
Group group = groupService.createGroup(user, Group group = groupService.createGroup(user,
meta.getTitle(), title,
meta.getDescription(), description,
create.getType(), create.getType(),
limit.getUserlimit(), limit,
create.getParent()); create.getParent());
// ROLE_studentin kann kein CSV importieren // ROLE_studentin kann kein CSV importieren

View File

@ -1,17 +1,19 @@
package mops.gruppen2.web; package mops.gruppen2.web;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import mops.gruppen2.aspect.annotation.TraceMethodCalls; import mops.gruppen2.aspect.annotation.TraceMethodCalls;
import mops.gruppen2.domain.Group;
import mops.gruppen2.domain.User;
import mops.gruppen2.domain.helper.CsvHelper; import mops.gruppen2.domain.helper.CsvHelper;
import mops.gruppen2.domain.helper.IdHelper; import mops.gruppen2.domain.helper.IdHelper;
import mops.gruppen2.domain.helper.ValidationHelper; import mops.gruppen2.domain.helper.ValidationHelper;
import mops.gruppen2.domain.model.Description;
import mops.gruppen2.domain.model.Group;
import mops.gruppen2.domain.model.Limit;
import mops.gruppen2.domain.model.Title;
import mops.gruppen2.domain.model.User;
import mops.gruppen2.domain.service.GroupService; import mops.gruppen2.domain.service.GroupService;
import mops.gruppen2.domain.service.InviteService; import mops.gruppen2.domain.service.InviteService;
import mops.gruppen2.domain.service.ProjectionService; import mops.gruppen2.domain.service.ProjectionService;
import mops.gruppen2.web.form.MetaForm;
import mops.gruppen2.web.form.UserLimitForm;
import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken; import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken;
import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
@ -31,6 +33,7 @@ import java.util.UUID;
@SuppressWarnings("SameReturnValue") @SuppressWarnings("SameReturnValue")
@Log4j2 @Log4j2
@TraceMethodCalls @TraceMethodCalls
@RequiredArgsConstructor
@Controller @Controller
@RequestMapping("/gruppen2") @RequestMapping("/gruppen2")
public class GroupDetailsController { public class GroupDetailsController {
@ -39,13 +42,6 @@ public class GroupDetailsController {
private final GroupService groupService; private final GroupService groupService;
private final ProjectionService projectionService; private final ProjectionService projectionService;
public GroupDetailsController(InviteService inviteService, GroupService groupService, ProjectionService projectionService) {
this.inviteService = inviteService;
this.groupService = groupService;
this.projectionService = projectionService;
}
@RolesAllowed({"ROLE_orga", "ROLE_studentin"}) @RolesAllowed({"ROLE_orga", "ROLE_studentin"})
@GetMapping("/details/{id}") @GetMapping("/details/{id}")
public String getDetailsPage(KeycloakAuthenticationToken token, public String getDetailsPage(KeycloakAuthenticationToken token,
@ -132,13 +128,14 @@ public class GroupDetailsController {
@CacheEvict(value = "groups", allEntries = true) @CacheEvict(value = "groups", allEntries = true)
public String postDetailsEditMeta(KeycloakAuthenticationToken token, public String postDetailsEditMeta(KeycloakAuthenticationToken token,
@PathVariable("id") String groupId, @PathVariable("id") String groupId,
@Valid MetaForm form) { @Valid Title title,
@Valid Description description) {
User user = new User(token); User user = new User(token);
Group group = projectionService.projectSingleGroup(UUID.fromString(groupId)); Group group = projectionService.projectSingleGroup(UUID.fromString(groupId));
groupService.updateTitle(user, group, form.getTitle()); groupService.updateTitle(user, group, title);
groupService.updateDescription(user, group, form.getDescription()); groupService.updateDescription(user, group, description);
return "redirect:/gruppen2/details/" + groupId + "/edit"; return "redirect:/gruppen2/details/" + groupId + "/edit";
} }
@ -148,11 +145,11 @@ public class GroupDetailsController {
@CacheEvict(value = "groups", allEntries = true) @CacheEvict(value = "groups", allEntries = true)
public String postDetailsEditUserLimit(KeycloakAuthenticationToken token, public String postDetailsEditUserLimit(KeycloakAuthenticationToken token,
@PathVariable("id") String groupId, @PathVariable("id") String groupId,
@Valid UserLimitForm form) { @Valid Limit limit) {
User user = new User(token); User user = new User(token);
Group group = projectionService.projectSingleGroup(UUID.fromString(groupId)); Group group = projectionService.projectSingleGroup(UUID.fromString(groupId));
groupService.updateUserLimit(user, group, form.getUserlimit()); groupService.updateUserLimit(user, group, limit);
return "redirect:/gruppen2/details/" + groupId + "/edit"; return "redirect:/gruppen2/details/" + groupId + "/edit";
} }

View File

@ -1,9 +1,10 @@
package mops.gruppen2.web; package mops.gruppen2.web;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import mops.gruppen2.aspect.annotation.TraceMethodCall; import mops.gruppen2.aspect.annotation.TraceMethodCall;
import mops.gruppen2.domain.User;
import mops.gruppen2.domain.exception.PageNotFoundException; import mops.gruppen2.domain.exception.PageNotFoundException;
import mops.gruppen2.domain.model.User;
import mops.gruppen2.domain.service.ProjectionService; import mops.gruppen2.domain.service.ProjectionService;
import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken; import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
@ -16,15 +17,12 @@ import javax.servlet.http.HttpServletRequest;
@SuppressWarnings("SameReturnValue") @SuppressWarnings("SameReturnValue")
@Log4j2 @Log4j2
@RequiredArgsConstructor
@Controller @Controller
public class GruppenfindungController { public class GruppenfindungController {
private final ProjectionService projectionService; private final ProjectionService projectionService;
public GruppenfindungController(ProjectionService projectionService) {
this.projectionService = projectionService;
}
// For convenience // For convenience
//@GetMapping("") //@GetMapping("")
//public String redirect() { //public String redirect() {

View File

@ -1,9 +1,9 @@
package mops.gruppen2.web; package mops.gruppen2.web;
import mops.gruppen2.domain.Account; import mops.gruppen2.domain.Account;
import mops.gruppen2.domain.GroupType; import mops.gruppen2.domain.model.Role;
import mops.gruppen2.domain.Role; import mops.gruppen2.domain.model.Type;
import mops.gruppen2.domain.User; import mops.gruppen2.domain.model.User;
import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken; import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ControllerAdvice;
@ -26,9 +26,9 @@ public class ModelAttributeControllerAdvice {
// Add enums // Add enums
model.addAttribute("member", Role.MEMBER); model.addAttribute("member", Role.MEMBER);
model.addAttribute("admin", Role.ADMIN); model.addAttribute("admin", Role.ADMIN);
model.addAttribute("public", GroupType.PUBLIC); model.addAttribute("public", Type.PUBLIC);
model.addAttribute("private", GroupType.PRIVATE); model.addAttribute("private", Type.PRIVATE);
model.addAttribute("lecture", GroupType.LECTURE); model.addAttribute("lecture", Type.LECTURE);
} }
} }

View File

@ -1,11 +1,12 @@
package mops.gruppen2.web; package mops.gruppen2.web;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import mops.gruppen2.aspect.annotation.TraceMethodCalls; import mops.gruppen2.aspect.annotation.TraceMethodCalls;
import mops.gruppen2.domain.Group;
import mops.gruppen2.domain.GroupType;
import mops.gruppen2.domain.User;
import mops.gruppen2.domain.helper.ValidationHelper; import mops.gruppen2.domain.helper.ValidationHelper;
import mops.gruppen2.domain.model.Group;
import mops.gruppen2.domain.model.Type;
import mops.gruppen2.domain.model.User;
import mops.gruppen2.domain.service.InviteService; import mops.gruppen2.domain.service.InviteService;
import mops.gruppen2.domain.service.ProjectionService; import mops.gruppen2.domain.service.ProjectionService;
import mops.gruppen2.domain.service.SearchService; import mops.gruppen2.domain.service.SearchService;
@ -25,6 +26,7 @@ import java.util.List;
@SuppressWarnings("SameReturnValue") @SuppressWarnings("SameReturnValue")
@Log4j2 @Log4j2
@TraceMethodCalls @TraceMethodCalls
@RequiredArgsConstructor
@Controller @Controller
@RequestMapping("/gruppen2") @RequestMapping("/gruppen2")
public class SearchAndInviteController { public class SearchAndInviteController {
@ -33,12 +35,6 @@ public class SearchAndInviteController {
private final ProjectionService projectionService; private final ProjectionService projectionService;
private final SearchService searchService; private final SearchService searchService;
public SearchAndInviteController(InviteService inviteService, ProjectionService projectionService, SearchService searchService) {
this.inviteService = inviteService;
this.projectionService = projectionService;
this.searchService = searchService;
}
@RolesAllowed({"ROLE_orga", "ROLE_studentin"}) @RolesAllowed({"ROLE_orga", "ROLE_studentin"})
@GetMapping("/search") @GetMapping("/search")
public String getSearch(Model model) { public String getSearch(Model model) {
@ -74,7 +70,7 @@ public class SearchAndInviteController {
model.addAttribute("group", group); model.addAttribute("group", group);
// Gruppe öffentlich // Gruppe öffentlich
if (group.getType() == GroupType.PUBLIC) { if (group.getType() == Type.PUBLIC) {
return "redirect:/gruppen2/details/" + group.getId(); return "redirect:/gruppen2/details/" + group.getId();
} }

View File

@ -2,7 +2,7 @@ package mops.gruppen2.web.api;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import mops.gruppen2.domain.Group; import mops.gruppen2.domain.model.Group;
import java.util.List; import java.util.List;

View File

@ -1,8 +1,8 @@
package mops.gruppen2.web.form; package mops.gruppen2.web.form;
import lombok.Data; import lombok.Data;
import mops.gruppen2.domain.GroupType;
import mops.gruppen2.domain.helper.IdHelper; import mops.gruppen2.domain.helper.IdHelper;
import mops.gruppen2.domain.model.Type;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
@ -19,11 +19,11 @@ public class CreateForm {
MultipartFile file; MultipartFile file;
public GroupType getType() { public Type getType() {
return GroupType.valueOf(type); return Type.valueOf(type);
} }
public UUID getParent() { public UUID getParent() {
return getType() == GroupType.LECTURE ? IdHelper.emptyUUID() : IdHelper.stringToUUID(parent); return getType() == Type.LECTURE ? IdHelper.emptyUUID() : IdHelper.stringToUUID(parent);
} }
} }

View File

@ -1,18 +0,0 @@
package mops.gruppen2.web.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
@Data
public class MetaForm {
@NotBlank
@Size(min = 4, max = 128)
String title;
@NotBlank
@Size(min = 4, max = 512)
String description;
}

View File

@ -1,14 +0,0 @@
package mops.gruppen2.web.form;
import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
@Data
public class UserLimitForm {
@Min(1)
@Max(999_999)
long userlimit;
}

View File

@ -1,158 +0,0 @@
INSERT INTO event
VALUES (1, '2d90ae27-1129-4b61-84a5-6c7d585e777e', '07FEA694', 'CreateGroupEvent',
'{"type":"CreateGroupEvent","groupId":"2d90ae27-1129-4b61-84a5-6c7d585e777e","userId":"07FEA694","groupParent":null,"groupType":"PUBLIC"}'),
(2, '2d90ae27-1129-4b61-84a5-6c7d585e777e', '2', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"2d90ae27-1129-4b61-84a5-6c7d585e777e","userId":"2","givenname":"Marcos","familyname":"Glover","email":"Marcos.Glover@mail.de"}'),
(3, '2d90ae27-1129-4b61-84a5-6c7d585e777e', '2', 'UpdateUserLimitEvent',
'{"type":"UpdateUserLimitEvent","groupId":"2d90ae27-1129-4b61-84a5-6c7d585e777e","userId":"2","userLimit":"1000"}'),
(4, '2d90ae27-1129-4b61-84a5-6c7d585e777e', '5CFBF1AF', 'UpdateGroupTitleEvent',
'{"type":"UpdateGroupTitleEvent","groupId":"2d90ae27-1129-4b61-84a5-6c7d585e777e","userId":"5CFBF1AF","newGroupTitle":"Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra"}'),
(5, '2d90ae27-1129-4b61-84a5-6c7d585e777e', '41E11CBC', 'UpdateGroupDescriptionEvent',
'{"type":"UpdateGroupDescriptionEvent","groupId":"2d90ae27-1129-4b61-84a5-6c7d585e777e","userId":"41E11CBC","newGroupDescription":"Have you seen my Bear Tibbers? Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyra Zyrav"}'),
(6, '2d90ae27-1129-4b61-84a5-6c7d585e777e', '3', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"2d90ae27-1129-4b61-84a5-6c7d585e777e","userId":"3","givenname":"Antwan","familyname":"Smitham","email":"Antwan.Smitham@mail.de"}'),
(7, '2d90ae27-1129-4b61-84a5-6c7d585e777e', '4', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"2d90ae27-1129-4b61-84a5-6c7d585e777e","userId":"4","givenname":"Numbers","familyname":"Rice","email":"Numbers.Rice@mail.de"}'),
(8, '2d90ae27-1129-4b61-84a5-6c7d585e777e', '5', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"2d90ae27-1129-4b61-84a5-6c7d585e777e","userId":"5","givenname":"Charlette","familyname":"Brakus","email":"Charlette.Brakus@mail.de"}'),
(9, '2d90ae27-1129-4b61-84a5-6c7d585e777e', '6', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"2d90ae27-1129-4b61-84a5-6c7d585e777e","userId":"6","givenname":"Alethea","familyname":"Kessler","email":"Alethea.Kessler@mail.de"}'),
(10, '2d90ae27-1129-4b61-84a5-6c7d585e777e', '7', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"2d90ae27-1129-4b61-84a5-6c7d585e777e","userId":"7","givenname":"Daren","familyname":"Kreiger","email":"Daren.Kreiger@mail.de"}'),
(11, '2d90ae27-1129-4b61-84a5-6c7d585e777e', '8', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"2d90ae27-1129-4b61-84a5-6c7d585e777e","userId":"8","givenname":"Gabriel","familyname":"Feeney","email":"Gabriel.Feeney@mail.de"}'),
(12, '2d90ae27-1129-4b61-84a5-6c7d585e777e', '9', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"2d90ae27-1129-4b61-84a5-6c7d585e777e","userId":"9","givenname":"Roosevelt","familyname":"Buckridge","email":"Roosevelt.Buckridge@mail.de"}'),
(13, '2d90ae27-1129-4b61-84a5-6c7d585e777e', '10', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"2d90ae27-1129-4b61-84a5-6c7d585e777e","userId":"10","givenname":"Eduardo","familyname":"Lowe","email":"Eduardo.Lowe@mail.de"}'),
(14, '555a531c-8b80-491c-88b4-8fc18170d318', '2D7D9CE0', 'CreateGroupEvent',
'{"type":"CreateGroupEvent","groupId":"555a531c-8b80-491c-88b4-8fc18170d318","userId":"2D7D9CE0","groupParent":null,"groupType":"PRIVATE"}'),
(15, '555a531c-8b80-491c-88b4-8fc18170d318', 'orga', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"555a531c-8b80-491c-88b4-8fc18170d318","userId":"orga","givenname":"Jerald","familyname":"Ward","email":"Jerald.Ward@mail.de"}'),
(16, '555a531c-8b80-491c-88b4-8fc18170d318', 'orga', 'UpdateRoleEvent',
'{"type":"UpdateRoleEvent","groupId":"555a531c-8b80-491c-88b4-8fc18170d318","userId":"orga","newRole":"ADMIN"}'),
(17, '555a531c-8b80-491c-88b4-8fc18170d318', '2', 'UpdateUserLimitEvent',
'{"type":"UpdateUserLimitEvent","groupId":"555a531c-8b80-491c-88b4-8fc18170d318","userId":"2","userLimit":"1000"}'),
(18, '555a531c-8b80-491c-88b4-8fc18170d318', '5CFBF1AF', 'UpdateGroupTitleEvent',
'{"type":"UpdateGroupTitleEvent","groupId":"555a531c-8b80-491c-88b4-8fc18170d318","userId":"5CFBF1AF","newGroupTitle":"Zyra"}'),
(19, '555a531c-8b80-491c-88b4-8fc18170d318', 'EF050D58', 'UpdateGroupDescriptionEvent',
'{"type":"UpdateGroupDescriptionEvent","groupId":"555a531c-8b80-491c-88b4-8fc18170d318","userId":"EF050D58","newGroupDescription":"Not Draven Draaaaven."}'),
(20, '555a531c-8b80-491c-88b4-8fc18170d318', '3', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"555a531c-8b80-491c-88b4-8fc18170d318","userId":"3","givenname":"Jesica","familyname":"OKeefe","email":"Jesica.OKeefe@mail.de"}'),
(21, '555a531c-8b80-491c-88b4-8fc18170d318', '4', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"555a531c-8b80-491c-88b4-8fc18170d318","userId":"4","givenname":"Jess","familyname":"Schamberger","email":"Jess.Schamberger@mail.de"}'),
(22, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', 'E7E2EC5F', 'CreateGroupEvent',
'{"type":"CreateGroupEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"E7E2EC5F","groupParent":null,"groupType":"LECTURE"}'),
(23, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', 'orga', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"orga","givenname":"Hana","familyname":"Connelly","email":"Hana.Connelly@mail.de"}'),
(24, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '2', 'UpdateUserLimitEvent',
'{"type":"UpdateUserLimitEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"2","userLimit":"1000"}'),
(25, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '4EDE191D', 'UpdateGroupTitleEvent',
'{"type":"UpdateGroupTitleEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"4EDE191D","newGroupTitle":"Vi"}'),
(26, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '6EF0B5F9', 'UpdateGroupDescriptionEvent',
'{"type":"UpdateGroupDescriptionEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"6EF0B5F9","newGroupDescription":"Ready to set the world on fire..."}'),
(27, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '3', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"3","givenname":"Steve","familyname":"Swaniawski","email":"Steve.Swaniawski@mail.de"}'),
(28, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '4', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"4","givenname":"Natalie","familyname":"Anderson","email":"Natalie.Anderson@mail.de"}'),
(29, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '5', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"5","givenname":"Asuncion","familyname":"Koss","email":"Asuncion.Koss@mail.de"}'),
(30, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '6', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"6","givenname":"Dana","familyname":"Kemmer","email":"Dana.Kemmer@mail.de"}'),
(31, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '7', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"7","givenname":"Herbert","familyname":"Moen","email":"Herbert.Moen@mail.de"}'),
(32, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '8', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"8","givenname":"Dick","familyname":"Goodwin","email":"Dick.Goodwin@mail.de"}'),
(33, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '9', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"9","givenname":"Deangelo","familyname":"Hoeger","email":"Deangelo.Hoeger@mail.de"}'),
(34, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '10', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"10","givenname":"Zina","familyname":"Abernathy","email":"Zina.Abernathy@mail.de"}'),
(35, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '11', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"11","givenname":"Karima","familyname":"Adams","email":"Karima.Adams@mail.de"}'),
(36, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '12', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"12","givenname":"Evette","familyname":"Price","email":"Evette.Price@mail.de"}'),
(37, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '13', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"13","givenname":"Chester","familyname":"Mayert","email":"Chester.Mayert@mail.de"}'),
(38, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '14', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"14","givenname":"Trang","familyname":"Watsica","email":"Trang.Watsica@mail.de"}'),
(39, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '15', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"15","givenname":"Cameron","familyname":"Terry","email":"Cameron.Terry@mail.de"}'),
(40, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '16', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"16","givenname":"Tynisha","familyname":"Grant","email":"Tynisha.Grant@mail.de"}'),
(41, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '17', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"17","givenname":"Leila","familyname":"Thiel","email":"Leila.Thiel@mail.de"}'),
(42, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '18', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"18","givenname":"Lorenzo","familyname":"Weimann","email":"Lorenzo.Weimann@mail.de"}'),
(43, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '19', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"19","givenname":"Alonzo","familyname":"Keebler","email":"Alonzo.Keebler@mail.de"}'),
(44, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '20', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"20","givenname":"Maximo","familyname":"Olson","email":"Maximo.Olson@mail.de"}'),
(45, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '21', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"21","givenname":"Lisa","familyname":"Konopelski","email":"Lisa.Konopelski@mail.de"}'),
(46, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '22', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"22","givenname":"Samuel","familyname":"Parisian","email":"Samuel.Parisian@mail.de"}'),
(47, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '23', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"23","givenname":"Irish","familyname":"Grant","email":"Irish.Grant@mail.de"}'),
(48, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '24', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"24","givenname":"Donnell","familyname":"Olson","email":"Donnell.Olson@mail.de"}'),
(49, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '25', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"25","givenname":"Jeana","familyname":"MacGyver","email":"Jeana.MacGyver@mail.de"}'),
(50, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '26', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"26","givenname":"Mark","familyname":"Stroman","email":"Mark.Stroman@mail.de"}'),
(51, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '27', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"27","givenname":"Genevive","familyname":"Christiansen","email":"Genevive.Christiansen@mail.de"}'),
(52, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '28', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"28","givenname":"Marshall","familyname":"Wisoky","email":"Marshall.Wisoky@mail.de"}'),
(53, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '29', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"29","givenname":"Hugo","familyname":"Krajcik","email":"Hugo.Krajcik@mail.de"}'),
(54, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '30', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"30","givenname":"Genevive","familyname":"Weber","email":"Genevive.Weber@mail.de"}'),
(55, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '31', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"31","givenname":"Cleotilde","familyname":"Baumbach","email":"Cleotilde.Baumbach@mail.de"}'),
(56, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '32', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"32","givenname":"Kaitlyn","familyname":"Bins","email":"Kaitlyn.Bins@mail.de"}'),
(57, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '33', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"33","givenname":"Sergio","familyname":"Hettinger","email":"Sergio.Hettinger@mail.de"}'),
(58, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '34', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"34","givenname":"Beckie","familyname":"Heaney","email":"Beckie.Heaney@mail.de"}'),
(59, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '35', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"35","givenname":"Kareem","familyname":"Considine","email":"Kareem.Considine@mail.de"}'),
(60, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '36', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"36","givenname":"Kenyatta","familyname":"Wolff","email":"Kenyatta.Wolff@mail.de"}'),
(61, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '37', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"37","givenname":"Brock","familyname":"Romaguera","email":"Brock.Romaguera@mail.de"}'),
(62, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '38', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"38","givenname":"Carey","familyname":"Reynolds","email":"Carey.Reynolds@mail.de"}'),
(63, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '39', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"39","givenname":"Gabriel","familyname":"Rath","email":"Gabriel.Rath@mail.de"}'),
(64, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '40', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"40","givenname":"Tristan","familyname":"Dare","email":"Tristan.Dare@mail.de"}'),
(65, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '41', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"41","givenname":"Augustus","familyname":"Reilly","email":"Augustus.Reilly@mail.de"}'),
(66, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '42', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"42","givenname":"Dwayne","familyname":"Lynch","email":"Dwayne.Lynch@mail.de"}'),
(67, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '43', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"43","givenname":"Ben","familyname":"Corkery","email":"Ben.Corkery@mail.de"}'),
(68, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '44', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"44","givenname":"Alfredo","familyname":"Towne","email":"Alfredo.Towne@mail.de"}'),
(69, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '45', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"45","givenname":"Shante","familyname":"Becker","email":"Shante.Becker@mail.de"}'),
(70, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '46', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"46","givenname":"Elinor","familyname":"Bernier","email":"Elinor.Bernier@mail.de"}'),
(71, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '47', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"47","givenname":"Lee","familyname":"Dibbert","email":"Lee.Dibbert@mail.de"}'),
(72, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '48', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"48","givenname":"Augustina","familyname":"Friesen","email":"Augustina.Friesen@mail.de"}'),
(73, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '49', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"49","givenname":"Kanesha","familyname":"Olson","email":"Kanesha.Olson@mail.de"}'),
(74, '5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3', '50', 'AddUserEvent',
'{"type":"AddUserEvent","groupId":"5e1c2b9a-bf3a-4c9e-9bf0-f5beecb69eb3","userId":"50","givenname":"Era","familyname":"Willms","email":"Era.Willms@mail.de"}');

View File

@ -11,7 +11,7 @@
<main th:fragment="bodycontent"> <main th:fragment="bodycontent">
<div class="container-fluid"> <div class="container-fluid">
<h1 class="def-cursor" th:text="${group.getTitle()}"></h1> <h1 class="def-cursor" th:text="${group.getTitle().getGroupTitle()}"></h1>
<div class="row"> <div class="row">
<!--Gruppendetails--> <!--Gruppendetails-->
@ -40,7 +40,7 @@
<!--Anzahl Text--> <!--Anzahl Text-->
<div class="mb-2"> <div class="mb-2">
<span>Teilnehmer: </span> <span>Teilnehmer: </span>
<span th:text="${group.getMembers().size() + ' von ' + group.getUserLimit()}"></span> <span th:text="${group.getMembers().size() + ' von ' + group.getUserLimit().getUserLimit()}"></span>
</div> </div>
<!--Bearbeiten-Button--> <!--Bearbeiten-Button-->
@ -55,7 +55,7 @@
<div class="members"> <div class="members">
<ul class="list-group"> <ul class="list-group">
<li class="list-group-item d-flex justify-content-between" <li class="list-group-item d-flex justify-content-between"
th:each="member : ${group.getMembers()}"> th:each="member : ${group.getMembers().values()}">
<span th:text="${member.getGivenname() + ' ' + member.getFamilyname().charAt(0) + '.'}"></span> <span th:text="${member.getGivenname() + ' ' + member.getFamilyname().charAt(0) + '.'}"></span>
<span th:replace="~{fragments/groups :: userbadges}"></span> <span th:replace="~{fragments/groups :: userbadges}"></span>
</li> </li>

View File

@ -10,7 +10,7 @@
<main th:fragment="bodycontent"> <main th:fragment="bodycontent">
<div class="container-fluid"> <div class="container-fluid">
<h1 class="def-cursor" th:text="${group.getTitle()}"></h1> <h1 class="def-cursor" th:text="${group.getTitle().getGroupTitle()}"></h1>
<!--Fertig oder löschen--> <!--Fertig oder löschen-->
<div class="content"> <div class="content">
@ -96,7 +96,7 @@
</div> </div>
<ul class="list-group"> <ul class="list-group">
<li class="list-group-item d-flex justify-content-between" th:each="member : ${group.getMembers()}"> <li class="list-group-item d-flex justify-content-between" th:each="member : ${group.getMembers().values()}">
<div> <div>
<span th:text="${member.getGivenname() + ' ' + member.getFamilyname().charAt(0) + '.'}"></span> <span th:text="${member.getGivenname() + ' ' + member.getFamilyname().charAt(0) + '.'}"></span>
<span th:replace="~{fragments/groups :: userbadges}"></span> <span th:replace="~{fragments/groups :: userbadges}"></span>

View File

@ -10,8 +10,8 @@
<div class="input-group-prepend"> <div class="input-group-prepend">
<span class="input-group-text text-monospace">Gruppentitel:</span> <span class="input-group-text text-monospace">Gruppentitel:</span>
</div> </div>
<input type="text" class="form-control" th:name="title" th:value="${group?.getTitle()}" <input type="text" class="form-control" name="groupTitle" minlength="4" maxlength="128"
required minlength="4" maxlength="128"> th:value="${group?.getTitle()?.getGroupTitle()}" required>
</div> </div>
<!--Gruppenbeschreibung--> <!--Gruppenbeschreibung-->
@ -20,8 +20,8 @@
<div class="input-group-prepend"> <div class="input-group-prepend">
<span class="input-group-text text-monospace">Beschreibung:</span> <span class="input-group-text text-monospace">Beschreibung:</span>
</div> </div>
<textarea class="form-control" th:name="description" th:text="${group?.getDescription()}" <textarea class="form-control" name="groupDescription" minlength="4" maxlength="512"
required minlength="4" maxlength="512"></textarea> th:text="${group?.getDescription()?.getGroupDescription()}" required></textarea>
</div> </div>
</th:block> </th:block>
@ -47,11 +47,11 @@
<div class="input-group-prepend"> <div class="input-group-prepend">
<span class="input-group-text text-monospace">Gehört zu:</span> <span class="input-group-text text-monospace">Gehört zu:</span>
</div> </div>
<input type="hidden" id="parentdummy" value="00000000-0000-0000-0000-000000000000" disabled> <input type="hidden" id="parentdummy" name="parent" value="00000000-0000-0000-0000-000000000000" disabled>
<select class="custom-select" id="parentselect" name="parent"> <select class="custom-select" id="parentselect" name="parent">
<option value="00000000-0000-0000-0000-000000000000" selected>Keiner</option> <option value="00000000-0000-0000-0000-000000000000" selected>Keiner</option>
<option th:each="lecture : ${lectures}" th:value="${lecture.getId()}" <option th:each="lecture : ${lectures}" th:value="${lecture.getId()}"
th:text="${lecture.getTitle()}"></option> th:text="${lecture.getTitle().getGroupTitle()}"></option>
</select> </select>
</div> </div>
</div> </div>
@ -61,17 +61,17 @@
<th:block th:fragment="userlimit"> <th:block th:fragment="userlimit">
<label for="userlimit">Teilnehmeranzahl:</label> <label for="userlimit">Teilnehmeranzahl:</label>
<div class="btn-toolbar row mx-0" id="userlimit"> <div class="btn-toolbar row mx-0" id="userlimit">
<input type="hidden" name="userlimit" id="limit" value="999999" <input type="hidden" name="userLimit" id="limit" value="999999"
th:disabled="${group != null && group.getUserLimit() < 999999} ? 'disabled' : 'false'"> th:disabled="${group != null && group.getUserLimit().getUserLimit() < 999999} ? 'disabled' : 'false'">
<div class="btn-group btn-group-toggle col-sm-4 px-0" data-toggle="buttons"> <div class="btn-group btn-group-toggle col-sm-4 px-0" data-toggle="buttons">
<label class="btn btn-secondary active" onclick="disable('#limitselect'); enable('#limit')"> <label class="btn btn-secondary active" onclick="disable('#limitselect'); enable('#limit')">
<input type="radio" <input type="radio"
th:checked="${group != null && group.getUserLimit() < 999999} ? 'false' : 'checked'"> th:checked="${group != null && group.getUserLimit().getUserLimit() < 999999} ? 'false' : 'checked'">
Unbegrenzt Unbegrenzt
</label> </label>
<label class="btn btn-secondary" onclick="enable('#limitselect'); disable('#limit')"> <label class="btn btn-secondary" onclick="enable('#limitselect'); disable('#limit')">
<input type="radio" <input type="radio"
th:checked="${group != null && group.getUserLimit() < 999999} ? 'checked' : 'false'"> th:checked="${group != null && group.getUserLimit().getUserLimit() < 999999} ? 'checked' : 'false'">
Begrenzt Begrenzt
</label> </label>
</div> </div>
@ -81,10 +81,10 @@
<div class="input-group-prepend"> <div class="input-group-prepend">
<span class="input-group-text text-monospace">Limit:</span> <span class="input-group-text text-monospace">Limit:</span>
</div> </div>
<input type="number" class="form-control" name="userlimit" <input type="number" class="form-control" name="userLimit"
th:value="${group != null} ? ${group.getUserLimit()} : '999999'" th:value="${group != null} ? ${group.getUserLimit().getUserLimit()} : '999999'"
min="1" max="999999" id="limitselect" required min="1" max="999999" id="limitselect" required
th:disabled="${group != null && group.getUserLimit() < 999999} ? 'false' : 'disabled'"> th:disabled="${group != null && group.getUserLimit().getUserLimit() < 999999} ? 'false' : 'disabled'">
<div class="input-group-append"> <div class="input-group-append">
<span class="input-group-text text-monospace">Teilnehmer</span> <span class="input-group-text text-monospace">Teilnehmer</span>
</div> </div>

View File

@ -15,9 +15,9 @@
th:if='${group.getType() == lecture}'>Veranstaltung</span> th:if='${group.getType() == lecture}'>Veranstaltung</span>
<span class="badge badge-pill parent" <span class="badge badge-pill parent"
th:unless="${parent == null || parent.getTitle() == null|| parent.getTitle() == ''}" th:unless="${parent == null || parent?.getTitle()?.getGroupTitle() == null|| parent?.getTitle()?.getGroupTitle() == ''}"
th:title="${'Die Gruppe gehört zur Veranstaltung ' + parent.getTitle() + '.'}" th:title="${'Die Gruppe gehört zur Veranstaltung ' + parent.getTitle().getGroupTitle() + '.'}"
th:text="${parent.getTitle()}">Parent</span> th:text="${parent.getTitle().getGroupTitle()}">Parent</span>
<!--Needs completly projected (cached) groups--> <!--Needs completly projected (cached) groups-->
<!--<span class="badge badge-success float-right" <!--<span class="badge badge-success float-right"
@ -39,7 +39,7 @@
<!--Description--> <!--Description-->
<div class="content-text-in"> <div class="content-text-in">
<span th:text="${group.getDescription()}"></span> <span th:text="${group.getDescription().getGroupDescription()}"></span>
</div> </div>
<!--<div class="content-text-in" th:if="${group.getMembers().contains(user.getId())}"></div>--> <!--<div class="content-text-in" th:if="${group.getMembers().contains(user.getId())}"></div>-->
@ -48,21 +48,21 @@
<!--Buttonbar zum Gruppe beitreten--> <!--Buttonbar zum Gruppe beitreten-->
<th:block th:fragment="joingroup"> <th:block th:fragment="joingroup">
<div class="content-heading"> <div class="content-heading">
<span th:if="${group.getMembers().size() < group.getUserLimit()}"> <span th:if="${group.getMembers().size() < group.getUserLimit().getUserLimit()}">
Möchtest du dieser Gruppe beitreten? Möchtest du dieser Gruppe beitreten?
</span> </span>
<span th:unless="${group.getMembers().size() < group.getUserLimit()}"> <span th:unless="${group.getMembers().size() < group.getUserLimit().getUserLimit()}">
Diese Gruppe hat ihre maximale Teilnehmeranzahl erreicht. Diese Gruppe hat ihre maximale Teilnehmeranzahl erreicht.
</span> </span>
</div> </div>
<div class="row"> <div class="row">
<form method="post" th:action="@{/gruppen2/details/{id}/join(id = ${group.getId()})}" <form method="post" th:action="@{/gruppen2/details/{id}/join(id = ${group.getId()})}"
th:if="${group.getMembers().size() < group.getUserLimit()}"> th:if="${group.getMembers().size() < group.getUserLimit().getUserLimit()}">
<button class="btn btn-success" type="submit">Gruppe beitreten.</button> <button class="btn btn-success" type="submit">Gruppe beitreten.</button>
</form> </form>
<div class="col" th:if="${group.getMembers().size() < group.getUserLimit()}"></div> <div class="col" th:if="${group.getMembers().size() < group.getUserLimit().getUserLimit()}"></div>
<a class="btn btn-primary" href="/gruppen2" <a class="btn btn-primary" href="/gruppen2"
type="submit">Startseite.</a> type="submit">Startseite.</a>

View File

@ -17,12 +17,12 @@
<div class="content" th:each="group: ${groups}"> <div class="content" th:each="group: ${groups}">
<div class="content-heading row"> <div class="content-heading row">
<a class="link col" th:href="@{/gruppen2/details/{id}(id=${group.getId()})}" <a class="link col" th:href="@{/gruppen2/details/{id}(id=${group.getId()})}"
th:text="${group.getTitle()}"></a> th:text="${group.getTitle().getGroupTitle()}"></a>
<span th:replace="~{fragments/groups :: badges}"></span> <span th:replace="~{fragments/groups :: badges}"></span>
</div> </div>
<div class="content-text-in"> <div class="content-text-in">
<span th:text="${group.getDescription()}"></span> <span th:text="${group.getDescription().getGroupDescription()}"></span>
</div> </div>
</div> </div>

View File

@ -10,8 +10,7 @@
<main th:fragment="bodycontent"> <main th:fragment="bodycontent">
<div class="container-fluid"> <div class="container-fluid">
<h1 class="def-cursor" th:text="${group.getTitle().getGroupTitle()}"></h1>
<h1 class="def-cursor" th:text="${group.getTitle()}"></h1>
<div class="content" th:insert="~{fragments/groups :: groupcontent}"></div> <div class="content" th:insert="~{fragments/groups :: groupcontent}"></div>

View File

@ -10,7 +10,7 @@
<main th:fragment="bodycontent"> <main th:fragment="bodycontent">
<div class="container-fluid"> <div class="container-fluid">
<h1 class="def-cursor" th:text="${group.getTitle()}"></h1> <h1 class="def-cursor" th:text="${group.getTitle().getGroupTitle()}"></h1>
<div class="content" th:insert="~{fragments/groups :: groupcontent}"></div> <div class="content" th:insert="~{fragments/groups :: groupcontent}"></div>

View File

@ -20,7 +20,7 @@
<div class="input-group-prepend"> <div class="input-group-prepend">
<span class="input-group-text text-monospace">Suchbegriff:</span> <span class="input-group-text text-monospace">Suchbegriff:</span>
</div> </div>
<input class="form-control" th:name="string" type="text"> <input class="form-control" name="string" type="text">
</div> </div>
<button class="btn btn-primary" type="submit">Suchen</button> <button class="btn btn-primary" type="submit">Suchen</button>
</form> </form>
@ -32,10 +32,10 @@
<span th:replace="~{fragments/groups :: badges}"></span> <span th:replace="~{fragments/groups :: badges}"></span>
<a class="link col" th:href="@{/gruppen2/details/{id}(id=${group.getId()})}" <a class="link col" th:href="@{/gruppen2/details/{id}(id=${group.getId()})}"
th:text="${group.getTitle()}"></a> th:text="${group.getTitle().getGroupTitle()}"></a>
</div> </div>
<div class="content-text-in"> <div class="content-text-in">
<span th:text="${group.getDescription()}"></span> <span th:text="${group.getDescription().getGroupDescription()}"></span>
</div> </div>
</div> </div>

View File

@ -2,9 +2,6 @@ package mops.gruppen2;
import com.github.javafaker.Faker; import com.github.javafaker.Faker;
import mops.gruppen2.domain.Account; import mops.gruppen2.domain.Account;
import mops.gruppen2.domain.Group;
import mops.gruppen2.domain.GroupType;
import mops.gruppen2.domain.Role;
import mops.gruppen2.domain.event.AddUserEvent; import mops.gruppen2.domain.event.AddUserEvent;
import mops.gruppen2.domain.event.CreateGroupEvent; import mops.gruppen2.domain.event.CreateGroupEvent;
import mops.gruppen2.domain.event.DeleteGroupEvent; import mops.gruppen2.domain.event.DeleteGroupEvent;
@ -14,6 +11,9 @@ import mops.gruppen2.domain.event.UpdateGroupDescriptionEvent;
import mops.gruppen2.domain.event.UpdateGroupTitleEvent; import mops.gruppen2.domain.event.UpdateGroupTitleEvent;
import mops.gruppen2.domain.event.UpdateRoleEvent; import mops.gruppen2.domain.event.UpdateRoleEvent;
import mops.gruppen2.domain.event.UpdateUserLimitEvent; import mops.gruppen2.domain.event.UpdateUserLimitEvent;
import mops.gruppen2.domain.model.Group;
import mops.gruppen2.domain.model.Role;
import mops.gruppen2.domain.model.Type;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
@ -151,7 +151,7 @@ public class TestBuilder {
} }
public static Event createPrivateGroupEvent(UUID groupId) { public static Event createPrivateGroupEvent(UUID groupId) {
return createGroupEvent(groupId, GroupType.PRIVATE); return createGroupEvent(groupId, Type.PRIVATE);
} }
public static Event createPrivateGroupEvent() { public static Event createPrivateGroupEvent() {
@ -159,14 +159,14 @@ public class TestBuilder {
} }
public static Event createPublicGroupEvent(UUID groupId) { public static Event createPublicGroupEvent(UUID groupId) {
return createGroupEvent(groupId, GroupType.PUBLIC); return createGroupEvent(groupId, Type.PUBLIC);
} }
public static Event createPublicGroupEvent() { public static Event createPublicGroupEvent() {
return createPublicGroupEvent(UUID.randomUUID()); return createPublicGroupEvent(UUID.randomUUID());
} }
public static Event createGroupEvent(UUID groupId, GroupType type) { public static Event createGroupEvent(UUID groupId, Type type) {
return new CreateGroupEvent( return new CreateGroupEvent(
groupId, groupId,
faker.random().hex(), faker.random().hex(),
@ -184,7 +184,7 @@ public class TestBuilder {
groupId, groupId,
faker.random().hex(), faker.random().hex(),
null, null,
GroupType.LECTURE Type.LECTURE
); );
} }

View File

@ -1,8 +1,8 @@
package mops.gruppen2.domain.event; package mops.gruppen2.domain.event;
import mops.gruppen2.domain.Group;
import mops.gruppen2.domain.exception.GroupFullException; import mops.gruppen2.domain.exception.GroupFullException;
import mops.gruppen2.domain.exception.UserAlreadyExistsException; import mops.gruppen2.domain.exception.UserAlreadyExistsException;
import mops.gruppen2.domain.model.Group;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static mops.gruppen2.TestBuilder.addUserEvent; import static mops.gruppen2.TestBuilder.addUserEvent;

View File

@ -1,8 +1,8 @@
package mops.gruppen2.domain.event; package mops.gruppen2.domain.event;
import mops.gruppen2.TestBuilder; import mops.gruppen2.TestBuilder;
import mops.gruppen2.domain.Group; import mops.gruppen2.domain.model.Group;
import mops.gruppen2.domain.GroupType; import mops.gruppen2.domain.model.Type;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static mops.gruppen2.TestBuilder.uuidMock; import static mops.gruppen2.TestBuilder.uuidMock;
@ -15,12 +15,12 @@ class CreateGroupEventTest {
Event createEvent = new CreateGroupEvent(uuidMock(0), Event createEvent = new CreateGroupEvent(uuidMock(0),
"A", "A",
uuidMock(1), uuidMock(1),
GroupType.PUBLIC); Type.PUBLIC);
Group group = TestBuilder.apply(createEvent); Group group = TestBuilder.apply(createEvent);
assertThat(group.getMembers()).hasSize(0); assertThat(group.getMembers()).hasSize(0);
assertThat(group.getType()).isEqualTo(GroupType.PUBLIC); assertThat(group.getType()).isEqualTo(Type.PUBLIC);
assertThat(group.getId()).isEqualTo(uuidMock(0)); assertThat(group.getId()).isEqualTo(uuidMock(0));
assertThat(group.getParent()).isEqualTo(uuidMock(1)); assertThat(group.getParent()).isEqualTo(uuidMock(1));
} }

View File

@ -1,8 +1,8 @@
package mops.gruppen2.domain.event; package mops.gruppen2.domain.event;
import mops.gruppen2.TestBuilder; import mops.gruppen2.TestBuilder;
import mops.gruppen2.domain.Group; import mops.gruppen2.domain.model.Group;
import mops.gruppen2.domain.GroupType; import mops.gruppen2.domain.model.Type;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static mops.gruppen2.TestBuilder.uuidMock; import static mops.gruppen2.TestBuilder.uuidMock;
@ -15,7 +15,7 @@ class DeleteGroupEventTest {
Event createEvent = new CreateGroupEvent(uuidMock(0), Event createEvent = new CreateGroupEvent(uuidMock(0),
"A", "A",
uuidMock(1), uuidMock(1),
GroupType.PUBLIC); Type.PUBLIC);
Event deleteEvent = new DeleteGroupEvent(uuidMock(0), "A"); Event deleteEvent = new DeleteGroupEvent(uuidMock(0), "A");
Group group = TestBuilder.apply(createEvent, deleteEvent); Group group = TestBuilder.apply(createEvent, deleteEvent);

View File

@ -1,8 +1,8 @@
package mops.gruppen2.domain.event; package mops.gruppen2.domain.event;
import mops.gruppen2.TestBuilder; import mops.gruppen2.TestBuilder;
import mops.gruppen2.domain.Group;
import mops.gruppen2.domain.exception.UserNotFoundException; import mops.gruppen2.domain.exception.UserNotFoundException;
import mops.gruppen2.domain.model.Group;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static mops.gruppen2.TestBuilder.addUserEvent; import static mops.gruppen2.TestBuilder.addUserEvent;

View File

@ -1,8 +1,8 @@
package mops.gruppen2.domain.event; package mops.gruppen2.domain.event;
import mops.gruppen2.TestBuilder; import mops.gruppen2.TestBuilder;
import mops.gruppen2.domain.Group;
import mops.gruppen2.domain.exception.GroupIdMismatchException; import mops.gruppen2.domain.exception.GroupIdMismatchException;
import mops.gruppen2.domain.model.Group;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static mops.gruppen2.TestBuilder.createPublicGroupEvent; import static mops.gruppen2.TestBuilder.createPublicGroupEvent;

View File

@ -1,8 +1,8 @@
package mops.gruppen2.domain.event; package mops.gruppen2.domain.event;
import mops.gruppen2.TestBuilder; import mops.gruppen2.TestBuilder;
import mops.gruppen2.domain.Group;
import mops.gruppen2.domain.exception.BadParameterException; import mops.gruppen2.domain.exception.BadParameterException;
import mops.gruppen2.domain.model.Group;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static mops.gruppen2.TestBuilder.createPublicGroupEvent; import static mops.gruppen2.TestBuilder.createPublicGroupEvent;

View File

@ -1,8 +1,8 @@
package mops.gruppen2.domain.event; package mops.gruppen2.domain.event;
import mops.gruppen2.TestBuilder; import mops.gruppen2.TestBuilder;
import mops.gruppen2.domain.Group;
import mops.gruppen2.domain.exception.BadParameterException; import mops.gruppen2.domain.exception.BadParameterException;
import mops.gruppen2.domain.model.Group;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static mops.gruppen2.TestBuilder.createPublicGroupEvent; import static mops.gruppen2.TestBuilder.createPublicGroupEvent;

View File

@ -1,8 +1,8 @@
package mops.gruppen2.domain.event; package mops.gruppen2.domain.event;
import mops.gruppen2.domain.Group;
import mops.gruppen2.domain.Role;
import mops.gruppen2.domain.exception.UserNotFoundException; import mops.gruppen2.domain.exception.UserNotFoundException;
import mops.gruppen2.domain.model.Group;
import mops.gruppen2.domain.model.Role;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static mops.gruppen2.TestBuilder.addUserEvent; import static mops.gruppen2.TestBuilder.addUserEvent;

View File

@ -1,7 +1,7 @@
package mops.gruppen2.domain.event; package mops.gruppen2.domain.event;
import mops.gruppen2.domain.Group;
import mops.gruppen2.domain.exception.BadParameterException; import mops.gruppen2.domain.exception.BadParameterException;
import mops.gruppen2.domain.model.Group;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static mops.gruppen2.TestBuilder.addUserEvent; import static mops.gruppen2.TestBuilder.addUserEvent;

View File

@ -1,8 +1,8 @@
package mops.gruppen2.domain.service; package mops.gruppen2.domain.service;
import mops.gruppen2.Gruppen2Application; import mops.gruppen2.Gruppen2Application;
import mops.gruppen2.domain.User;
import mops.gruppen2.domain.event.Event; import mops.gruppen2.domain.event.Event;
import mops.gruppen2.domain.model.User;
import mops.gruppen2.persistance.EventRepository; import mops.gruppen2.persistance.EventRepository;
import mops.gruppen2.persistance.dto.EventDTO; import mops.gruppen2.persistance.dto.EventDTO;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;

View File

@ -2,10 +2,10 @@ package mops.gruppen2.domain.service;
import mops.gruppen2.Gruppen2Application; import mops.gruppen2.Gruppen2Application;
import mops.gruppen2.TestBuilder; import mops.gruppen2.TestBuilder;
import mops.gruppen2.domain.Group;
import mops.gruppen2.domain.GroupType;
import mops.gruppen2.domain.User;
import mops.gruppen2.domain.event.Event; import mops.gruppen2.domain.event.Event;
import mops.gruppen2.domain.model.Group;
import mops.gruppen2.domain.model.Type;
import mops.gruppen2.domain.model.User;
import mops.gruppen2.persistance.EventRepository; import mops.gruppen2.persistance.EventRepository;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
@ -83,7 +83,7 @@ class GroupServiceTest {
assertThat(groups).hasSize(1); assertThat(groups).hasSize(1);
assertThat(groups.get(0).getMembers()).hasSize(5); assertThat(groups.get(0).getMembers()).hasSize(5);
assertThat(groups.get(0).getType()).isEqualTo(GroupType.PRIVATE); assertThat(groups.get(0).getType()).isEqualTo(Type.PRIVATE);
} }
//TODO: ProjectionServiceTest //TODO: ProjectionServiceTest