From abd99f6a5e362e7f7e09330d2f8931e235fcb29c Mon Sep 17 00:00:00 2001 From: Lukas Ettel <34522828+LukasEttel@users.noreply.github.com> Date: Mon, 16 Mar 2020 16:33:26 +0100 Subject: [PATCH] further refactor of eventhandling Co-Authored-By: Talha Caliskan Co-Authored-By: tomvahl Co-Authored-By: xxnitram Co-Authored-By: kasch309 --- src/main/java/mops/gruppen2/domain/Group.java | 2 +- .../gruppen2/domain/event/AddUserEvent.java | 3 +- .../domain/event/DeleteUserEvent.java | 16 ++++++--- .../mops/gruppen2/domain/event/Event.java | 8 ++--- .../domain/event/UpdateRoleEvent.java | 11 ++----- .../gruppen2/service/ControllerService.java | 4 +-- .../mops/gruppen2/service/GroupService.java | 3 +- .../mops/gruppen2/builder/EventBuilder.java | 5 --- .../domain/event/DeleteUserEventTest.java | 33 +++++++++++++++++++ .../service/SerializationServiceTest.java | 4 +-- 10 files changed, 60 insertions(+), 29 deletions(-) create mode 100644 src/test/java/mops/gruppen2/domain/event/DeleteUserEventTest.java diff --git a/src/main/java/mops/gruppen2/domain/Group.java b/src/main/java/mops/gruppen2/domain/Group.java index 3a09149..257a4f2 100644 --- a/src/main/java/mops/gruppen2/domain/Group.java +++ b/src/main/java/mops/gruppen2/domain/Group.java @@ -21,7 +21,7 @@ public class Group { private long id; private String title; private String description; - private final List members; + public List members; private final Map roles; private GroupType type; diff --git a/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java b/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java index 9d298ab..2d9d470 100644 --- a/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java @@ -24,7 +24,8 @@ public class AddUserEvent extends Event { this.email = email; } - public void apply(Group group, User user) { + public void apply(Group group) { + User user = new User(this.user_id, this.givenname, this.familyname, this.email); group.getMembers().add(user); } } diff --git a/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java b/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java index 3200fd4..5573117 100644 --- a/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java @@ -3,19 +3,27 @@ package mops.gruppen2.domain.event; import lombok.*; 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 class DeleteUserEvent extends Event { public DeleteUserEvent(Long group_id, String user_id) { super(group_id, user_id); } - public DeleteUserEvent() {} + public DeleteUserEvent() { + } - public void apply(Group group, User user) { - group.getMembers().remove(user); + public void apply(Group group) { + for (User user : group.getMembers()) { + if (user.getUser_id().equals(this.user_id)) { + group.members.remove(user); + group.getRoles().remove(user); + return; + } + } } } diff --git a/src/main/java/mops/gruppen2/domain/event/Event.java b/src/main/java/mops/gruppen2/domain/event/Event.java index d227190..6e9406a 100644 --- a/src/main/java/mops/gruppen2/domain/event/Event.java +++ b/src/main/java/mops/gruppen2/domain/event/Event.java @@ -6,11 +6,12 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import mops.gruppen2.domain.Group; @Getter -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor @JsonTypeInfo( include = JsonTypeInfo.As.PROPERTY, use = JsonTypeInfo.Id.NAME, @@ -30,8 +31,5 @@ public class Event { 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){} } diff --git a/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java b/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java index defa1d3..bfbab9b 100644 --- a/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java @@ -1,6 +1,7 @@ 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; @@ -17,19 +18,14 @@ import java.util.Optional; 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; } - private void apply(Group group) throws UserNotFoundException { - User user; + public void apply(Group group) { + User user = new User(user_id, null, null, null); Optional userOptional = group.getMembers().stream() .filter(u -> u.getUser_id().equals(user_id)) @@ -38,7 +34,6 @@ public class UpdateRoleEvent extends Event { if (userOptional.isPresent()) { user = userOptional.get(); } else { - throw new UserNotFoundException("Nutzer wurde nicht gefunden!"); } if (group.getRoles().containsKey(user) && newRole == Role.MEMBER) { diff --git a/src/main/java/mops/gruppen2/service/ControllerService.java b/src/main/java/mops/gruppen2/service/ControllerService.java index 95a0e5c..7325360 100644 --- a/src/main/java/mops/gruppen2/service/ControllerService.java +++ b/src/main/java/mops/gruppen2/service/ControllerService.java @@ -43,8 +43,8 @@ public class ControllerService { eventService.saveEventList(eventList); } - public void addUser(Account account, Group group){ + /*public void addUser(Account account, Group group){ AddUserEvent addUserEvent = new AddUserEvent(eventService.checkGroup(),group.getId(),account.getName(),account.getGivenname(),account.getFamilyname(),account.getEmail()); eventService.saveEvent(addUserEvent); - } + }*/ } diff --git a/src/main/java/mops/gruppen2/service/GroupService.java b/src/main/java/mops/gruppen2/service/GroupService.java index 427e6c0..f0f976d 100644 --- a/src/main/java/mops/gruppen2/service/GroupService.java +++ b/src/main/java/mops/gruppen2/service/GroupService.java @@ -49,7 +49,8 @@ public class GroupService { Map groupMap = new HashMap<>(); for (Event event : events) { - //getOrCreateGroup(groupMap, event.getGroup_id()).applyEvent(event); + Group group = getOrCreateGroup(groupMap, event.getGroup_id()); + event.apply(group); } return new ArrayList<>(groupMap.values()); diff --git a/src/test/java/mops/gruppen2/builder/EventBuilder.java b/src/test/java/mops/gruppen2/builder/EventBuilder.java index f64a143..8fd2952 100644 --- a/src/test/java/mops/gruppen2/builder/EventBuilder.java +++ b/src/test/java/mops/gruppen2/builder/EventBuilder.java @@ -73,7 +73,6 @@ public class EventBuilder { String lastname = faker.name().lastName(); return new AddUserEvent( - faker.random().nextLong(), group_id, user_id, firstname, @@ -103,7 +102,6 @@ public class EventBuilder { Faker faker = new Faker(); return new DeleteUserEvent( - faker.random().nextLong(), group_id, user_id ); @@ -129,7 +127,6 @@ public class EventBuilder { Faker faker = new Faker(); return new UpdateGroupDescriptionEvent( - faker.random().nextLong(), group_id, faker.random().hex(), faker.leagueOfLegends().quote() @@ -140,7 +137,6 @@ public class EventBuilder { Faker faker = new Faker(); return new UpdateGroupTitleEvent( - faker.random().nextLong(), group_id, faker.random().hex(), faker.leagueOfLegends().champion() @@ -151,7 +147,6 @@ public class EventBuilder { Faker faker = new Faker(); return new UpdateRoleEvent( - faker.random().nextLong(), group_id, user_id, role diff --git a/src/test/java/mops/gruppen2/domain/event/DeleteUserEventTest.java b/src/test/java/mops/gruppen2/domain/event/DeleteUserEventTest.java new file mode 100644 index 0000000..a903776 --- /dev/null +++ b/src/test/java/mops/gruppen2/domain/event/DeleteUserEventTest.java @@ -0,0 +1,33 @@ +package mops.gruppen2.domain.event; + +import mops.gruppen2.domain.Group; +import mops.gruppen2.domain.User; +import org.junit.jupiter.api.Test; + +import static mops.gruppen2.domain.Role.MEMBER; +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +class DeleteUserEventTest { + + @Test + void apply() { + Group group = new Group(); + + User user = new User("user1","Stein", "Speck", "@sdasd"); + + group.getMembers().add(user); + group.getRoles().put("user1", MEMBER); + + User user2 = new User("user2","Rock", "Roll", "and"); + + group.getMembers().add(user2); + group.getRoles().put("user2", MEMBER); + + Event event = new DeleteUserEvent(1L, "user1"); + + event.apply(group); + + assertThat(group.getRoles().size()).isEqualTo(1); + } +} \ No newline at end of file diff --git a/src/test/java/mops/gruppen2/service/SerializationServiceTest.java b/src/test/java/mops/gruppen2/service/SerializationServiceTest.java index 193253d..27b5235 100644 --- a/src/test/java/mops/gruppen2/service/SerializationServiceTest.java +++ b/src/test/java/mops/gruppen2/service/SerializationServiceTest.java @@ -23,7 +23,7 @@ class SerializationServiceTest { @Test void serializeEventTest() throws JsonProcessingException { - Event event = new Event(1L,1L,"1"); + Event event = new Event(1L,"1"); assertThat(serializationService.serializeEvent(event)).isEqualTo("{\"type\":\"Event\",\"event_id\":1,\"group_id\":1,\"user_id\":\"1\"}"); } @@ -66,7 +66,7 @@ class SerializationServiceTest { @Test void deserializeUpdateRoleEventToRightClass() throws JsonProcessingException { - System.out.println(serializationService.serializeEvent(new UpdateRoleEvent(1L, 1L, "1", Role.ADMIN))); + System.out.println(serializationService.serializeEvent(new UpdateRoleEvent(1L, "1", Role.ADMIN))); String json = "{\"type\":\"UpdateRoleEvent\",\"event_id\":1,\"group_id\":1,\"user_id\":1,\"newRole\":\"ADMIN\"}";