1

Merge remote-tracking branch 'origin/master' into group-invite-links

# Conflicts:
#	src/main/java/mops/gruppen2/controller/Gruppen2Controller.java
#	src/main/java/mops/gruppen2/repository/EventRepository.java
#	src/main/java/mops/gruppen2/service/ControllerService.java
#	src/main/java/mops/gruppen2/service/GroupService.java
This commit is contained in:
[Mahgs]
2020-03-18 13:18:34 +01:00
25 changed files with 303 additions and 301 deletions

View File

@ -1,42 +0,0 @@
package mops.gruppen2.domain;
import com.google.common.base.Throwables;
import lombok.Getter;
import mops.gruppen2.domain.Exceptions.EventException;
import mops.gruppen2.domain.Exceptions.UserAlreadyExistsException;
import mops.gruppen2.domain.event.Event;
import javax.swing.table.TableRowSorter;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import static java.lang.String.format;
/**
* Repräsentiert viele Events als aggregiertes Objekt.
*/
@Getter
public abstract class Aggregate {
protected long id;
/**
* Ruft die spezifische applyEvent-Methode im entsprechenden Aggregat auf.
*
* @param event Event, welches aggregiert wird
*/
public void applyEvent(Event event) throws EventException {
try {
Method method = this.getClass().getDeclaredMethod("applyEvent", event.getClass());
method.setAccessible(true);
method.invoke(this, event);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
EventException f = (EventException) e.getTargetException();
throw f;
}
}
}

View File

@ -1,9 +0,0 @@
package mops.gruppen2.domain.Exceptions;
import mops.gruppen2.domain.event.Event;
public class GroupDoesNotExistException extends EventException {
public GroupDoesNotExistException(String msg) {
super(msg);
}
}

View File

@ -1,7 +1,9 @@
package mops.gruppen2.domain;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import mops.gruppen2.domain.Exceptions.UserAlreadyExistsException;
import mops.gruppen2.domain.Exceptions.UserNotFoundException;
import mops.gruppen2.domain.event.*;
@ -13,7 +15,10 @@ import java.util.*;
*/
@EqualsAndHashCode(callSuper = false)
@Getter
public class Group extends Aggregate {
@Setter
@AllArgsConstructor
public class Group {
private long id;
private String title;
private String description;
private final List<User> members;
@ -28,58 +33,4 @@ public class Group extends Aggregate {
this.roles = new HashMap<>();
}
private void applyEvent(CreateGroupEvent event) {
id = event.getGroup_id();
visibility = event.getGroupVisibility();
parent = event.getGroupParent();
type = event.getGroupType();
}
private void applyEvent(UpdateRoleEvent event) throws UserNotFoundException {
User user;
Optional<User> userOptional = members.stream()
.filter(u -> u.getUser_id().equals(event.getUser_id()))
.findFirst();
if (userOptional.isPresent()) {
user = userOptional.get();
} else {
throw new UserNotFoundException("Nutzer wurde nicht gefunden!");
}
if (roles.containsKey(user) && event.getNewRole() == Role.MEMBER) {
roles.remove(user);
} else {
roles.put(user.getUser_id(), event.getNewRole());
}
}
private void applyEvent(AddUserEvent event) throws UserAlreadyExistsException {
User user = new User(event.getUser_id(), event.getGivenname(), event.getFamilyname(), event.getEmail());
if (!this.members.contains(user)) {
this.members.add(user);
} else {
throw new UserAlreadyExistsException("Nutzer bereits in Gruppe vorhanden!");
}
}
private void applyEvent(UpdateGroupTitleEvent event) {
this.title = event.getNewGroupTitle();
}
private void applyEvent(UpdateGroupDescriptionEvent event) {
this.description = event.getNewGroupDescription();
}
private void applyEvent(DeleteUserEvent event) throws UserNotFoundException {
User user = new User(event.getUser_id(), "", "", "");
if (this.members.contains(user)) {
this.members.remove(user);
} else {
throw new UserNotFoundException("Nutzer wurde nicht gefunden!");
}
}
}

View File

@ -3,6 +3,10 @@ package mops.gruppen2.domain.event;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import mops.gruppen2.domain.Exceptions.EventException;
import mops.gruppen2.domain.Exceptions.UserAlreadyExistsException;
import mops.gruppen2.domain.Group;
import mops.gruppen2.domain.Role;
import mops.gruppen2.domain.User;
/**
@ -16,13 +20,6 @@ public class AddUserEvent extends Event {
String familyname;
String email;
public AddUserEvent(Long event_id, Long group_id, String user_id, String givenname, String familyname, String email) {
super(event_id, group_id, user_id);
this.givenname = givenname;
this.familyname = familyname;
this.email = email;
}
public AddUserEvent(Long group_id, String user_id, String givenname, String familyname, String email) {
super(group_id, user_id);
this.givenname = givenname;
@ -30,10 +27,14 @@ public class AddUserEvent extends Event {
this.email = email;
}
public AddUserEvent(Long event_id, Long group_id, User user) {
super(event_id, group_id, user.getUser_id());
this.givenname = user.getGivenname();
this.familyname = user.getFamilyname();
this.email = user.getEmail();
public void apply(Group group) throws EventException{
User user = new User(this.user_id, this.givenname, this.familyname, this.email);
if (group.getMembers().contains(user)){
throw new UserAlreadyExistsException("Der User existiert bereits");
}
group.getMembers().add(user);
group.getRoles().put(user_id, Role.MEMBER);
}
}

View File

@ -3,6 +3,7 @@ package mops.gruppen2.domain.event;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import mops.gruppen2.domain.Group;
import mops.gruppen2.domain.GroupType;
import mops.gruppen2.domain.Visibility;
@ -14,10 +15,19 @@ public class CreateGroupEvent extends Event {
private Long groupParent;
private GroupType groupType;
public CreateGroupEvent(Long group_id, String user_id, Long parent, GroupType type, Visibility visibility) {
super(group_id, user_id);
this.groupParent = parent;
this.groupType = type;
this.groupVisibility = visibility;
}
public void apply(Group group) {
group.setId(this.group_id);
group.setParent(this.groupParent);
group.setType(this.groupType);
group.setVisibility(this.groupVisibility);
}
}

View File

@ -2,12 +2,24 @@ package mops.gruppen2.domain.event;
import lombok.EqualsAndHashCode;
import lombok.Value;
import mops.gruppen2.domain.Group;
@EqualsAndHashCode(callSuper = true)
@Value
public class DeleteGroupEvent extends Event {
public DeleteGroupEvent(long event_id, long group_id, String user_id) {
super(event_id, group_id, user_id);
public DeleteGroupEvent(long group_id, String user_id) {
super(group_id, user_id);
}
@Override
public void apply(Group group) {
group.getRoles().clear();
group.getMembers().clear();
group.setTitle(null);
group.setDescription(null);
group.setVisibility(null);
group.setType(null);
group.setParent(null);
}
}

View File

@ -1,15 +1,30 @@
package mops.gruppen2.domain.event;
import lombok.*;
import mops.gruppen2.domain.Exceptions.EventException;
import mops.gruppen2.domain.Exceptions.UserNotFoundException;
import mops.gruppen2.domain.Group;
import mops.gruppen2.domain.User;
import mops.gruppen2.domain.Group;
/**
* Entfernt ein einzelnes Mitglied einer Gruppe.
*/
@Getter
public class DeleteUserEvent extends Event {
public DeleteUserEvent(Long event_id, Long group_id, String user_id) {
super(event_id, group_id, user_id);
@NoArgsConstructor
public class DeleteUserEvent extends Event {
public DeleteUserEvent(Long group_id, String user_id) {
super(group_id, user_id);
}
public DeleteUserEvent() {}
public void apply(Group group) throws EventException {
for (User user : group.getMembers()) {
if (user.getUser_id().equals(this.user_id)) {
group.getMembers().remove(user);
group.getRoles().remove(user.getUser_id());
return;
}
}
throw new UserNotFoundException("Der User existiert nicht");
}
}

View File

@ -6,11 +6,13 @@ import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import mops.gruppen2.domain.Exceptions.EventException;
import mops.gruppen2.domain.Group;
@Getter
@AllArgsConstructor
@NoArgsConstructor
@AllArgsConstructor
@JsonTypeInfo(
include = JsonTypeInfo.As.PROPERTY,
use = JsonTypeInfo.Id.NAME,
@ -26,13 +28,10 @@ import lombok.Setter;
})
@Setter
public class Event {
Long event_id;
Long group_id;
String user_id;
public Event(Long group_id,String user_id){
this.group_id = group_id;
this.user_id = user_id;
public void apply(Group group) throws EventException {
}
}

View File

@ -3,6 +3,7 @@ package mops.gruppen2.domain.event;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import mops.gruppen2.domain.Group;
/**
* Ändert nur die Gruppenbeschreibung.
@ -13,13 +14,12 @@ import lombok.NoArgsConstructor;
public class UpdateGroupDescriptionEvent extends Event {
String newGroupDescription;
public UpdateGroupDescriptionEvent(Long event_id, Long group_id, String user_id, String newGroupDescription) {
super(event_id, group_id, user_id);
this.newGroupDescription = newGroupDescription;
}
public UpdateGroupDescriptionEvent(Long group_id, String user_id, String newGroupDescription) {
super(group_id, user_id);
this.newGroupDescription = newGroupDescription;
}
public void apply(Group group) {
group.setDescription(this.newGroupDescription);
}
}

View File

@ -3,6 +3,7 @@ package mops.gruppen2.domain.event;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import mops.gruppen2.domain.Group;
/**
* Ändert nur den Gruppentitel.
@ -13,13 +14,13 @@ import lombok.NoArgsConstructor;
public class UpdateGroupTitleEvent extends Event {
String newGroupTitle;
public UpdateGroupTitleEvent(Long event_id, Long group_id, String user_id, String newGroupTitle) {
super(event_id, group_id, user_id);
this.newGroupTitle = newGroupTitle;
}
public UpdateGroupTitleEvent(Long group_id, String user_id, String newGroupTitle) {
super(group_id, user_id);
this.newGroupTitle = newGroupTitle;
}
public void apply(Group group) {
group.setTitle(this.newGroupTitle);
}
}

View File

@ -1,7 +1,13 @@
package mops.gruppen2.domain.event;
import lombok.*;
import mops.gruppen2.domain.Exceptions.EventException;
import mops.gruppen2.domain.Exceptions.UserNotFoundException;
import mops.gruppen2.domain.Group;
import mops.gruppen2.domain.Role;
import mops.gruppen2.domain.User;
import java.util.Optional;
/**
* Aktualisiert die Gruppenrolle eines Teilnehmers.
@ -12,15 +18,17 @@ import mops.gruppen2.domain.Role;
public class UpdateRoleEvent extends Event {
Role newRole;
public UpdateRoleEvent(Long event_id, Long group_id, String user_id, Role newRole) {
super(event_id, group_id, user_id);
this.newRole = newRole;
}
public UpdateRoleEvent(Long group_id, String user_id, Role newRole) {
super(group_id, user_id);
this.newRole = newRole;
}
public void apply(Group group) throws UserNotFoundException{
if (!group.getRoles().containsKey(user_id)){
throw new UserNotFoundException("Der User wurde nicht gefunden");
}
group.getRoles().put(this.user_id, this.newRole);
}
}