1

renaming + better use of wrappers

This commit is contained in:
Christoph
2020-04-13 01:06:59 +02:00
parent 85455fac17
commit f5d668fba2
38 changed files with 206 additions and 175 deletions

View File

@ -1,5 +1,7 @@
package mops.gruppen2.domain.event;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Value;
import lombok.extern.log4j.Log4j2;
import mops.gruppen2.domain.exception.EventException;
@ -14,14 +16,20 @@ import mops.gruppen2.domain.model.User;
@Log4j2
@Value
@AllArgsConstructor
public class AddUserEvent extends Event {
@JsonProperty("givenname")
String givenname;
@JsonProperty("familyname")
String familyname;
@JsonProperty("email")
String email;
public AddUserEvent(Group group, User user) {
super(group.getId(), user.getId());
super(group.getGroupid(), user.getUserid());
givenname = user.getGivenname();
familyname = user.getFamilyname();
email = user.getEmail();
@ -29,11 +37,11 @@ public class AddUserEvent extends Event {
@Override
protected void applyEvent(Group group) throws EventException {
ValidationHelper.throwIfMember(group, new User(userId));
ValidationHelper.throwIfMember(group, new User(userid));
ValidationHelper.throwIfGroupFull(group);
group.getMembers().put(userId, new User(userId, givenname, familyname, email));
group.getRoles().put(userId, Role.MEMBER);
group.getMembers().put(userid, new User(userid, givenname, familyname, email));
group.getRoles().put(userid, Role.MEMBER);
log.trace("\t\t\t\t\tNeue Members: {}", group.getMembers());
log.trace("\t\t\t\t\tNeue Rollen: {}", group.getRoles());

View File

@ -1,29 +1,36 @@
package mops.gruppen2.domain.event;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Value;
import lombok.extern.log4j.Log4j2;
import mops.gruppen2.domain.model.Group;
import mops.gruppen2.domain.model.Type;
import mops.gruppen2.domain.model.User;
import java.util.UUID;
@Log4j2
@Value
@AllArgsConstructor// Value generiert den allArgsConstrucot nur, wenn keiner explizit angegeben ist
public class CreateGroupEvent extends Event {
UUID groupParent;
@JsonProperty("parent")
UUID parent;
@JsonProperty("type")
Type type;
public CreateGroupEvent(UUID groupId, String userId, UUID parent, Type type) {
super(groupId, userId);
groupParent = parent;
public CreateGroupEvent(UUID groupId, User user, UUID parent, Type type) {
super(groupId, user.getUserid());
this.parent = parent;
this.type = type;
}
@Override
protected void applyEvent(Group group) {
group.setId(groupId);
group.setParent(groupParent);
group.setGroupid(groupid);
group.setParent(parent);
group.setType(type);
log.trace("\t\t\t\t\tNeue Gruppe: {}", group.toString());

View File

@ -1,5 +1,6 @@
package mops.gruppen2.domain.event;
import lombok.AllArgsConstructor;
import lombok.Value;
import lombok.extern.log4j.Log4j2;
import mops.gruppen2.domain.model.Group;
@ -7,10 +8,11 @@ import mops.gruppen2.domain.model.User;
@Log4j2
@Value
@AllArgsConstructor
public class DeleteGroupEvent extends Event {
public DeleteGroupEvent(Group group, User user) {
super(group.getId(), user.getId());
super(group.getGroupid(), user.getUserid());
}
@Override
@ -21,7 +23,7 @@ public class DeleteGroupEvent extends Event {
group.setDescription(null);
group.setType(null);
group.setParent(null);
group.setUserLimit(null);
group.setLimit(null);
log.trace("\t\t\t\t\tGelöschte Gruppe: {}", group);
}

View File

@ -1,5 +1,6 @@
package mops.gruppen2.domain.event;
import lombok.AllArgsConstructor;
import lombok.Value;
import lombok.extern.log4j.Log4j2;
import mops.gruppen2.domain.exception.EventException;
@ -12,18 +13,19 @@ import mops.gruppen2.domain.model.User;
*/
@Log4j2
@Value
@AllArgsConstructor
public class DeleteUserEvent extends Event {
public DeleteUserEvent(Group group, User user) {
super(group.getId(), user.getId());
super(group.getGroupid(), user.getUserid());
}
@Override
protected void applyEvent(Group group) throws EventException {
ValidationHelper.throwIfNoMember(group, new User(userId));
ValidationHelper.throwIfNoMember(group, new User(userid));
group.getMembers().remove(userId);
group.getRoles().remove(userId);
group.getMembers().remove(userid);
group.getRoles().remove(userid);
log.trace("\t\t\t\t\tNeue Members: {}", group.getMembers());
log.trace("\t\t\t\t\tNeue Rollen: {}", group.getRoles());

View File

@ -1,5 +1,6 @@
package mops.gruppen2.domain.event;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import lombok.AllArgsConstructor;
@ -12,32 +13,29 @@ import mops.gruppen2.domain.model.Group;
import java.util.UUID;
@Log4j2
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
property = "type"
)
@JsonSubTypes({
@JsonSubTypes.Type(value = AddUserEvent.class, name = "AddUserEvent"),
@JsonSubTypes.Type(value = CreateGroupEvent.class, name = "CreateGroupEvent"),
@JsonSubTypes.Type(value = DeleteUserEvent.class, name = "DeleteUserEvent"),
@JsonSubTypes.Type(value = UpdateGroupDescriptionEvent.class, name = "UpdateGroupDescriptionEvent"),
@JsonSubTypes.Type(value = UpdateGroupTitleEvent.class, name = "UpdateGroupTitleEvent"),
@JsonSubTypes.Type(value = UpdateRoleEvent.class, name = "UpdateRoleEvent"),
@JsonSubTypes.Type(value = DeleteGroupEvent.class, name = "DeleteGroupEvent"),
@JsonSubTypes.Type(value = UpdateUserLimitEvent.class, name = "UpdateUserLimitEvent")
})
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes({@JsonSubTypes.Type(value = AddUserEvent.class, name = "AddUserEvent"),
@JsonSubTypes.Type(value = CreateGroupEvent.class, name = "CreateGroupEvent"),
@JsonSubTypes.Type(value = DeleteUserEvent.class, name = "DeleteUserEvent"),
@JsonSubTypes.Type(value = UpdateGroupDescriptionEvent.class, name = "UpdateGroupDescriptionEvent"),
@JsonSubTypes.Type(value = UpdateGroupTitleEvent.class, name = "UpdateGroupTitleEvent"),
@JsonSubTypes.Type(value = UpdateRoleEvent.class, name = "UpdateRoleEvent"),
@JsonSubTypes.Type(value = DeleteGroupEvent.class, name = "DeleteGroupEvent"),
@JsonSubTypes.Type(value = UpdateUserLimitEvent.class, name = "UpdateUserLimitEvent")})
@Getter
@NoArgsConstructor
@AllArgsConstructor
@NoArgsConstructor // Lombok needs a default constructor in the base class
public abstract class Event {
protected UUID groupId;
protected String userId;
@JsonProperty("groupid")
protected UUID groupid;
@JsonProperty("userid")
protected String userid;
public Group apply(Group group) throws EventException {
checkGroupIdMatch(group.getId());
checkGroupIdMatch(group.getGroupid());
log.trace("Event angewendet:\t{}", this);
@ -52,7 +50,7 @@ public abstract class Event {
return;
}
if (!this.groupId.equals(groupId)) {
if (!groupid.equals(groupId)) {
throw new GroupIdMismatchException(getClass().toString());
}
}

View File

@ -1,5 +1,7 @@
package mops.gruppen2.domain.event;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Value;
import lombok.extern.log4j.Log4j2;
import mops.gruppen2.domain.model.Description;
@ -11,18 +13,20 @@ import mops.gruppen2.domain.model.User;
*/
@Log4j2
@Value
@AllArgsConstructor
public class UpdateGroupDescriptionEvent extends Event {
Description groupDescription;
@JsonProperty("desc")
Description description;
public UpdateGroupDescriptionEvent(Group group, User user, Description groupDescription) {
super(group.getId(), user.getId());
this.groupDescription = groupDescription;
public UpdateGroupDescriptionEvent(Group group, User user, Description description) {
super(group.getGroupid(), user.getUserid());
this.description = description;
}
@Override
protected void applyEvent(Group group) {
group.setDescription(groupDescription);
group.setDescription(description);
log.trace("\t\t\t\t\tNeue Beschreibung: {}", group.getDescription());
}

View File

@ -1,5 +1,7 @@
package mops.gruppen2.domain.event;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Value;
import lombok.extern.log4j.Log4j2;
import mops.gruppen2.domain.model.Group;
@ -11,18 +13,20 @@ import mops.gruppen2.domain.model.User;
*/
@Log4j2
@Value
@AllArgsConstructor
public class UpdateGroupTitleEvent extends Event {
Title newGroupTitle;
@JsonProperty("title")
Title title;
public UpdateGroupTitleEvent(Group group, User user, Title newGroupTitle) {
super(group.getId(), user.getId());
this.newGroupTitle = newGroupTitle;
public UpdateGroupTitleEvent(Group group, User user, Title title) {
super(group.getGroupid(), user.getUserid());
this.title = title;
}
@Override
protected void applyEvent(Group group) {
group.setTitle(newGroupTitle);
group.setTitle(title);
log.trace("\t\t\t\t\tNeuer Titel: {}", group.getTitle());
}

View File

@ -1,5 +1,7 @@
package mops.gruppen2.domain.event;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Value;
import lombok.extern.log4j.Log4j2;
import mops.gruppen2.domain.exception.UserNotFoundException;
@ -8,32 +10,27 @@ import mops.gruppen2.domain.model.Group;
import mops.gruppen2.domain.model.Role;
import mops.gruppen2.domain.model.User;
import java.util.UUID;
/**
* Aktualisiert die Gruppenrolle eines Teilnehmers.
*/
@Log4j2
@Value
@AllArgsConstructor
public class UpdateRoleEvent extends Event {
Role newRole;
@JsonProperty("role")
Role role;
public UpdateRoleEvent(UUID groupId, String userId, Role newRole) {
super(groupId, userId);
this.newRole = newRole;
}
public UpdateRoleEvent(Group group, User user, Role newRole) {
super(group.getId(), user.getId());
this.newRole = newRole;
public UpdateRoleEvent(Group group, User user, Role tole) {
super(group.getGroupid(), user.getUserid());
role = tole;
}
@Override
protected void applyEvent(Group group) throws UserNotFoundException {
ValidationHelper.throwIfNoMember(group, new User(userId));
ValidationHelper.throwIfNoMember(group, new User(userid));
group.getRoles().put(userId, newRole);
group.getRoles().put(userid, role);
log.trace("\t\t\t\t\tNeue Rollen: {}", group.getRoles());
}

View File

@ -1,5 +1,7 @@
package mops.gruppen2.domain.event;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Value;
import lombok.extern.log4j.Log4j2;
import mops.gruppen2.domain.exception.BadParameterException;
@ -10,23 +12,25 @@ import mops.gruppen2.domain.model.User;
@Log4j2
@Value
@AllArgsConstructor
public class UpdateUserLimitEvent extends Event {
Limit userLimit;
@JsonProperty("limit")
Limit limit;
public UpdateUserLimitEvent(Group group, User user, Limit userLimit) {
super(group.getId(), user.getId());
this.userLimit = userLimit;
public UpdateUserLimitEvent(Group group, User user, Limit limit) {
super(group.getGroupid(), user.getUserid());
this.limit = limit;
}
@Override
protected void applyEvent(Group group) throws EventException {
if (userLimit.getUserLimit() < group.getMembers().size()) {
if (limit.getUserLimit() < group.getMembers().size()) {
throw new BadParameterException("Teilnehmerlimit zu klein.");
}
group.setUserLimit(userLimit);
group.setLimit(limit);
log.trace("\t\t\t\t\tNeues UserLimit: {}", group.getUserLimit());
log.trace("\t\t\t\t\tNeues UserLimit: {}", group.getLimit());
}
}

View File

@ -25,7 +25,9 @@ public final class JsonHelper {
public static String serializeEvent(Event event) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(event);
String payload = mapper.writeValueAsString(event);
log.trace(payload);
return payload;
}
/**

View File

@ -28,7 +28,7 @@ public final class ValidationHelper {
* Überprüft, ob ein User in einer Gruppe teilnimmt.
*/
public static boolean checkIfMember(Group group, User user) {
return group.getMembers().containsKey(user.getId());
return group.getMembers().containsKey(user.getUserid());
}
public static boolean checkIfLastMember(User user, Group group) {
@ -39,7 +39,7 @@ public final class ValidationHelper {
* Überprüft, ob eine Gruppe voll ist.
*/
public static boolean checkIfGroupFull(Group group) {
return group.getMembers().size() >= group.getUserLimit().getUserLimit();
return group.getMembers().size() >= group.getLimit().getUserLimit();
}
/**
@ -54,7 +54,7 @@ public final class ValidationHelper {
*/
public static boolean checkIfAdmin(Group group, User user) {
if (checkIfMember(group, user)) {
return group.getRoles().get(user.getId()) == ADMIN;
return group.getRoles().get(user.getUserid()) == ADMIN;
}
return false;
}

View File

@ -1,20 +1,21 @@
package mops.gruppen2.domain.model;
import lombok.Getter;
import com.fasterxml.jackson.annotation.JsonProperty;
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)
@JsonProperty("desc")
String groupDescription;
@Override
public String toString() {
return groupDescription;
}
}

View File

@ -19,7 +19,7 @@ import java.util.UUID;
public class Group {
@EqualsAndHashCode.Include
private UUID id;
private UUID groupid;
@ToString.Exclude
private UUID parent;
@ -30,7 +30,7 @@ public class Group {
private Description description;
@ToString.Exclude
private Limit userLimit = new Limit(1); // Add initial user
private Limit limit = new Limit(1); // Add initial user
@ToString.Exclude
private final Map<String, User> members = new HashMap<>();

View File

@ -1,19 +1,21 @@
package mops.gruppen2.domain.model;
import com.fasterxml.jackson.annotation.JsonProperty;
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)
@JsonProperty("limit")
long userLimit;
@Override
public String toString() {
return String.valueOf(userLimit);
}
}

View File

@ -1,19 +1,21 @@
package mops.gruppen2.domain.model;
import com.fasterxml.jackson.annotation.JsonProperty;
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)
@JsonProperty("title")
String groupTitle;
@Override
public String toString() {
return groupTitle;
}
}

View File

@ -2,31 +2,30 @@ package mops.gruppen2.domain.model;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.Value;
import org.keycloak.KeycloakPrincipal;
import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken;
@Getter
@Value
@AllArgsConstructor
@NoArgsConstructor // Für Jackson: CSV-Import
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
@ToString
public class User {
@EqualsAndHashCode.Include
private String id;
String userid;
String givenname;
private String givenname;
@ToString.Exclude
private String familyname;
String familyname;
@ToString.Exclude
private String email;
String email;
public User(KeycloakAuthenticationToken token) {
KeycloakPrincipal principal = (KeycloakPrincipal) token.getPrincipal();
id = principal.getName();
userid = principal.getName();
givenname = principal.getKeycloakSecurityContext().getIdToken().getGivenName();
familyname = principal.getKeycloakSecurityContext().getIdToken().getFamilyName();
email = principal.getKeycloakSecurityContext().getIdToken().getEmail();
@ -35,10 +34,10 @@ public class User {
/**
* User identifizieren sich über die Id, mehr wird also manchmal nicht benötigt.
*
* @param userId Die User Id
* @param userid Die User Id
*/
public User(String userId) {
id = userId;
public User(String userid) {
this.userid = userid;
givenname = "";
familyname = "";
email = "";

View File

@ -84,8 +84,8 @@ public class EventStoreService {
try {
String payload = JsonHelper.serializeEvent(event);
return new EventDTO(null,
event.getGroupId().toString(),
event.getUserId(),
event.getGroupid().toString(),
event.getUserid(),
getEventType(event),
payload);
} catch (JsonProcessingException e) {
@ -181,7 +181,7 @@ public class EventStoreService {
return createEvents.stream()
.filter(event -> event instanceof CreateGroupEvent)
.map(Event::getGroupId)
.map(Event::getGroupid)
.collect(Collectors.toList());
}
@ -194,14 +194,14 @@ public class EventStoreService {
List<Event> userEvents = findLatestEventsFromGroupsByUser(user);
List<UUID> deletedIds = findLatestEventsFromGroupsByType("DeleteGroupEvent")
.stream()
.map(Event::getGroupId)
.map(Event::getGroupid)
.collect(Collectors.toList());
userEvents.removeIf(event -> deletedIds.contains(event.getGroupId()));
userEvents.removeIf(event -> deletedIds.contains(event.getGroupid()));
return userEvents.stream()
.filter(event -> event instanceof AddUserEvent)
.map(Event::getGroupId)
.map(Event::getGroupid)
.collect(Collectors.toList());
}
@ -244,7 +244,7 @@ public class EventStoreService {
* @return Eine Liste von einem Add- oder DeleteUserEvent pro Gruppe
*/
private List<Event> findLatestEventsFromGroupsByUser(User user) {
return getEventsFromDTOs(eventStore.findLatestEventDTOsPartitionedByGroupByUser(user.getId()));
return getEventsFromDTOs(eventStore.findLatestEventDTOsPartitionedByGroupByUser(user.getUserid()));
}

View File

@ -106,7 +106,7 @@ public class GroupService {
* @return Das neue Teilnehmermaximum
*/
private static Limit getAdjustedUserLimit(List<User> newUsers, Group group) {
return new Limit(Math.max((long) group.getMembers().size() + newUsers.size(), group.getUserLimit().getUserLimit()));
return new Limit(Math.max((long) group.getMembers().size() + newUsers.size(), group.getLimit().getUserLimit()));
}
/**
@ -122,7 +122,7 @@ public class GroupService {
ValidationHelper.throwIfNoMember(group, user);
ValidationHelper.throwIfLastAdmin(user, group);
Role role = group.getRoles().get(user.getId());
Role role = group.getRoles().get(user.getUserid());
updateRole(user, group, role.toggle());
}
@ -136,7 +136,7 @@ public class GroupService {
*/
private Group createGroup(User user, UUID parent, Type type) {
Event event = new CreateGroupEvent(UUID.randomUUID(),
user.getId(),
user,
parent,
type);
Group group = new Group();
@ -248,7 +248,7 @@ public class GroupService {
private void updateRole(User user, Group group, Role role) {
ValidationHelper.throwIfNoMember(group, user);
if (role == group.getRoles().get(user.getId())) {
if (role == group.getRoles().get(user.getUserid())) {
return;
}
@ -266,7 +266,7 @@ public class GroupService {
public void updateUserLimit(User user, Group group, Limit userLimit) {
ValidationHelper.throwIfNoAdmin(group, user);
if (userLimit == group.getUserLimit()) {
if (userLimit == group.getLimit()) {
return;
}

View File

@ -22,16 +22,16 @@ public class InviteService {
void createLink(Group group) {
inviteRepository.save(new InviteLinkDTO(null,
group.getId().toString(),
group.getGroupid().toString(),
UUID.randomUUID().toString()));
log.debug("Link wurde erzeugt! (Gruppe: {})", group.getId());
log.debug("Link wurde erzeugt! (Gruppe: {})", group.getGroupid());
}
void destroyLink(Group group) {
inviteRepository.deleteLinkOfGroup(group.getId().toString());
inviteRepository.deleteLinkOfGroup(group.getGroupid().toString());
log.debug("Link wurde zerstört! (Gruppe: {})", group.getId());
log.debug("Link wurde zerstört! (Gruppe: {})", group.getGroupid());
}
public UUID getGroupIdFromLink(String link) {
@ -45,10 +45,10 @@ public class InviteService {
public String getLinkByGroup(Group group) {
try {
return inviteRepository.findLinkByGroupId(group.getId().toString());
return inviteRepository.findLinkByGroupId(group.getGroupid().toString());
} catch (Exception e) {
log.error("Link zu Gruppe ({}) konnte nicht gefunden werden!", group.getId(), e);
throw new NoInviteExistException(group.getId().toString());
log.error("Link zu Gruppe ({}) konnte nicht gefunden werden!", group.getGroupid(), e);
throw new NoInviteExistException(group.getGroupid().toString());
}
}
}

View File

@ -48,7 +48,7 @@ public class ProjectionService {
static List<Group> projectGroups(List<Event> events) throws EventException {
Map<UUID, Group> groupMap = new HashMap<>();
events.forEach(event -> event.apply(getOrCreateGroup(groupMap, event.getGroupId())));
events.forEach(event -> event.apply(getOrCreateGroup(groupMap, event.getGroupid())));
return new ArrayList<>(groupMap.values());
}
@ -119,7 +119,6 @@ public class ProjectionService {
* @throws EventException Projektionsfehler
*/
@Cacheable("groups")
//TODO: remove userID param
public List<Group> projectPublicGroups() throws EventException {
List<UUID> groupIds = eventStoreService.findExistingGroupIds();
List<Event> events = eventStoreService.findEventsByGroupAndType(groupIds,
@ -219,7 +218,7 @@ public class ProjectionService {
void removeUserGroups(List<Group> groups, User user) {
List<UUID> userGroups = eventStoreService.findExistingUserGroups(user);
groups.removeIf(group -> userGroups.contains(group.getId()));
groups.removeIf(group -> userGroups.contains(group.getGroupid()));
}
}

View File

@ -70,6 +70,6 @@ public class GroupCreationController {
groupService.addUsersToGroup(CsvHelper.readCsvFile(create.getFile()), group, user);
}
return "redirect:/gruppen2/details/" + IdHelper.uuidToString(group.getId());
return "redirect:/gruppen2/details/" + IdHelper.uuidToString(group.getGroupid());
}
}

View File

@ -204,7 +204,7 @@ public class GroupDetailsController {
ValidationHelper.throwIfNoAdmin(group, user);
// Der eingeloggte User kann sich nicht selbst entfernen (er kann aber verlassen)
if (!userId.equals(user.getId())) {
if (!userId.equals(user.getUserid())) {
groupService.deleteUser(new User(userId), group);
}

View File

@ -71,12 +71,12 @@ public class SearchAndInviteController {
// Gruppe öffentlich
if (group.getType() == Type.PUBLIC) {
return "redirect:/gruppen2/details/" + group.getId();
return "redirect:/gruppen2/details/" + group.getGroupid();
}
// Bereits Mitglied
if (ValidationHelper.checkIfMember(group, user)) {
return "redirect:/gruppen2/details/" + group.getId();
return "redirect:/gruppen2/details/" + group.getGroupid();
}
return "link";

View File

@ -11,7 +11,7 @@
<main th:fragment="bodycontent">
<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="row">
<!--Gruppendetails-->
@ -27,7 +27,7 @@
<!--Spacer-->
<span class="col"></span>
<form method="post" th:action="@{/gruppen2/details/{id}/leave(id=${group.getId()})}">
<form method="post" th:action="@{/gruppen2/details/{id}/leave(id=${group.getGroupid()})}">
<button class="btn btn-danger btn-bar" type="submit">Gruppe verlassen
</button>
</form>
@ -40,13 +40,13 @@
<!--Anzahl Text-->
<div class="mb-2">
<span>Teilnehmer: </span>
<span th:text="${group.getMembers().size() + ' von ' + group.getUserLimit().getUserLimit()}"></span>
<span th:text="${group.getMembers().size() + ' von ' + group.getLimit().getUserLimit()}"></span>
</div>
<!--Bearbeiten-Button-->
<div class="mb-2" th:if="${group.getRoles().get(user.getId()) == admin}">
<div class="mb-2" th:if="${group.getRoles().get(user.getUserid()) == admin}">
<form method="get"
th:action="@{/gruppen2/details/{id}/edit(id=${group.getId()})}">
th:action="@{/gruppen2/details/{id}/edit(id=${group.getGroupid()})}">
<button class="btn btn-secondary btn-block">Gruppe verwalten</button>
</form>
</div>

View File

@ -10,19 +10,19 @@
<main th:fragment="bodycontent">
<div class="container-fluid">
<h1 class="def-cursor" th:text="${group.getTitle().getGroupTitle()}"></h1>
<h1 class="def-cursor" th:text="${group.getTitle()}"></h1>
<!--Fertig oder löschen-->
<div class="content">
<div class="row">
<form method="get" th:action="@{/gruppen2/details/{id}(id=${group.getId()})}">
<form method="get" th:action="@{/gruppen2/details/{id}(id=${group.getGroupid()})}">
<button class="btn btn-primary">Fertig</button>
</form>
<!--Spacer-->
<span class="col"></span>
<form method="post" th:action="@{/gruppen2/details/{id}/edit/destroy(id=${group.getId()})}">
<form method="post" th:action="@{/gruppen2/details/{id}/edit/destroy(id=${group.getGroupid()})}">
<button class="btn btn-danger btn-bar" type="submit">Gruppe löschen
</button>
</form>
@ -50,7 +50,7 @@
<!--Beschreibung + Titel-->
<div class="content-text">
<form th:action="@{/gruppen2/details/{id}/edit/meta(id=${group.getId()})}"
<form th:action="@{/gruppen2/details/{id}/edit/meta(id=${group.getGroupid()})}"
method="post">
<div th:replace="~{fragments/forms :: meta}"></div>
@ -63,7 +63,7 @@
<!--Userlimit-->
<div class="content-text-in">
<form th:action="@{/gruppen2/details/{id}/edit/userlimit(id=${group.getId()})}"
<form th:action="@{/gruppen2/details/{id}/edit/userlimit(id=${group.getGroupid()})}"
method="post">
<div th:replace="~{fragments/forms :: userlimit}"></div>
@ -76,7 +76,7 @@
<!--CSV Import-->
<div class="content-text mb-0">
<form th:action="@{/gruppen2/details/{id}/edit/csv(id=${group.getId()})}"
<form th:action="@{/gruppen2/details/{id}/edit/csv(id=${group.getGroupid()})}"
th:if="${account.getRoles().contains('orga')}"
enctype="multipart/form-data" method="post">
@ -103,13 +103,13 @@
</div>
<div class="d-flex">
<form th:action="@{/gruppen2/details/{id}/edit/delete/{userid}(id=${group.getId()}, userid=${member.getId()})}"
th:unless="${member.getId() == account.getName()}"
<form th:action="@{/gruppen2/details/{id}/edit/delete/{userid}(id=${group.getGroupid()}, userid=${member.getUserid()})}"
th:unless="${member.getUserid() == account.getName()}"
method="post">
<button type="submit" class="btn btn-danger mr-2">Entfernen</button>
</form>
<form th:action="@{/gruppen2/details/{id}/edit/role/{userid}(id=${group.getId()}, userid=${member.getId()})}"
<form th:action="@{/gruppen2/details/{id}/edit/role/{userid}(id=${group.getGroupid()}, userid=${member.getUserid()})}"
method="post">
<button type="submit" class="btn btn-warning">Rolle ändern</button>
</form>

View File

@ -11,7 +11,7 @@
<span class="input-group-text text-monospace">Gruppentitel:</span>
</div>
<input type="text" class="form-control" name="groupTitle" minlength="4" maxlength="128"
th:value="${group?.getTitle()?.getGroupTitle()}" required>
th:value="${group?.getTitle()}" required>
</div>
<!--Gruppenbeschreibung-->
@ -50,8 +50,8 @@
<input type="hidden" id="parentdummy" name="parent" value="00000000-0000-0000-0000-000000000000" disabled>
<select class="custom-select" id="parentselect" name="parent">
<option value="00000000-0000-0000-0000-000000000000" selected>Keiner</option>
<option th:each="lecture : ${lectures}" th:value="${lecture.getId()}"
th:text="${lecture.getTitle().getGroupTitle()}"></option>
<option th:each="lecture : ${lectures}" th:value="${lecture.getGroupid()}"
th:text="${lecture.getTitle()}"></option>
</select>
</div>
</div>
@ -62,16 +62,16 @@
<label for="userlimit">Teilnehmeranzahl:</label>
<div class="btn-toolbar row mx-0" id="userlimit">
<input type="hidden" name="userLimit" id="limit" value="999999"
th:disabled="${group != null && group.getUserLimit().getUserLimit() < 999999} ? 'disabled' : 'false'">
th:disabled="${group != null && group.getLimit().getUserLimit() < 999999} ? 'disabled' : 'false'">
<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')">
<input type="radio"
th:checked="${group != null && group.getUserLimit().getUserLimit() < 999999} ? 'false' : 'checked'">
th:checked="${group != null && group.getLimit().getUserLimit() < 999999} ? 'false' : 'checked'">
Unbegrenzt
</label>
<label class="btn btn-secondary" onclick="enable('#limitselect'); disable('#limit')">
<input type="radio"
th:checked="${group != null && group.getUserLimit().getUserLimit() < 999999} ? 'checked' : 'false'">
th:checked="${group != null && group.getLimit().getUserLimit() < 999999} ? 'checked' : 'false'">
Begrenzt
</label>
</div>
@ -82,9 +82,9 @@
<span class="input-group-text text-monospace">Limit:</span>
</div>
<input type="number" class="form-control" name="userLimit"
th:value="${group != null} ? ${group.getUserLimit().getUserLimit()} : '999999'"
th:value="${group != null} ? ${group.getLimit().getUserLimit()} : '999999'"
min="1" max="999999" id="limitselect" required
th:disabled="${group != null && group.getUserLimit().getUserLimit() < 999999} ? 'false' : 'disabled'">
th:disabled="${group != null && group.getLimit().getUserLimit() < 999999} ? 'false' : 'disabled'">
<div class="input-group-append">
<span class="input-group-text text-monospace">Teilnehmer</span>
</div>

View File

@ -15,9 +15,9 @@
th:if='${group.getType() == lecture}'>Veranstaltung</span>
<span class="badge badge-pill parent"
th:unless="${parent == null || parent?.getTitle()?.getGroupTitle() == null|| parent?.getTitle()?.getGroupTitle() == ''}"
th:title="${'Die Gruppe gehört zur Veranstaltung ' + parent.getTitle().getGroupTitle() + '.'}"
th:text="${parent.getTitle().getGroupTitle()}">Parent</span>
th:unless="${parent == null || parent?.getTitle() == null|| parent?.getTitle() == ''}"
th:title="${'Die Gruppe gehört zur Veranstaltung ' + parent.getTitle() + '.'}"
th:text="${parent.getTitle()}">Parent</span>
<!--Needs completly projected (cached) groups-->
<!--<span class="badge badge-success float-right"
@ -28,7 +28,7 @@
<!--User Badges-->
<th:block th:fragment="userbadges">
<span class="badge badge-success align-self-start ml-2"
th:if="${group.getRoles().get(member.getId()) == admin}">Admin</span>
th:if="${group.getRoles().get(member.getUserid()) == admin}">Admin</span>
</th:block>
<th:block th:fragment="groupcontent">
@ -48,21 +48,21 @@
<!--Buttonbar zum Gruppe beitreten-->
<th:block th:fragment="joingroup">
<div class="content-heading">
<span th:if="${group.getMembers().size() < group.getUserLimit().getUserLimit()}">
<span th:if="${group.getMembers().size() < group.getLimit().getUserLimit()}">
Möchtest du dieser Gruppe beitreten?
</span>
<span th:unless="${group.getMembers().size() < group.getUserLimit().getUserLimit()}">
<span th:unless="${group.getMembers().size() < group.getLimit().getUserLimit()}">
Diese Gruppe hat ihre maximale Teilnehmeranzahl erreicht.
</span>
</div>
<div class="row">
<form method="post" th:action="@{/gruppen2/details/{id}/join(id = ${group.getId()})}"
th:if="${group.getMembers().size() < group.getUserLimit().getUserLimit()}">
<form method="post" th:action="@{/gruppen2/details/{id}/join(id = ${group.getGroupId()})}"
th:if="${group.getMembers().size() < group.getLimit().getUserLimit()}">
<button class="btn btn-success" type="submit">Gruppe beitreten.</button>
</form>
<div class="col" th:if="${group.getMembers().size() < group.getUserLimit().getUserLimit()}"></div>
<div class="col" th:if="${group.getMembers().size() < group.getLimit().getUserLimit()}"></div>
<a class="btn btn-primary" href="/gruppen2"
type="submit">Startseite.</a>

View File

@ -16,8 +16,8 @@
<!--Gruppenliste belegte Gruppen-->
<div class="content" th:each="group: ${groups}">
<div class="content-heading row">
<a class="link col" th:href="@{/gruppen2/details/{id}(id=${group.getId()})}"
th:text="${group.getTitle().getGroupTitle()}"></a>
<a class="link col" th:href="@{/gruppen2/details/{id}(id=${group.getGroupid()})}"
th:text="${group.getTitle()}"></a>
<span th:replace="~{fragments/groups :: badges}"></span>
</div>

View File

@ -10,7 +10,7 @@
<main th:fragment="bodycontent">
<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>

View File

@ -10,7 +10,7 @@
<main th:fragment="bodycontent">
<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>

View File

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

View File

@ -230,7 +230,7 @@ public class TestBuilder {
Collections.shuffle(shuffle);
for (Event event : shuffle) {
removeEvents.add(new DeleteUserEvent(event.getGroupId(), event.getUserId()));
removeEvents.add(new DeleteUserEvent(event.getGroupid(), event.getUserid()));
if (removeEvents.size() >= count) {
break;
@ -249,7 +249,7 @@ public class TestBuilder {
*/
public static List<Event> deleteUserEvents(Group group) {
return group.getMembers().parallelStream()
.map(user -> deleteUserEvent(group.getId(), user.getId()))
.map(user -> deleteUserEvent(group.getGroupid(), user.getUserId()))
.collect(Collectors.toList());
}

View File

@ -21,7 +21,7 @@ class CreateGroupEventTest {
assertThat(group.getMembers()).hasSize(0);
assertThat(group.getType()).isEqualTo(Type.PUBLIC);
assertThat(group.getId()).isEqualTo(uuidMock(0));
assertThat(group.getGroupid()).isEqualTo(uuidMock(0));
assertThat(group.getParent()).isEqualTo(uuidMock(1));
}
}

View File

@ -22,8 +22,8 @@ class DeleteGroupEventTest {
assertThat(group.getMembers()).isEmpty();
assertThat(group.getType()).isEqualTo(null);
assertThat(group.getUserLimit()).isEqualTo(0);
assertThat(group.getId()).isEqualTo(uuidMock(0));
assertThat(group.getLimit()).isEqualTo(0);
assertThat(group.getGroupid()).isEqualTo(uuidMock(0));
assertThat(group.getParent()).isEqualTo(null);
}
}

View File

@ -20,7 +20,7 @@ class UpdateUserLimitEventTest {
Group group = apply(createEvent, updateEvent);
assertThat(group.getUserLimit()).isEqualTo(5);
assertThat(group.getLimit()).isEqualTo(5);
}
@Test

View File

@ -72,8 +72,8 @@ class EventStoreServiceTest {
EventDTO dto = EventStoreService.getDTOFromEvent(event);
assertThat(dto.getGroup_id()).isEqualTo(event.getGroupId().toString());
assertThat(dto.getUser_id()).isEqualTo(event.getUserId());
assertThat(dto.getGroup_id()).isEqualTo(event.getGroupid().toString());
assertThat(dto.getUser_id()).isEqualTo(event.getUserid());
assertThat(dto.getEvent_id()).isEqualTo(null);
assertThat(dto.getEvent_type()).isEqualTo("CreateGroupEvent");
}

View File

@ -108,8 +108,8 @@ class GroupServiceTest {
List<UUID> groupIds = Arrays.asList(uuidMock(0), uuidMock(1));
assertThat(eventStoreService.findGroupEvents(groupIds)).hasSize(2);
assertThat(eventStoreService.findGroupEvents(groupIds).get(0).getGroupId()).isEqualTo(uuidMock(0));
assertThat(eventStoreService.findGroupEvents(groupIds).get(1).getGroupId()).isEqualTo(uuidMock(1));
assertThat(eventStoreService.findGroupEvents(groupIds).get(0).getGroupid()).isEqualTo(uuidMock(0));
assertThat(eventStoreService.findGroupEvents(groupIds).get(1).getGroupid()).isEqualTo(uuidMock(1));
}
//TODO: ProjectionServiceTest

View File

@ -161,7 +161,7 @@ class APIControllerTest {
void getGroupFromId_singleGroup() {
eventStoreService.saveAll(createPrivateGroupEvent(uuidMock(0)));
assertThat(apiController.getApiGroup(uuidMock(0).toString()).getId()).isEqualTo(uuidMock(0));
assertThat(apiController.getApiGroup(uuidMock(0).toString()).getGroupid()).isEqualTo(uuidMock(0));
}
@Test