From 60446f478975fe54610eb3dee0ed90075c06837a Mon Sep 17 00:00:00 2001 From: XXNitram Date: Fri, 6 Mar 2020 15:12:39 +0100 Subject: [PATCH 01/31] Add UpdateGroupTitleEvent and UpdateGroupDescriptionEvent --- src/main/java/mops/gruppen2/entities/Gruppe.java | 10 ++++++++++ .../events/UpdateGroupDescriptionEvent.java | 13 +++++++++++++ .../mops/gruppen2/events/UpdateGroupTitleEvent.java | 13 +++++++++++++ 3 files changed, 36 insertions(+) create mode 100644 src/main/java/mops/gruppen2/events/UpdateGroupDescriptionEvent.java create mode 100644 src/main/java/mops/gruppen2/events/UpdateGroupTitleEvent.java diff --git a/src/main/java/mops/gruppen2/entities/Gruppe.java b/src/main/java/mops/gruppen2/entities/Gruppe.java index 19369b2..bb5944f 100644 --- a/src/main/java/mops/gruppen2/entities/Gruppe.java +++ b/src/main/java/mops/gruppen2/entities/Gruppe.java @@ -2,6 +2,8 @@ package mops.gruppen2.entities; import lombok.Data; import mops.gruppen2.events.CreateGroupEvent; +import mops.gruppen2.events.UpdateGroupDescriptionEvent; +import mops.gruppen2.events.UpdateGroupTitleEvent; import java.util.List; @@ -18,4 +20,12 @@ public class Gruppe extends Aggregat { this.beschreibung = event.getBeschreibung(); this.teilnehmersList= null; } + + public void applyEvent(UpdateGroupTitleEvent event) { + this.titel = event.getTitel(); + } + + public void applyEvent(UpdateGroupDescriptionEvent event) { + this.beschreibung = event.getBeschreibung(); + } } diff --git a/src/main/java/mops/gruppen2/events/UpdateGroupDescriptionEvent.java b/src/main/java/mops/gruppen2/events/UpdateGroupDescriptionEvent.java new file mode 100644 index 0000000..5f629ed --- /dev/null +++ b/src/main/java/mops/gruppen2/events/UpdateGroupDescriptionEvent.java @@ -0,0 +1,13 @@ +package mops.gruppen2.events; + +import lombok.Getter; + +@Getter +public class UpdateGroupDescriptionEvent extends Event { + String beschreibung; + + public UpdateGroupDescriptionEvent(long id, long gruppe_id, long user_id, String beschreibung) { + super(id, gruppe_id, user_id); + this.beschreibung = beschreibung; + } +} diff --git a/src/main/java/mops/gruppen2/events/UpdateGroupTitleEvent.java b/src/main/java/mops/gruppen2/events/UpdateGroupTitleEvent.java new file mode 100644 index 0000000..10d100b --- /dev/null +++ b/src/main/java/mops/gruppen2/events/UpdateGroupTitleEvent.java @@ -0,0 +1,13 @@ +package mops.gruppen2.events; + +import lombok.Getter; + +@Getter +public class UpdateGroupTitleEvent extends Event { + String titel; + + public UpdateGroupTitleEvent(long id, long gruppe_id, long user_id, String titel) { + super(id, gruppe_id, user_id); + this.titel = titel; + } +} From 32bdbeec519ddca77af544a4b25e48fe27e60666 Mon Sep 17 00:00:00 2001 From: killerber4t Date: Fri, 6 Mar 2020 15:25:42 +0100 Subject: [PATCH 02/31] add Event Adduser --- .../java/mops/gruppen2/entities/Gruppe.java | 17 +++++++++++++++-- src/main/java/mops/gruppen2/events/AddUser.java | 17 +++++++++++++++++ .../mops/gruppen2/services/GruppenService.java | 3 +++ 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 src/main/java/mops/gruppen2/events/AddUser.java diff --git a/src/main/java/mops/gruppen2/entities/Gruppe.java b/src/main/java/mops/gruppen2/entities/Gruppe.java index bb5944f..6b3ddf9 100644 --- a/src/main/java/mops/gruppen2/entities/Gruppe.java +++ b/src/main/java/mops/gruppen2/entities/Gruppe.java @@ -1,10 +1,12 @@ package mops.gruppen2.entities; import lombok.Data; +import mops.gruppen2.events.AddUser; import mops.gruppen2.events.CreateGroupEvent; import mops.gruppen2.events.UpdateGroupDescriptionEvent; import mops.gruppen2.events.UpdateGroupTitleEvent; +import java.util.ArrayList; import java.util.List; @Data @@ -14,11 +16,22 @@ public class Gruppe extends Aggregat { String beschreibung; List teilnehmersList; + public Gruppe(){ + this.teilnehmersList = new ArrayList<>(); + } + public void applyEvent(CreateGroupEvent event){ - this.id = event.getId(); this.titel = event.getTitel(); this.beschreibung = event.getBeschreibung(); - this.teilnehmersList= null; + } + + public void applyEvent(AddUser event){ + Teilnehmer teilnehmer = new Teilnehmer(); + teilnehmer.setId(event.getId()); + teilnehmer.setVorname(event.getVorname()); + teilnehmer.setNachname(event.getNachname()); + teilnehmer.setEmail(event.getEmail()); + this.teilnehmersList.add(teilnehmer); } public void applyEvent(UpdateGroupTitleEvent event) { diff --git a/src/main/java/mops/gruppen2/events/AddUser.java b/src/main/java/mops/gruppen2/events/AddUser.java new file mode 100644 index 0000000..0c00754 --- /dev/null +++ b/src/main/java/mops/gruppen2/events/AddUser.java @@ -0,0 +1,17 @@ +package mops.gruppen2.events; + +import lombok.Getter; + +import java.util.List; + +@Getter +public class AddUser extends Event{ + String vorname, nachname, email; + + public AddUser(long id, long gruppe_id, long user_id, String vorname, String nachname, String email) { + super(id, gruppe_id, user_id); + this.vorname = vorname; + this.nachname = nachname; + this.email = email; + } +} diff --git a/src/main/java/mops/gruppen2/services/GruppenService.java b/src/main/java/mops/gruppen2/services/GruppenService.java index 8807ee3..bf5ac67 100644 --- a/src/main/java/mops/gruppen2/services/GruppenService.java +++ b/src/main/java/mops/gruppen2/services/GruppenService.java @@ -1,5 +1,6 @@ package mops.gruppen2.services; +import mops.gruppen2.events.AddUser; import mops.gruppen2.events.CreateGroupEvent; import mops.gruppen2.events.Event; import mops.gruppen2.entities.Gruppe; @@ -12,10 +13,12 @@ import java.util.List; public class GruppenService { CreateGroupEvent createGroupEvent = new CreateGroupEvent(1L,1L,1L,"hello", "foo"); + AddUser addUser = new AddUser(1L, 1L, 1L, "jens","bendiest","jb@gmail.ru"); public GruppenService(){ List eventList = new ArrayList<>(); eventList.add(createGroupEvent); + eventList.add(addUser); Gruppe newGroup = buildGroup(eventList); System.out.println(newGroup.toString()); } From 131bf6c5b7f3cefe6b3f248b8abd424684d12539 Mon Sep 17 00:00:00 2001 From: LukasEttel Date: Fri, 6 Mar 2020 15:47:38 +0100 Subject: [PATCH 03/31] created createGroup - test --- src/main/java/mops/gruppen2/entities/Gruppe.java | 3 +++ .../mops/gruppen2/services/GruppenService.java | 11 ----------- .../java/mops/gruppen2/entities/GruppeTest.java | 14 +++++++++++++- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/main/java/mops/gruppen2/entities/Gruppe.java b/src/main/java/mops/gruppen2/entities/Gruppe.java index 6b3ddf9..a88488f 100644 --- a/src/main/java/mops/gruppen2/entities/Gruppe.java +++ b/src/main/java/mops/gruppen2/entities/Gruppe.java @@ -1,6 +1,7 @@ package mops.gruppen2.entities; import lombok.Data; +import lombok.EqualsAndHashCode; import mops.gruppen2.events.AddUser; import mops.gruppen2.events.CreateGroupEvent; import mops.gruppen2.events.UpdateGroupDescriptionEvent; @@ -10,6 +11,7 @@ import java.util.ArrayList; import java.util.List; @Data +@EqualsAndHashCode(callSuper=false) public class Gruppe extends Aggregat { long id; String titel; @@ -21,6 +23,7 @@ public class Gruppe extends Aggregat { } public void applyEvent(CreateGroupEvent event){ + this.id = event.getGruppe_id(); this.titel = event.getTitel(); this.beschreibung = event.getBeschreibung(); } diff --git a/src/main/java/mops/gruppen2/services/GruppenService.java b/src/main/java/mops/gruppen2/services/GruppenService.java index bf5ac67..d2a073c 100644 --- a/src/main/java/mops/gruppen2/services/GruppenService.java +++ b/src/main/java/mops/gruppen2/services/GruppenService.java @@ -12,17 +12,6 @@ import java.util.List; @Service public class GruppenService { - CreateGroupEvent createGroupEvent = new CreateGroupEvent(1L,1L,1L,"hello", "foo"); - AddUser addUser = new AddUser(1L, 1L, 1L, "jens","bendiest","jb@gmail.ru"); - - public GruppenService(){ - List eventList = new ArrayList<>(); - eventList.add(createGroupEvent); - eventList.add(addUser); - Gruppe newGroup = buildGroup(eventList); - System.out.println(newGroup.toString()); - } - Gruppe buildGroup(List eventList){ Gruppe newGroup = new Gruppe(); eventList.forEach(newGroup::applyEvent); diff --git a/src/test/java/mops/gruppen2/entities/GruppeTest.java b/src/test/java/mops/gruppen2/entities/GruppeTest.java index 7cd2ae9..29294e6 100644 --- a/src/test/java/mops/gruppen2/entities/GruppeTest.java +++ b/src/test/java/mops/gruppen2/entities/GruppeTest.java @@ -1,5 +1,6 @@ package mops.gruppen2.entities; +import mops.gruppen2.events.CreateGroupEvent; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; @@ -7,6 +8,17 @@ import static org.junit.jupiter.api.Assertions.*; class GruppeTest { @Test - void applyEvent() { + void applyCreteGroupEvent() { + CreateGroupEvent event = new CreateGroupEvent(1L,2L,3L,"hello", "foo"); + + Gruppe gruppe1 = new Gruppe(); + gruppe1.applyEvent(event); + + Gruppe gruppe2 = new Gruppe(); + gruppe2.id = 2; + gruppe2.titel = "hello"; + gruppe2.beschreibung = "foo"; + + assertEquals(gruppe2, gruppe1); } } \ No newline at end of file From 02456e9a880a79d7c7149411c5d028b978edda17 Mon Sep 17 00:00:00 2001 From: Mahgs Date: Fri, 6 Mar 2020 15:52:15 +0100 Subject: [PATCH 04/31] added DeleteUserEvent --- src/main/java/mops/gruppen2/entities/Gruppe.java | 11 +++++++++++ .../java/mops/gruppen2/events/DeleteUserEvent.java | 11 +++++++++++ .../java/mops/gruppen2/services/GruppenService.java | 4 +++- 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 src/main/java/mops/gruppen2/events/DeleteUserEvent.java diff --git a/src/main/java/mops/gruppen2/entities/Gruppe.java b/src/main/java/mops/gruppen2/entities/Gruppe.java index 6b3ddf9..c0f1d12 100644 --- a/src/main/java/mops/gruppen2/entities/Gruppe.java +++ b/src/main/java/mops/gruppen2/entities/Gruppe.java @@ -5,6 +5,7 @@ import mops.gruppen2.events.AddUser; import mops.gruppen2.events.CreateGroupEvent; import mops.gruppen2.events.UpdateGroupDescriptionEvent; import mops.gruppen2.events.UpdateGroupTitleEvent; +import mops.gruppen2.events.DeleteUserEvent; import java.util.ArrayList; import java.util.List; @@ -40,5 +41,15 @@ public class Gruppe extends Aggregat { public void applyEvent(UpdateGroupDescriptionEvent event) { this.beschreibung = event.getBeschreibung(); + this.teilnehmersList = new ArrayList<>(); + } + + public void applyEvent(DeleteUserEvent event) { + for (Teilnehmer teilnehmer: teilnehmersList) { + if (teilnehmer.getId().equals(event.getUser_id())) { + this.teilnehmersList.remove(teilnehmer); + break; + } + } } } diff --git a/src/main/java/mops/gruppen2/events/DeleteUserEvent.java b/src/main/java/mops/gruppen2/events/DeleteUserEvent.java new file mode 100644 index 0000000..2b925a2 --- /dev/null +++ b/src/main/java/mops/gruppen2/events/DeleteUserEvent.java @@ -0,0 +1,11 @@ +package mops.gruppen2.events; + +import lombok.Getter; + +@Getter +public class DeleteUserEvent extends Event{ + + public DeleteUserEvent(long id, long gruppe_id, long user_id) { + super(id, gruppe_id, user_id); + } +} diff --git a/src/main/java/mops/gruppen2/services/GruppenService.java b/src/main/java/mops/gruppen2/services/GruppenService.java index bf5ac67..40e6a56 100644 --- a/src/main/java/mops/gruppen2/services/GruppenService.java +++ b/src/main/java/mops/gruppen2/services/GruppenService.java @@ -2,6 +2,7 @@ package mops.gruppen2.services; import mops.gruppen2.events.AddUser; import mops.gruppen2.events.CreateGroupEvent; +import mops.gruppen2.events.DeleteUserEvent; import mops.gruppen2.events.Event; import mops.gruppen2.entities.Gruppe; import org.springframework.stereotype.Service; @@ -14,13 +15,14 @@ public class GruppenService { CreateGroupEvent createGroupEvent = new CreateGroupEvent(1L,1L,1L,"hello", "foo"); AddUser addUser = new AddUser(1L, 1L, 1L, "jens","bendiest","jb@gmail.ru"); + DeleteUserEvent deleteUserEvent = new DeleteUserEvent(1L, 1L, 1L); public GruppenService(){ List eventList = new ArrayList<>(); eventList.add(createGroupEvent); eventList.add(addUser); + eventList.add(deleteUserEvent); Gruppe newGroup = buildGroup(eventList); - System.out.println(newGroup.toString()); } Gruppe buildGroup(List eventList){ From 991287527e6b3c1e2e8e085b3074b6e423120b9a Mon Sep 17 00:00:00 2001 From: killerber4t Date: Fri, 6 Mar 2020 15:58:12 +0100 Subject: [PATCH 05/31] add test to addUser-Event --- .../mops/gruppen2/entities/GruppeTest.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/test/java/mops/gruppen2/entities/GruppeTest.java b/src/test/java/mops/gruppen2/entities/GruppeTest.java index 7cd2ae9..62c7e4d 100644 --- a/src/test/java/mops/gruppen2/entities/GruppeTest.java +++ b/src/test/java/mops/gruppen2/entities/GruppeTest.java @@ -1,12 +1,51 @@ package mops.gruppen2.entities; +import mops.gruppen2.events.AddUser; +import mops.gruppen2.events.CreateGroupEvent; +import mops.gruppen2.events.Event; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import java.util.ArrayList; +import java.util.List; + import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.mock; class GruppeTest { + AddUser addUser; + CreateGroupEvent createGroupEvent; + + @BeforeEach + public void setUp(){ + + } + + @Test void applyEvent() { } + + @Test + void applyAddUserEvent(){ + Gruppe gruppe = new Gruppe(); + Gruppe testGruppe = new Gruppe(); + Teilnehmer teilnehmer = new Teilnehmer(); + addUser = new AddUser(1L,1L,1L,"jens","bendi", "hi@gmail.com"); + createGroupEvent = new CreateGroupEvent(1L,1L,1L, "hi", "foo"); + + gruppe.applyEvent(createGroupEvent); + gruppe.applyEvent(addUser); + testGruppe.applyEvent(createGroupEvent); + teilnehmer.setId(1L); + teilnehmer.setVorname("jens"); + teilnehmer.setNachname("bendi"); + teilnehmer.setEmail("hi@gmail.com"); + List testTeil= new ArrayList<>(); + testTeil.add(teilnehmer); + testGruppe.setTeilnehmersList(testTeil); + + assertEquals(testGruppe,gruppe); + } } \ No newline at end of file From b1d266d7bfa9487123f1a6524a0d120409206965 Mon Sep 17 00:00:00 2001 From: Christoph Date: Fri, 6 Mar 2020 15:58:35 +0100 Subject: [PATCH 06/31] change user_id to String + add updateRoleEvent --- .../java/mops/gruppen2/entities/Aggregat.java | 5 ++++ .../java/mops/gruppen2/entities/Gruppe.java | 29 +++++++++++++------ .../mops/gruppen2/entities/Teilnehmer.java | 4 +-- .../java/mops/gruppen2/events/AddUser.java | 4 +-- .../gruppen2/events/CreateGroupEvent.java | 2 +- src/main/java/mops/gruppen2/events/Event.java | 2 +- .../events/UpdateGroupDescriptionEvent.java | 2 +- .../events/UpdateGroupTitleEvent.java | 2 +- .../mops/gruppen2/events/UpdateRoleEvent.java | 16 ++++++++++ .../gruppen2/services/GruppenService.java | 16 +--------- 10 files changed, 48 insertions(+), 34 deletions(-) create mode 100644 src/main/java/mops/gruppen2/events/UpdateRoleEvent.java diff --git a/src/main/java/mops/gruppen2/entities/Aggregat.java b/src/main/java/mops/gruppen2/entities/Aggregat.java index 8322852..a259113 100644 --- a/src/main/java/mops/gruppen2/entities/Aggregat.java +++ b/src/main/java/mops/gruppen2/entities/Aggregat.java @@ -6,6 +6,11 @@ import java.lang.reflect.Method; public abstract class Aggregat { + /** + * Ruft die spezifische applyEvent-Methode im entsprechenden Aggregat auf. + * + * @param event + */ public void applyEvent(Event event) { try { Method method = this.getClass().getDeclaredMethod("applyEvent", event.getClass()); diff --git a/src/main/java/mops/gruppen2/entities/Gruppe.java b/src/main/java/mops/gruppen2/entities/Gruppe.java index 6b3ddf9..e609cbf 100644 --- a/src/main/java/mops/gruppen2/entities/Gruppe.java +++ b/src/main/java/mops/gruppen2/entities/Gruppe.java @@ -1,36 +1,47 @@ package mops.gruppen2.entities; import lombok.Data; -import mops.gruppen2.events.AddUser; -import mops.gruppen2.events.CreateGroupEvent; -import mops.gruppen2.events.UpdateGroupDescriptionEvent; -import mops.gruppen2.events.UpdateGroupTitleEvent; +import lombok.EqualsAndHashCode; +import mops.gruppen2.events.*; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +@EqualsAndHashCode(callSuper = true) @Data public class Gruppe extends Aggregat { long id; String titel; String beschreibung; List teilnehmersList; - - public Gruppe(){ - this.teilnehmersList = new ArrayList<>(); - } + Map rollenList; public void applyEvent(CreateGroupEvent event){ + this.id = event.getId(); this.titel = event.getTitel(); this.beschreibung = event.getBeschreibung(); + this.teilnehmersList = new ArrayList<>(); + this.rollenList = new HashMap<>(); + } + + public void applyEvent(UpdateRoleEvent event) { + teilnehmersList.stream() + .filter(teilnehmer -> teilnehmer.getId().equals(event.getUser_id())) + .findFirst() + .ifPresentOrElse(teilnehmer -> rollenList.put(teilnehmer, event.getRole()), + () -> System.out.println("UserNotFoundException")); } public void applyEvent(AddUser event){ Teilnehmer teilnehmer = new Teilnehmer(); - teilnehmer.setId(event.getId()); + + teilnehmer.setId(event.getUser_id()); teilnehmer.setVorname(event.getVorname()); teilnehmer.setNachname(event.getNachname()); teilnehmer.setEmail(event.getEmail()); + this.teilnehmersList.add(teilnehmer); } diff --git a/src/main/java/mops/gruppen2/entities/Teilnehmer.java b/src/main/java/mops/gruppen2/entities/Teilnehmer.java index ef665b9..8eff602 100644 --- a/src/main/java/mops/gruppen2/entities/Teilnehmer.java +++ b/src/main/java/mops/gruppen2/entities/Teilnehmer.java @@ -1,14 +1,12 @@ package mops.gruppen2.entities; import lombok.Data; -import org.springframework.data.annotation.Id; import java.util.List; @Data public class Teilnehmer { - @Id - Long id; + String id; String vorname; String nachname; String email; diff --git a/src/main/java/mops/gruppen2/events/AddUser.java b/src/main/java/mops/gruppen2/events/AddUser.java index 0c00754..bb705b5 100644 --- a/src/main/java/mops/gruppen2/events/AddUser.java +++ b/src/main/java/mops/gruppen2/events/AddUser.java @@ -2,13 +2,11 @@ package mops.gruppen2.events; import lombok.Getter; -import java.util.List; - @Getter public class AddUser extends Event{ String vorname, nachname, email; - public AddUser(long id, long gruppe_id, long user_id, String vorname, String nachname, String email) { + public AddUser(long id, long gruppe_id, String user_id, String vorname, String nachname, String email) { super(id, gruppe_id, user_id); this.vorname = vorname; this.nachname = nachname; diff --git a/src/main/java/mops/gruppen2/events/CreateGroupEvent.java b/src/main/java/mops/gruppen2/events/CreateGroupEvent.java index 8b2758c..cae95c3 100644 --- a/src/main/java/mops/gruppen2/events/CreateGroupEvent.java +++ b/src/main/java/mops/gruppen2/events/CreateGroupEvent.java @@ -7,7 +7,7 @@ public class CreateGroupEvent extends Event { String titel; String beschreibung; - public CreateGroupEvent(long id, long gruppe_id, long user_id, String titel, String beschreibung) { + public CreateGroupEvent(long id, long gruppe_id, String user_id, String titel, String beschreibung) { super(id, gruppe_id, user_id); this.titel = titel; this.beschreibung = beschreibung; diff --git a/src/main/java/mops/gruppen2/events/Event.java b/src/main/java/mops/gruppen2/events/Event.java index 3ceb3cd..da9c4e6 100644 --- a/src/main/java/mops/gruppen2/events/Event.java +++ b/src/main/java/mops/gruppen2/events/Event.java @@ -8,5 +8,5 @@ import lombok.Getter; public class Event { long id; long gruppe_id; - long user_id; + String user_id; } diff --git a/src/main/java/mops/gruppen2/events/UpdateGroupDescriptionEvent.java b/src/main/java/mops/gruppen2/events/UpdateGroupDescriptionEvent.java index 5f629ed..232fe56 100644 --- a/src/main/java/mops/gruppen2/events/UpdateGroupDescriptionEvent.java +++ b/src/main/java/mops/gruppen2/events/UpdateGroupDescriptionEvent.java @@ -6,7 +6,7 @@ import lombok.Getter; public class UpdateGroupDescriptionEvent extends Event { String beschreibung; - public UpdateGroupDescriptionEvent(long id, long gruppe_id, long user_id, String beschreibung) { + public UpdateGroupDescriptionEvent(long id, long gruppe_id, String user_id, String beschreibung) { super(id, gruppe_id, user_id); this.beschreibung = beschreibung; } diff --git a/src/main/java/mops/gruppen2/events/UpdateGroupTitleEvent.java b/src/main/java/mops/gruppen2/events/UpdateGroupTitleEvent.java index 10d100b..4829561 100644 --- a/src/main/java/mops/gruppen2/events/UpdateGroupTitleEvent.java +++ b/src/main/java/mops/gruppen2/events/UpdateGroupTitleEvent.java @@ -6,7 +6,7 @@ import lombok.Getter; public class UpdateGroupTitleEvent extends Event { String titel; - public UpdateGroupTitleEvent(long id, long gruppe_id, long user_id, String titel) { + public UpdateGroupTitleEvent(long id, long gruppe_id, String user_id, String titel) { super(id, gruppe_id, user_id); this.titel = titel; } diff --git a/src/main/java/mops/gruppen2/events/UpdateRoleEvent.java b/src/main/java/mops/gruppen2/events/UpdateRoleEvent.java new file mode 100644 index 0000000..a9d5141 --- /dev/null +++ b/src/main/java/mops/gruppen2/events/UpdateRoleEvent.java @@ -0,0 +1,16 @@ +package mops.gruppen2.events; + +import lombok.Getter; +import mops.gruppen2.entities.Rolle; + +@Getter +public class UpdateRoleEvent extends Event { + + private final Rolle role; + + public UpdateRoleEvent(long id, long gruppe_id, String user_id, Rolle newRole) { + super(id, gruppe_id, user_id); + + this.role = newRole; + } +} diff --git a/src/main/java/mops/gruppen2/services/GruppenService.java b/src/main/java/mops/gruppen2/services/GruppenService.java index bf5ac67..5b1676f 100644 --- a/src/main/java/mops/gruppen2/services/GruppenService.java +++ b/src/main/java/mops/gruppen2/services/GruppenService.java @@ -1,28 +1,14 @@ package mops.gruppen2.services; -import mops.gruppen2.events.AddUser; -import mops.gruppen2.events.CreateGroupEvent; -import mops.gruppen2.events.Event; import mops.gruppen2.entities.Gruppe; +import mops.gruppen2.events.Event; import org.springframework.stereotype.Service; -import java.util.ArrayList; import java.util.List; @Service public class GruppenService { - CreateGroupEvent createGroupEvent = new CreateGroupEvent(1L,1L,1L,"hello", "foo"); - AddUser addUser = new AddUser(1L, 1L, 1L, "jens","bendiest","jb@gmail.ru"); - - public GruppenService(){ - List eventList = new ArrayList<>(); - eventList.add(createGroupEvent); - eventList.add(addUser); - Gruppe newGroup = buildGroup(eventList); - System.out.println(newGroup.toString()); - } - Gruppe buildGroup(List eventList){ Gruppe newGroup = new Gruppe(); eventList.forEach(newGroup::applyEvent); From 207fd6742ebb882cc2c8f50a2b8330844e0790dd Mon Sep 17 00:00:00 2001 From: killerber4t Date: Fri, 6 Mar 2020 16:07:52 +0100 Subject: [PATCH 07/31] update Test for addUser --- src/test/java/mops/gruppen2/entities/GruppeTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/mops/gruppen2/entities/GruppeTest.java b/src/test/java/mops/gruppen2/entities/GruppeTest.java index 62c7e4d..6e3c28b 100644 --- a/src/test/java/mops/gruppen2/entities/GruppeTest.java +++ b/src/test/java/mops/gruppen2/entities/GruppeTest.java @@ -32,13 +32,13 @@ class GruppeTest { Gruppe gruppe = new Gruppe(); Gruppe testGruppe = new Gruppe(); Teilnehmer teilnehmer = new Teilnehmer(); - addUser = new AddUser(1L,1L,1L,"jens","bendi", "hi@gmail.com"); - createGroupEvent = new CreateGroupEvent(1L,1L,1L, "hi", "foo"); + addUser = new AddUser(1L,1L,"1l","jens","bendi", "hi@gmail.com"); + createGroupEvent = new CreateGroupEvent(1L,1L,"1l", "hi", "foo"); gruppe.applyEvent(createGroupEvent); gruppe.applyEvent(addUser); testGruppe.applyEvent(createGroupEvent); - teilnehmer.setId(1L); + teilnehmer.setId("1l"); teilnehmer.setVorname("jens"); teilnehmer.setNachname("bendi"); teilnehmer.setEmail("hi@gmail.com"); From e905aa37aab009502bc5c0b8fc47829c38cb201d Mon Sep 17 00:00:00 2001 From: killerber4t Date: Fri, 6 Mar 2020 16:11:41 +0100 Subject: [PATCH 08/31] fix DeleteUserEvent --- src/main/java/mops/gruppen2/events/DeleteUserEvent.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/mops/gruppen2/events/DeleteUserEvent.java b/src/main/java/mops/gruppen2/events/DeleteUserEvent.java index 2b925a2..97924ce 100644 --- a/src/main/java/mops/gruppen2/events/DeleteUserEvent.java +++ b/src/main/java/mops/gruppen2/events/DeleteUserEvent.java @@ -5,7 +5,7 @@ import lombok.Getter; @Getter public class DeleteUserEvent extends Event{ - public DeleteUserEvent(long id, long gruppe_id, long user_id) { + public DeleteUserEvent(long id, long gruppe_id, String user_id) { super(id, gruppe_id, user_id); } } From d14d95dad939f13e80e12aef1c92d166de6f3b4e Mon Sep 17 00:00:00 2001 From: Christoph Date: Fri, 6 Mar 2020 16:21:20 +0100 Subject: [PATCH 09/31] add assertJ + UpdateRoleEvent test --- build.gradle | 1 + .../mops/gruppen2/entities/GruppeTest.java | 24 +++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 15f22d4..18cce31 100644 --- a/build.gradle +++ b/build.gradle @@ -63,6 +63,7 @@ dependencies { compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.7.0' compileOnly 'org.projectlombok:lombok' developmentOnly 'org.springframework.boot:spring-boot-devtools' + testImplementation 'org.assertj:assertj-core:3.15.0' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation('org.springframework.boot:spring-boot-starter-test') { diff --git a/src/test/java/mops/gruppen2/entities/GruppeTest.java b/src/test/java/mops/gruppen2/entities/GruppeTest.java index 62c7e4d..6819db2 100644 --- a/src/test/java/mops/gruppen2/entities/GruppeTest.java +++ b/src/test/java/mops/gruppen2/entities/GruppeTest.java @@ -2,7 +2,7 @@ package mops.gruppen2.entities; import mops.gruppen2.events.AddUser; import mops.gruppen2.events.CreateGroupEvent; -import mops.gruppen2.events.Event; +import mops.gruppen2.events.UpdateRoleEvent; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -10,6 +10,7 @@ import java.util.ArrayList; import java.util.List; import static org.junit.jupiter.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; class GruppeTest { @@ -48,4 +49,23 @@ class GruppeTest { assertEquals(testGruppe,gruppe); } -} \ No newline at end of file + + // Verwendet CreateGroupEvent und AddUserEvent + @Test + void updateRoleForExistingUser() { + // Arrange + Gruppe gruppe = new Gruppe(); + + gruppe.applyEvent(new CreateGroupEvent(1L, 1L, "1L", "gruppe1", "Eine Testgruppe")); + gruppe.applyEvent(new AddUser(1L, 1L, "5L", "Peter", "Pan", "123@mail.de")); + + + // Act + gruppe.applyEvent(new UpdateRoleEvent(1L, 1L, "1L", new Orga())); + + // Assert + assertThat(gruppe.getRollenList()) + .containsOnlyKeys(gruppe.getTeilnehmersList().get(0)) + .containsValue(new Orga()); + } +} From 4d90cd23a32b46714c9629c55c8ee9a79c11fb60 Mon Sep 17 00:00:00 2001 From: Christoph Date: Fri, 6 Mar 2020 16:38:14 +0100 Subject: [PATCH 10/31] fix test updateRoleForExistingUser() --- src/test/java/mops/gruppen2/entities/GruppeTest.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/test/java/mops/gruppen2/entities/GruppeTest.java b/src/test/java/mops/gruppen2/entities/GruppeTest.java index 1ec725c..4f59269 100644 --- a/src/test/java/mops/gruppen2/entities/GruppeTest.java +++ b/src/test/java/mops/gruppen2/entities/GruppeTest.java @@ -9,9 +9,8 @@ import org.junit.jupiter.api.Test; import java.util.ArrayList; import java.util.List; -import static org.junit.jupiter.api.Assertions.*; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; +import static org.junit.jupiter.api.Assertions.assertEquals; class GruppeTest { @@ -55,17 +54,17 @@ class GruppeTest { void updateRoleForExistingUser() { // Arrange Gruppe gruppe = new Gruppe(); + Orga orga = new Orga(); gruppe.applyEvent(new CreateGroupEvent(1L, 1L, "1L", "gruppe1", "Eine Testgruppe")); gruppe.applyEvent(new AddUser(1L, 1L, "5L", "Peter", "Pan", "123@mail.de")); - // Act - gruppe.applyEvent(new UpdateRoleEvent(1L, 1L, "1L", new Orga())); + gruppe.applyEvent(new UpdateRoleEvent(1L, 1L, "5L", orga)); // Assert assertThat(gruppe.getRollenList()) .containsOnlyKeys(gruppe.getTeilnehmersList().get(0)) - .containsValue(new Orga()); + .containsValue(orga); } } From 47b2a734fafce36a6f860d02e5adeb56d8f92ed3 Mon Sep 17 00:00:00 2001 From: LukasEttel Date: Fri, 6 Mar 2020 16:43:16 +0100 Subject: [PATCH 11/31] created createGroup - test --- .../java/mops/gruppen2/entities/Gruppe.java | 4 +-- .../mops/gruppen2/entities/GruppeTest.java | 28 ++++++++++++++++--- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/main/java/mops/gruppen2/entities/Gruppe.java b/src/main/java/mops/gruppen2/entities/Gruppe.java index d83d2dc..0a7ba4e 100644 --- a/src/main/java/mops/gruppen2/entities/Gruppe.java +++ b/src/main/java/mops/gruppen2/entities/Gruppe.java @@ -14,7 +14,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -@EqualsAndHashCode(callSuper = true) +@EqualsAndHashCode(callSuper=false) @Data public class Gruppe extends Aggregat { long id; @@ -24,7 +24,7 @@ public class Gruppe extends Aggregat { Map rollenList; public void applyEvent(CreateGroupEvent event){ - this.id = event.getId(); + this.id = event.getGruppe_id(); this.titel = event.getTitel(); this.beschreibung = event.getBeschreibung(); this.teilnehmersList = new ArrayList<>(); diff --git a/src/test/java/mops/gruppen2/entities/GruppeTest.java b/src/test/java/mops/gruppen2/entities/GruppeTest.java index 5a3f091..ce7da2f 100644 --- a/src/test/java/mops/gruppen2/entities/GruppeTest.java +++ b/src/test/java/mops/gruppen2/entities/GruppeTest.java @@ -7,6 +7,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; @@ -32,13 +33,13 @@ class GruppeTest { Gruppe gruppe = new Gruppe(); Gruppe testGruppe = new Gruppe(); Teilnehmer teilnehmer = new Teilnehmer(); - addUser = new AddUser(1L,1L,1L,"jens","bendi", "hi@gmail.com"); - createGroupEvent = new CreateGroupEvent(1L,1L,1L, "hi", "foo"); + addUser = new AddUser(1L,1L,"prof","jens","bendi", "hi@gmail.com"); + createGroupEvent = new CreateGroupEvent(1L,1L,"prof1", "hi", "foo"); gruppe.applyEvent(createGroupEvent); gruppe.applyEvent(addUser); testGruppe.applyEvent(createGroupEvent); - teilnehmer.setId(1L); + teilnehmer.setId("prof"); teilnehmer.setVorname("jens"); teilnehmer.setNachname("bendi"); teilnehmer.setEmail("hi@gmail.com"); @@ -67,4 +68,23 @@ class GruppeTest { .containsOnlyKeys(gruppe.getTeilnehmersList().get(0)) .containsValue(orga); } -} + + @Test + void applyCreteGroupEvent() { + String userId = "asd"; + CreateGroupEvent event = new CreateGroupEvent(1L,2,userId, "hello", "foo"); + + Gruppe gruppe1 = new Gruppe(); + gruppe1.applyEvent(event); + + Gruppe gruppe2 = new Gruppe(); + gruppe2.id = 2L; + gruppe2.titel = "hello"; + gruppe2.beschreibung = "foo"; + gruppe2.teilnehmersList = new ArrayList<>(); + gruppe2.rollenList = new HashMap<>(); + + assertEquals(gruppe2, gruppe1); + } + +} \ No newline at end of file From 64f54ada27a32a6ae86a991504fd41aeec4ff7a7 Mon Sep 17 00:00:00 2001 From: Christoph Date: Fri, 6 Mar 2020 20:03:15 +0100 Subject: [PATCH 12/31] slight changes to package structure --- src/main/resources/data.sql | 4 ---- src/main/resources/schema.sql | 26 ++++++-------------------- 2 files changed, 6 insertions(+), 24 deletions(-) delete mode 100644 src/main/resources/data.sql diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql deleted file mode 100644 index 0132c78..0000000 --- a/src/main/resources/data.sql +++ /dev/null @@ -1,4 +0,0 @@ --- noinspection SqlNoDataSourceInspectionForFile - -insert into TEILNEHMER (VORNAME, NACHNAME, EMAIL) values - ('Peter', 'Müller', 'Peter@123.de'); diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql index 767c37a..51b59eb 100644 --- a/src/main/resources/schema.sql +++ b/src/main/resources/schema.sql @@ -1,25 +1,11 @@ -- noinspection SqlNoDataSourceInspectionForFile -DROP TABLE IF EXISTS teilnehmer; -CREATE TABLE teilnehmer ( - teilnehmer_id INT PRIMARY KEY AUTO_INCREMENT, - vorname VARCHAR(50) NOT NULL, - nachname VARCHAR(50) NOT NULL , - email VARCHAR(255) NOT NULL -); +DROP TABLE IF EXISTS event; -DROP TABLE IF EXISTS gruppe; -CREATE TABLE gruppe +CREATE TABLE event ( - gruppe_id INTEGER PRIMARY KEY auto_increment, - titel TEXT NOT NULL, - beschreibung TEXT NOT NULL -); - -DROP TABLE IF EXISTS teilnahme; -CREATE TABLE teilnahme -( - id INTEGER PRIMARY KEY auto_increment, - teilnehmer_dto INTEGER REFERENCES teilnehmer(teilnehmer_id), - gruppe_dto INTEGER REFERENCES gruppe(gruppe_id) + event_id INT PRIMARY KEY AUTO_INCREMENT, + group_id INT NOT NULL, + user_id VARCHAR(50), + event_payload VARCHAR(255) ); From 0e1e79d51a738068e1dbb55fe2ec9aa67686db04 Mon Sep 17 00:00:00 2001 From: Christoph Date: Fri, 6 Mar 2020 20:10:23 +0100 Subject: [PATCH 13/31] slight changes to package structure + naming --- README.adoc | 8 +- .../Gruppen2Controller.java | 6 +- .../SwaggerAPIController.java | 2 +- src/main/java/mops/gruppen2/domain/Admin.java | 4 + .../Aggregat.java => domain/Aggregate.java} | 6 +- src/main/java/mops/gruppen2/domain/Group.java | 69 ++++++++++++++ src/main/java/mops/gruppen2/domain/Org.java | 4 + src/main/java/mops/gruppen2/domain/Role.java | 5 ++ .../Teilnehmer.java => domain/User.java} | 6 +- .../gruppen2/domain/event/AddUserEvent.java | 15 ++++ .../event}/CreateGroupEvent.java | 2 +- .../event}/DeleteUserEvent.java | 2 +- .../{events => domain/event}/Event.java | 2 +- .../event}/UpdateGroupDescriptionEvent.java | 2 +- .../event}/UpdateGroupTitleEvent.java | 2 +- .../event}/UpdateRoleEvent.java | 8 +- .../java/mops/gruppen2/entities/Admin.java | 4 - .../java/mops/gruppen2/entities/Gruppe.java | 69 -------------- .../java/mops/gruppen2/entities/Orga.java | 4 - .../java/mops/gruppen2/entities/Rolle.java | 5 -- .../java/mops/gruppen2/events/AddUser.java | 15 ---- .../EventRepository.java | 4 +- .../mops/gruppen2/service/GroupService.java | 16 ++++ .../KeyCloakService.java | 2 +- .../SerializationService.java | 2 +- .../gruppen2/services/GruppenService.java | 16 ---- .../java/mops/gruppen2/domain/GroupTest.java | 90 +++++++++++++++++++ .../mops/gruppen2/entities/GruppeTest.java | 90 ------------------- 28 files changed, 229 insertions(+), 231 deletions(-) rename src/main/java/mops/gruppen2/{controllers => controller}/Gruppen2Controller.java (82%) rename src/main/java/mops/gruppen2/{controllers => controller}/SwaggerAPIController.java (95%) create mode 100644 src/main/java/mops/gruppen2/domain/Admin.java rename src/main/java/mops/gruppen2/{entities/Aggregat.java => domain/Aggregate.java} (81%) create mode 100644 src/main/java/mops/gruppen2/domain/Group.java create mode 100644 src/main/java/mops/gruppen2/domain/Org.java create mode 100644 src/main/java/mops/gruppen2/domain/Role.java rename src/main/java/mops/gruppen2/{entities/Teilnehmer.java => domain/User.java} (58%) create mode 100644 src/main/java/mops/gruppen2/domain/event/AddUserEvent.java rename src/main/java/mops/gruppen2/{events => domain/event}/CreateGroupEvent.java (89%) rename src/main/java/mops/gruppen2/{events => domain/event}/DeleteUserEvent.java (84%) rename src/main/java/mops/gruppen2/{events => domain/event}/Event.java (80%) rename src/main/java/mops/gruppen2/{events => domain/event}/UpdateGroupDescriptionEvent.java (89%) rename src/main/java/mops/gruppen2/{events => domain/event}/UpdateGroupTitleEvent.java (88%) rename src/main/java/mops/gruppen2/{events => domain/event}/UpdateRoleEvent.java (64%) delete mode 100644 src/main/java/mops/gruppen2/entities/Admin.java delete mode 100644 src/main/java/mops/gruppen2/entities/Gruppe.java delete mode 100644 src/main/java/mops/gruppen2/entities/Orga.java delete mode 100644 src/main/java/mops/gruppen2/entities/Rolle.java delete mode 100644 src/main/java/mops/gruppen2/events/AddUser.java rename src/main/java/mops/gruppen2/{repositories => repository}/EventRepository.java (64%) create mode 100644 src/main/java/mops/gruppen2/service/GroupService.java rename src/main/java/mops/gruppen2/{services => service}/KeyCloakService.java (96%) rename src/main/java/mops/gruppen2/{services => service}/SerializationService.java (79%) delete mode 100644 src/main/java/mops/gruppen2/services/GruppenService.java create mode 100644 src/test/java/mops/gruppen2/domain/GroupTest.java delete mode 100644 src/test/java/mops/gruppen2/entities/GruppeTest.java diff --git a/README.adoc b/README.adoc index 00dda29..7e3552b 100644 --- a/README.adoc +++ b/README.adoc @@ -14,7 +14,7 @@ endif::[] == Gruppenbildung Für das Abschlussprojekt bilden Sie bitte eine Gruppe im GitHub Classroom, die -aus 7 bis 9 Personen besteht und laden eine entsprechende `gruppe.yml` in AUAS +aus 7 bis 9 Personen besteht und laden eine entsprechende `group.yml` in AUAS hoch. Im Gegensatz zu den normalen Blättern haben Sie volle Administrationsrechte und alle Projekte sind öffentlich um den Austausch mit anderen Gruppen bei Integrationen zwischen Anwendungen einfacher zu gestalten. @@ -22,18 +22,18 @@ anderen Gruppen bei Integrationen zwischen Anwendungen einfacher zu gestalten. IMPORTANT: Bitte entfernen Sie nicht die Organisatoren aus Ihrem Projekt. NOTE: Sie finden neben dieser README eine -link:gruppe.yml[Beispiel-Gruppe-YML-Datei]. Füllen Sie diese aus, checken Sie +link:group.yml[Beispiel-Gruppe-YML-Datei]. Füllen Sie diese aus, checken Sie sie ein. IMPORTANT: Erstellen Sie direkt eine Abgabe in AUAS. Diese ist *essentiell* für die Teilnahme am Praktikum. Diesmal muss die Abgabe eine ZIP-Datei sein. Die -ZIP-Datei soll die `gruppe.yml` und eine _optionale_ Beschreibung eines eigenen +ZIP-Datei soll die `group.yml` und eine _optionale_ Beschreibung eines eigenen Systems für MOPS beinhalten. Sie können natürlich auch einfach die vorgeschlagenen Systeme wählen und müssen keine eigenen Systeme entwerfen. == Systeme -*Die folgenden Beschreibungen sind keine Spezifikationen, die den Funktionsumfang der Projekte festlegen,* sondern nur ein "Braindump" von den Ideen, die mir zu dem entsprechenden System gekommen sind. Die Beschreibungen sollen Ihnen primär helfen, Systeme auszusuchen, die Sie umsetzen möchten. Wenn Sie einen eigenen Vorschlag für ein System haben, können Sie das auch gerne vorschlagen. Sie müssen dann zusammen mit der `gruppe.yml` Datei einen kurzen Pitch (in etwa wie in diesem Dokument) einreichen, damit wir uns vorstellen können, was Sie machen wollen und den Umfang begutachten. +*Die folgenden Beschreibungen sind keine Spezifikationen, die den Funktionsumfang der Projekte festlegen,* sondern nur ein "Braindump" von den Ideen, die mir zu dem entsprechenden System gekommen sind. Die Beschreibungen sollen Ihnen primär helfen, Systeme auszusuchen, die Sie umsetzen möchten. Wenn Sie einen eigenen Vorschlag für ein System haben, können Sie das auch gerne vorschlagen. Sie müssen dann zusammen mit der `group.yml` Datei einen kurzen Pitch (in etwa wie in diesem Dokument) einreichen, damit wir uns vorstellen können, was Sie machen wollen und den Umfang begutachten. === Online Modulhandbuch Im Modulhandbuch werden die Beschreibungen für Veranstaltungen angegeben. Die Beschreibungen werden von den Dozierenden angelegt und werden von einer Verantwortlichen geprüft und dann freigeschaltet. diff --git a/src/main/java/mops/gruppen2/controllers/Gruppen2Controller.java b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java similarity index 82% rename from src/main/java/mops/gruppen2/controllers/Gruppen2Controller.java rename to src/main/java/mops/gruppen2/controller/Gruppen2Controller.java index eea8b70..e5ac048 100644 --- a/src/main/java/mops/gruppen2/controllers/Gruppen2Controller.java +++ b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java @@ -1,13 +1,11 @@ -package mops.gruppen2.controllers; +package mops.gruppen2.controller; -import mops.gruppen2.services.KeyCloakService; +import mops.gruppen2.service.KeyCloakService; import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.context.annotation.SessionScope; import javax.annotation.security.RolesAllowed; diff --git a/src/main/java/mops/gruppen2/controllers/SwaggerAPIController.java b/src/main/java/mops/gruppen2/controller/SwaggerAPIController.java similarity index 95% rename from src/main/java/mops/gruppen2/controllers/SwaggerAPIController.java rename to src/main/java/mops/gruppen2/controller/SwaggerAPIController.java index 6811f25..932fbfe 100644 --- a/src/main/java/mops/gruppen2/controllers/SwaggerAPIController.java +++ b/src/main/java/mops/gruppen2/controller/SwaggerAPIController.java @@ -1,4 +1,4 @@ -package mops.gruppen2.controllers; +package mops.gruppen2.controller; import org.springframework.web.bind.annotation.RequestMapping; diff --git a/src/main/java/mops/gruppen2/domain/Admin.java b/src/main/java/mops/gruppen2/domain/Admin.java new file mode 100644 index 0000000..2b03dae --- /dev/null +++ b/src/main/java/mops/gruppen2/domain/Admin.java @@ -0,0 +1,4 @@ +package mops.gruppen2.domain; + +public class Admin extends Role { +} diff --git a/src/main/java/mops/gruppen2/entities/Aggregat.java b/src/main/java/mops/gruppen2/domain/Aggregate.java similarity index 81% rename from src/main/java/mops/gruppen2/entities/Aggregat.java rename to src/main/java/mops/gruppen2/domain/Aggregate.java index a259113..f09b3ea 100644 --- a/src/main/java/mops/gruppen2/entities/Aggregat.java +++ b/src/main/java/mops/gruppen2/domain/Aggregate.java @@ -1,10 +1,10 @@ -package mops.gruppen2.entities; +package mops.gruppen2.domain; -import mops.gruppen2.events.Event; +import mops.gruppen2.domain.event.Event; import java.lang.reflect.Method; -public abstract class Aggregat { +public abstract class Aggregate { /** * Ruft die spezifische applyEvent-Methode im entsprechenden Aggregat auf. diff --git a/src/main/java/mops/gruppen2/domain/Group.java b/src/main/java/mops/gruppen2/domain/Group.java new file mode 100644 index 0000000..5c95fb8 --- /dev/null +++ b/src/main/java/mops/gruppen2/domain/Group.java @@ -0,0 +1,69 @@ +package mops.gruppen2.domain; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import mops.gruppen2.domain.event.*; +import mops.gruppen2.domain.event.AddUserEvent; +import mops.gruppen2.domain.event.CreateGroupEvent; +import mops.gruppen2.domain.event.UpdateGroupDescriptionEvent; +import mops.gruppen2.domain.event.UpdateGroupTitleEvent; +import mops.gruppen2.domain.event.DeleteUserEvent; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@EqualsAndHashCode(callSuper=false) +@Data +public class Group extends Aggregate { + long id; + String titel; + String beschreibung; + List teilnehmersList; + Map rollenList; + + public void applyEvent(CreateGroupEvent event){ + this.id = event.getGruppe_id(); + this.titel = event.getTitel(); + this.beschreibung = event.getBeschreibung(); + this.teilnehmersList = new ArrayList<>(); + this.rollenList = new HashMap<>(); + } + + public void applyEvent(UpdateRoleEvent event) { + teilnehmersList.stream() + .filter(user -> user.getId().equals(event.getUser_id())) + .findFirst() + .ifPresentOrElse(user -> rollenList.put(user, event.getRole()), + () -> System.out.println("UserNotFoundException")); + } + + public void applyEvent(AddUserEvent event){ + User user = new User(); + + user.setId(event.getUser_id()); + user.setVorname(event.getVorname()); + user.setNachname(event.getNachname()); + user.setEmail(event.getEmail()); + + this.teilnehmersList.add(user); + } + + public void applyEvent(UpdateGroupTitleEvent event) { + this.titel = event.getTitel(); + } + + public void applyEvent(UpdateGroupDescriptionEvent event) { + this.beschreibung = event.getBeschreibung(); + } + + public void applyEvent(DeleteUserEvent event) { + for (User user : teilnehmersList) { + if (user.getId().equals(event.getUser_id())) { + this.teilnehmersList.remove(user); + break; + } + } + } +} diff --git a/src/main/java/mops/gruppen2/domain/Org.java b/src/main/java/mops/gruppen2/domain/Org.java new file mode 100644 index 0000000..4780b5b --- /dev/null +++ b/src/main/java/mops/gruppen2/domain/Org.java @@ -0,0 +1,4 @@ +package mops.gruppen2.domain; + +public class Org extends Role { +} diff --git a/src/main/java/mops/gruppen2/domain/Role.java b/src/main/java/mops/gruppen2/domain/Role.java new file mode 100644 index 0000000..c62431e --- /dev/null +++ b/src/main/java/mops/gruppen2/domain/Role.java @@ -0,0 +1,5 @@ +package mops.gruppen2.domain; + +public class Role { + +} diff --git a/src/main/java/mops/gruppen2/entities/Teilnehmer.java b/src/main/java/mops/gruppen2/domain/User.java similarity index 58% rename from src/main/java/mops/gruppen2/entities/Teilnehmer.java rename to src/main/java/mops/gruppen2/domain/User.java index 8eff602..7468b8e 100644 --- a/src/main/java/mops/gruppen2/entities/Teilnehmer.java +++ b/src/main/java/mops/gruppen2/domain/User.java @@ -1,14 +1,14 @@ -package mops.gruppen2.entities; +package mops.gruppen2.domain; import lombok.Data; import java.util.List; @Data -public class Teilnehmer { +public class User { String id; String vorname; String nachname; String email; - List Gruppen; + List gruppen; } diff --git a/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java b/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java new file mode 100644 index 0000000..c10bd1b --- /dev/null +++ b/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java @@ -0,0 +1,15 @@ +package mops.gruppen2.domain.event; + +import lombok.Getter; + +@Getter +public class AddUserEvent extends Event{ + String vorname, nachname, email; + + public AddUserEvent(long id, long gruppe_id, String user_id, String vorname, String nachname, String email) { + super(id, gruppe_id, user_id); + this.vorname = vorname; + this.nachname = nachname; + this.email = email; + } +} diff --git a/src/main/java/mops/gruppen2/events/CreateGroupEvent.java b/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java similarity index 89% rename from src/main/java/mops/gruppen2/events/CreateGroupEvent.java rename to src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java index cae95c3..4997872 100644 --- a/src/main/java/mops/gruppen2/events/CreateGroupEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java @@ -1,4 +1,4 @@ -package mops.gruppen2.events; +package mops.gruppen2.domain.event; import lombok.Getter; diff --git a/src/main/java/mops/gruppen2/events/DeleteUserEvent.java b/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java similarity index 84% rename from src/main/java/mops/gruppen2/events/DeleteUserEvent.java rename to src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java index 97924ce..0f06748 100644 --- a/src/main/java/mops/gruppen2/events/DeleteUserEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java @@ -1,4 +1,4 @@ -package mops.gruppen2.events; +package mops.gruppen2.domain.event; import lombok.Getter; diff --git a/src/main/java/mops/gruppen2/events/Event.java b/src/main/java/mops/gruppen2/domain/event/Event.java similarity index 80% rename from src/main/java/mops/gruppen2/events/Event.java rename to src/main/java/mops/gruppen2/domain/event/Event.java index da9c4e6..4ff1e21 100644 --- a/src/main/java/mops/gruppen2/events/Event.java +++ b/src/main/java/mops/gruppen2/domain/event/Event.java @@ -1,4 +1,4 @@ -package mops.gruppen2.events; +package mops.gruppen2.domain.event; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/src/main/java/mops/gruppen2/events/UpdateGroupDescriptionEvent.java b/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java similarity index 89% rename from src/main/java/mops/gruppen2/events/UpdateGroupDescriptionEvent.java rename to src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java index 232fe56..c7368c1 100644 --- a/src/main/java/mops/gruppen2/events/UpdateGroupDescriptionEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java @@ -1,4 +1,4 @@ -package mops.gruppen2.events; +package mops.gruppen2.domain.event; import lombok.Getter; diff --git a/src/main/java/mops/gruppen2/events/UpdateGroupTitleEvent.java b/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java similarity index 88% rename from src/main/java/mops/gruppen2/events/UpdateGroupTitleEvent.java rename to src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java index 4829561..5bc397f 100644 --- a/src/main/java/mops/gruppen2/events/UpdateGroupTitleEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java @@ -1,4 +1,4 @@ -package mops.gruppen2.events; +package mops.gruppen2.domain.event; import lombok.Getter; diff --git a/src/main/java/mops/gruppen2/events/UpdateRoleEvent.java b/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java similarity index 64% rename from src/main/java/mops/gruppen2/events/UpdateRoleEvent.java rename to src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java index a9d5141..e4157a9 100644 --- a/src/main/java/mops/gruppen2/events/UpdateRoleEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java @@ -1,14 +1,14 @@ -package mops.gruppen2.events; +package mops.gruppen2.domain.event; import lombok.Getter; -import mops.gruppen2.entities.Rolle; +import mops.gruppen2.domain.Role; @Getter public class UpdateRoleEvent extends Event { - private final Rolle role; + private final Role role; - public UpdateRoleEvent(long id, long gruppe_id, String user_id, Rolle newRole) { + public UpdateRoleEvent(long id, long gruppe_id, String user_id, Role newRole) { super(id, gruppe_id, user_id); this.role = newRole; diff --git a/src/main/java/mops/gruppen2/entities/Admin.java b/src/main/java/mops/gruppen2/entities/Admin.java deleted file mode 100644 index dcc21d8..0000000 --- a/src/main/java/mops/gruppen2/entities/Admin.java +++ /dev/null @@ -1,4 +0,0 @@ -package mops.gruppen2.entities; - -public class Admin extends Rolle { -} diff --git a/src/main/java/mops/gruppen2/entities/Gruppe.java b/src/main/java/mops/gruppen2/entities/Gruppe.java deleted file mode 100644 index 0a7ba4e..0000000 --- a/src/main/java/mops/gruppen2/entities/Gruppe.java +++ /dev/null @@ -1,69 +0,0 @@ -package mops.gruppen2.entities; - -import lombok.Data; -import lombok.EqualsAndHashCode; -import mops.gruppen2.events.*; -import mops.gruppen2.events.AddUser; -import mops.gruppen2.events.CreateGroupEvent; -import mops.gruppen2.events.UpdateGroupDescriptionEvent; -import mops.gruppen2.events.UpdateGroupTitleEvent; -import mops.gruppen2.events.DeleteUserEvent; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@EqualsAndHashCode(callSuper=false) -@Data -public class Gruppe extends Aggregat { - long id; - String titel; - String beschreibung; - List teilnehmersList; - Map rollenList; - - public void applyEvent(CreateGroupEvent event){ - this.id = event.getGruppe_id(); - this.titel = event.getTitel(); - this.beschreibung = event.getBeschreibung(); - this.teilnehmersList = new ArrayList<>(); - this.rollenList = new HashMap<>(); - } - - public void applyEvent(UpdateRoleEvent event) { - teilnehmersList.stream() - .filter(teilnehmer -> teilnehmer.getId().equals(event.getUser_id())) - .findFirst() - .ifPresentOrElse(teilnehmer -> rollenList.put(teilnehmer, event.getRole()), - () -> System.out.println("UserNotFoundException")); - } - - public void applyEvent(AddUser event){ - Teilnehmer teilnehmer = new Teilnehmer(); - - teilnehmer.setId(event.getUser_id()); - teilnehmer.setVorname(event.getVorname()); - teilnehmer.setNachname(event.getNachname()); - teilnehmer.setEmail(event.getEmail()); - - this.teilnehmersList.add(teilnehmer); - } - - public void applyEvent(UpdateGroupTitleEvent event) { - this.titel = event.getTitel(); - } - - public void applyEvent(UpdateGroupDescriptionEvent event) { - this.beschreibung = event.getBeschreibung(); - } - - public void applyEvent(DeleteUserEvent event) { - for (Teilnehmer teilnehmer: teilnehmersList) { - if (teilnehmer.getId().equals(event.getUser_id())) { - this.teilnehmersList.remove(teilnehmer); - break; - } - } - } -} diff --git a/src/main/java/mops/gruppen2/entities/Orga.java b/src/main/java/mops/gruppen2/entities/Orga.java deleted file mode 100644 index ad86b27..0000000 --- a/src/main/java/mops/gruppen2/entities/Orga.java +++ /dev/null @@ -1,4 +0,0 @@ -package mops.gruppen2.entities; - -public class Orga extends Rolle { -} diff --git a/src/main/java/mops/gruppen2/entities/Rolle.java b/src/main/java/mops/gruppen2/entities/Rolle.java deleted file mode 100644 index 1a7bb04..0000000 --- a/src/main/java/mops/gruppen2/entities/Rolle.java +++ /dev/null @@ -1,5 +0,0 @@ -package mops.gruppen2.entities; - -public class Rolle { - -} diff --git a/src/main/java/mops/gruppen2/events/AddUser.java b/src/main/java/mops/gruppen2/events/AddUser.java deleted file mode 100644 index bb705b5..0000000 --- a/src/main/java/mops/gruppen2/events/AddUser.java +++ /dev/null @@ -1,15 +0,0 @@ -package mops.gruppen2.events; - -import lombok.Getter; - -@Getter -public class AddUser extends Event{ - String vorname, nachname, email; - - public AddUser(long id, long gruppe_id, String user_id, String vorname, String nachname, String email) { - super(id, gruppe_id, user_id); - this.vorname = vorname; - this.nachname = nachname; - this.email = email; - } -} diff --git a/src/main/java/mops/gruppen2/repositories/EventRepository.java b/src/main/java/mops/gruppen2/repository/EventRepository.java similarity index 64% rename from src/main/java/mops/gruppen2/repositories/EventRepository.java rename to src/main/java/mops/gruppen2/repository/EventRepository.java index a3b329d..0e04761 100644 --- a/src/main/java/mops/gruppen2/repositories/EventRepository.java +++ b/src/main/java/mops/gruppen2/repository/EventRepository.java @@ -1,6 +1,6 @@ -package mops.gruppen2.repositories; +package mops.gruppen2.repository; -import mops.gruppen2.events.Event; +import mops.gruppen2.domain.event.Event; import org.springframework.data.repository.CrudRepository; public interface EventRepository extends CrudRepository { diff --git a/src/main/java/mops/gruppen2/service/GroupService.java b/src/main/java/mops/gruppen2/service/GroupService.java new file mode 100644 index 0000000..9b8e697 --- /dev/null +++ b/src/main/java/mops/gruppen2/service/GroupService.java @@ -0,0 +1,16 @@ +package mops.gruppen2.service; + +import mops.gruppen2.domain.Group; +import mops.gruppen2.domain.event.Event; +import org.springframework.stereotype.Service; +import java.util.List; + +@Service +public class GroupService { + + Group buildGroup(List eventList){ + Group newGroup = new Group(); + eventList.forEach(newGroup::applyEvent); + return newGroup; + } +} diff --git a/src/main/java/mops/gruppen2/services/KeyCloakService.java b/src/main/java/mops/gruppen2/service/KeyCloakService.java similarity index 96% rename from src/main/java/mops/gruppen2/services/KeyCloakService.java rename to src/main/java/mops/gruppen2/service/KeyCloakService.java index 99d2548..825d734 100644 --- a/src/main/java/mops/gruppen2/services/KeyCloakService.java +++ b/src/main/java/mops/gruppen2/service/KeyCloakService.java @@ -1,4 +1,4 @@ -package mops.gruppen2.services; +package mops.gruppen2.service; import mops.gruppen2.security.Account; import org.keycloak.KeycloakPrincipal; diff --git a/src/main/java/mops/gruppen2/services/SerializationService.java b/src/main/java/mops/gruppen2/service/SerializationService.java similarity index 79% rename from src/main/java/mops/gruppen2/services/SerializationService.java rename to src/main/java/mops/gruppen2/service/SerializationService.java index b8de09a..53f63d3 100644 --- a/src/main/java/mops/gruppen2/services/SerializationService.java +++ b/src/main/java/mops/gruppen2/service/SerializationService.java @@ -1,4 +1,4 @@ -package mops.gruppen2.services; +package mops.gruppen2.service; import org.springframework.stereotype.Service; diff --git a/src/main/java/mops/gruppen2/services/GruppenService.java b/src/main/java/mops/gruppen2/services/GruppenService.java deleted file mode 100644 index 9e72148..0000000 --- a/src/main/java/mops/gruppen2/services/GruppenService.java +++ /dev/null @@ -1,16 +0,0 @@ -package mops.gruppen2.services; - -import mops.gruppen2.events.Event; -import mops.gruppen2.entities.Gruppe; -import org.springframework.stereotype.Service; -import java.util.List; - -@Service -public class GruppenService { - - Gruppe buildGroup(List eventList){ - Gruppe newGroup = new Gruppe(); - eventList.forEach(newGroup::applyEvent); - return newGroup; - } -} diff --git a/src/test/java/mops/gruppen2/domain/GroupTest.java b/src/test/java/mops/gruppen2/domain/GroupTest.java new file mode 100644 index 0000000..50bdfbc --- /dev/null +++ b/src/test/java/mops/gruppen2/domain/GroupTest.java @@ -0,0 +1,90 @@ +package mops.gruppen2.domain; + +import mops.gruppen2.domain.event.AddUserEvent; +import mops.gruppen2.domain.event.CreateGroupEvent; +import mops.gruppen2.domain.event.UpdateRoleEvent; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class GroupTest { + + AddUserEvent addUserEvent; + CreateGroupEvent createGroupEvent; + + @BeforeEach + public void setUp(){ + + } + + + @Test + void applyEvent() { + } + + @Test + void applyAddUserEvent(){ + Group group = new Group(); + Group testGroup = new Group(); + User user = new User(); + addUserEvent = new AddUserEvent(1L,1L,"prof","jens","bendi", "hi@gmail.com"); + createGroupEvent = new CreateGroupEvent(1L,1L,"prof1", "hi", "foo"); + + group.applyEvent(createGroupEvent); + group.applyEvent(addUserEvent); + testGroup.applyEvent(createGroupEvent); + user.setId("prof"); + user.setVorname("jens"); + user.setNachname("bendi"); + user.setEmail("hi@gmail.com"); + List testTeil= new ArrayList<>(); + testTeil.add(user); + testGroup.setTeilnehmersList(testTeil); + + assertEquals(testGroup, group); + } + + // Verwendet CreateGroupEvent und AddUserEvent + @Test + void updateRoleForExistingUser() { + // Arrange + Group group = new Group(); + Org org = new Org(); + + group.applyEvent(new CreateGroupEvent(1L, 1L, "1L", "gruppe1", "Eine Testgruppe")); + group.applyEvent(new AddUserEvent(1L, 1L, "5L", "Peter", "Pan", "123@mail.de")); + + // Act + group.applyEvent(new UpdateRoleEvent(1L, 1L, "5L", org)); + + // Assert + assertThat(group.getRollenList()) + .containsOnlyKeys(group.getTeilnehmersList().get(0)) + .containsValue(org); + } + + @Test + void applyCreteGroupEvent() { + String userId = "asd"; + CreateGroupEvent event = new CreateGroupEvent(1L,2,userId, "hello", "foo"); + + Group group1 = new Group(); + group1.applyEvent(event); + + Group group2 = new Group(); + group2.id = 2L; + group2.titel = "hello"; + group2.beschreibung = "foo"; + group2.teilnehmersList = new ArrayList<>(); + group2.rollenList = new HashMap<>(); + + assertEquals(group2, group1); + } + +} diff --git a/src/test/java/mops/gruppen2/entities/GruppeTest.java b/src/test/java/mops/gruppen2/entities/GruppeTest.java deleted file mode 100644 index ce7da2f..0000000 --- a/src/test/java/mops/gruppen2/entities/GruppeTest.java +++ /dev/null @@ -1,90 +0,0 @@ -package mops.gruppen2.entities; - -import mops.gruppen2.events.AddUser; -import mops.gruppen2.events.CreateGroupEvent; -import mops.gruppen2.events.UpdateRoleEvent; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertEquals; - -class GruppeTest { - - AddUser addUser; - CreateGroupEvent createGroupEvent; - - @BeforeEach - public void setUp(){ - - } - - - @Test - void applyEvent() { - } - - @Test - void applyAddUserEvent(){ - Gruppe gruppe = new Gruppe(); - Gruppe testGruppe = new Gruppe(); - Teilnehmer teilnehmer = new Teilnehmer(); - addUser = new AddUser(1L,1L,"prof","jens","bendi", "hi@gmail.com"); - createGroupEvent = new CreateGroupEvent(1L,1L,"prof1", "hi", "foo"); - - gruppe.applyEvent(createGroupEvent); - gruppe.applyEvent(addUser); - testGruppe.applyEvent(createGroupEvent); - teilnehmer.setId("prof"); - teilnehmer.setVorname("jens"); - teilnehmer.setNachname("bendi"); - teilnehmer.setEmail("hi@gmail.com"); - List testTeil= new ArrayList<>(); - testTeil.add(teilnehmer); - testGruppe.setTeilnehmersList(testTeil); - - assertEquals(testGruppe,gruppe); - } - - // Verwendet CreateGroupEvent und AddUserEvent - @Test - void updateRoleForExistingUser() { - // Arrange - Gruppe gruppe = new Gruppe(); - Orga orga = new Orga(); - - gruppe.applyEvent(new CreateGroupEvent(1L, 1L, "1L", "gruppe1", "Eine Testgruppe")); - gruppe.applyEvent(new AddUser(1L, 1L, "5L", "Peter", "Pan", "123@mail.de")); - - // Act - gruppe.applyEvent(new UpdateRoleEvent(1L, 1L, "5L", orga)); - - // Assert - assertThat(gruppe.getRollenList()) - .containsOnlyKeys(gruppe.getTeilnehmersList().get(0)) - .containsValue(orga); - } - - @Test - void applyCreteGroupEvent() { - String userId = "asd"; - CreateGroupEvent event = new CreateGroupEvent(1L,2,userId, "hello", "foo"); - - Gruppe gruppe1 = new Gruppe(); - gruppe1.applyEvent(event); - - Gruppe gruppe2 = new Gruppe(); - gruppe2.id = 2L; - gruppe2.titel = "hello"; - gruppe2.beschreibung = "foo"; - gruppe2.teilnehmersList = new ArrayList<>(); - gruppe2.rollenList = new HashMap<>(); - - assertEquals(gruppe2, gruppe1); - } - -} \ No newline at end of file From 0537f273332712e5f639275bae84bf18fba0891e Mon Sep 17 00:00:00 2001 From: Christoph Date: Fri, 6 Mar 2020 20:23:39 +0100 Subject: [PATCH 14/31] try to make naming more consistent --- src/main/java/mops/gruppen2/domain/Group.java | 42 +++++++++---------- src/main/java/mops/gruppen2/domain/User.java | 11 +++-- .../gruppen2/domain/event/AddUserEvent.java | 10 ++--- .../domain/event/CreateGroupEvent.java | 12 +++--- .../domain/event/DeleteUserEvent.java | 4 +- .../mops/gruppen2/domain/event/Event.java | 4 +- .../event/UpdateGroupDescriptionEvent.java | 8 ++-- .../domain/event/UpdateGroupTitleEvent.java | 8 ++-- .../domain/event/UpdateRoleEvent.java | 8 ++-- .../mops/gruppen2/service/GroupService.java | 4 +- .../java/mops/gruppen2/domain/GroupTest.java | 23 ++++------ 11 files changed, 65 insertions(+), 69 deletions(-) diff --git a/src/main/java/mops/gruppen2/domain/Group.java b/src/main/java/mops/gruppen2/domain/Group.java index 5c95fb8..81e746d 100644 --- a/src/main/java/mops/gruppen2/domain/Group.java +++ b/src/main/java/mops/gruppen2/domain/Group.java @@ -18,50 +18,50 @@ import java.util.Map; @Data public class Group extends Aggregate { long id; - String titel; - String beschreibung; - List teilnehmersList; - Map rollenList; + String title; + String description; + List members; + Map roles; public void applyEvent(CreateGroupEvent event){ - this.id = event.getGruppe_id(); - this.titel = event.getTitel(); - this.beschreibung = event.getBeschreibung(); - this.teilnehmersList = new ArrayList<>(); - this.rollenList = new HashMap<>(); + this.id = event.getGroup_id(); + this.title = event.getGroupTitle(); + this.description = event.getGroupDescription(); + this.members = new ArrayList<>(); + this.roles = new HashMap<>(); } public void applyEvent(UpdateRoleEvent event) { - teilnehmersList.stream() - .filter(user -> user.getId().equals(event.getUser_id())) + members.stream() + .filter(user -> user.getUser_id().equals(event.getUser_id())) .findFirst() - .ifPresentOrElse(user -> rollenList.put(user, event.getRole()), + .ifPresentOrElse(user -> roles.put(user, event.getNewRole()), () -> System.out.println("UserNotFoundException")); } public void applyEvent(AddUserEvent event){ User user = new User(); - user.setId(event.getUser_id()); - user.setVorname(event.getVorname()); - user.setNachname(event.getNachname()); + user.setUser_id(event.getUser_id()); + user.setGivenname(event.getGivenname()); + user.setFamilyname(event.getFamilyname()); user.setEmail(event.getEmail()); - this.teilnehmersList.add(user); + this.members.add(user); } public void applyEvent(UpdateGroupTitleEvent event) { - this.titel = event.getTitel(); + this.title = event.getNewGroupTitle(); } public void applyEvent(UpdateGroupDescriptionEvent event) { - this.beschreibung = event.getBeschreibung(); + this.description = event.getNewGroupDescription(); } public void applyEvent(DeleteUserEvent event) { - for (User user : teilnehmersList) { - if (user.getId().equals(event.getUser_id())) { - this.teilnehmersList.remove(user); + for (User user : members) { + if (user.getUser_id().equals(event.getUser_id())) { + this.members.remove(user); break; } } diff --git a/src/main/java/mops/gruppen2/domain/User.java b/src/main/java/mops/gruppen2/domain/User.java index 7468b8e..0c1fa56 100644 --- a/src/main/java/mops/gruppen2/domain/User.java +++ b/src/main/java/mops/gruppen2/domain/User.java @@ -1,14 +1,13 @@ package mops.gruppen2.domain; +import lombok.AllArgsConstructor; import lombok.Data; -import java.util.List; - @Data +@AllArgsConstructor public class User { - String id; - String vorname; - String nachname; + String user_id; + String givenname; + String familyname; String email; - List gruppen; } diff --git a/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java b/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java index c10bd1b..fbf35a3 100644 --- a/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java @@ -4,12 +4,12 @@ import lombok.Getter; @Getter public class AddUserEvent extends Event{ - String vorname, nachname, email; + String givenname, familyname, email; - public AddUserEvent(long id, long gruppe_id, String user_id, String vorname, String nachname, String email) { - super(id, gruppe_id, user_id); - this.vorname = vorname; - this.nachname = nachname; + 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; } } diff --git a/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java b/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java index 4997872..27982e6 100644 --- a/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java @@ -4,12 +4,12 @@ import lombok.Getter; @Getter public class CreateGroupEvent extends Event { - String titel; - String beschreibung; + String groupTitle; + String groupDescription; - public CreateGroupEvent(long id, long gruppe_id, String user_id, String titel, String beschreibung) { - super(id, gruppe_id, user_id); - this.titel = titel; - this.beschreibung = beschreibung; + public CreateGroupEvent(long event_id, long group_id, String user_id, String groupTitle, String groupDescription) { + super(event_id, group_id, user_id); + this.groupTitle = groupTitle; + this.groupDescription = groupDescription; } } diff --git a/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java b/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java index 0f06748..6cbd55f 100644 --- a/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java @@ -5,7 +5,7 @@ import lombok.Getter; @Getter public class DeleteUserEvent extends Event{ - public DeleteUserEvent(long id, long gruppe_id, String user_id) { - super(id, gruppe_id, user_id); + public DeleteUserEvent(long event_id, long group_id, String user_id) { + super(event_id, group_id, user_id); } } diff --git a/src/main/java/mops/gruppen2/domain/event/Event.java b/src/main/java/mops/gruppen2/domain/event/Event.java index 4ff1e21..2805096 100644 --- a/src/main/java/mops/gruppen2/domain/event/Event.java +++ b/src/main/java/mops/gruppen2/domain/event/Event.java @@ -6,7 +6,7 @@ import lombok.Getter; @Getter @AllArgsConstructor public class Event { - long id; - long gruppe_id; + long event_id; + long group_id; String user_id; } diff --git a/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java b/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java index c7368c1..a0ada05 100644 --- a/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java @@ -4,10 +4,10 @@ import lombok.Getter; @Getter public class UpdateGroupDescriptionEvent extends Event { - String beschreibung; + String newGroupDescription; - public UpdateGroupDescriptionEvent(long id, long gruppe_id, String user_id, String beschreibung) { - super(id, gruppe_id, user_id); - this.beschreibung = beschreibung; + public UpdateGroupDescriptionEvent(long event_id, long group_id, String user_id, String newGroupDescription) { + super(event_id, group_id, user_id); + this.newGroupDescription = newGroupDescription; } } diff --git a/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java b/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java index 5bc397f..5e00b27 100644 --- a/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java @@ -4,10 +4,10 @@ import lombok.Getter; @Getter public class UpdateGroupTitleEvent extends Event { - String titel; + String newGroupTitle; - public UpdateGroupTitleEvent(long id, long gruppe_id, String user_id, String titel) { - super(id, gruppe_id, user_id); - this.titel = titel; + public UpdateGroupTitleEvent(long event_id, long group_id, String user_id, String newGroupTitle) { + super(event_id, group_id, user_id); + this.newGroupTitle = newGroupTitle; } } diff --git a/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java b/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java index e4157a9..b2398be 100644 --- a/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java @@ -6,11 +6,11 @@ import mops.gruppen2.domain.Role; @Getter public class UpdateRoleEvent extends Event { - private final Role role; + private final Role newRole; - public UpdateRoleEvent(long id, long gruppe_id, String user_id, Role newRole) { - super(id, gruppe_id, user_id); + public UpdateRoleEvent(long event_id, long group_id, String user_id, Role newRole) { + super(event_id, group_id, user_id); - this.role = newRole; + this.newRole = newRole; } } diff --git a/src/main/java/mops/gruppen2/service/GroupService.java b/src/main/java/mops/gruppen2/service/GroupService.java index 9b8e697..a5c959f 100644 --- a/src/main/java/mops/gruppen2/service/GroupService.java +++ b/src/main/java/mops/gruppen2/service/GroupService.java @@ -8,9 +8,11 @@ import java.util.List; @Service public class GroupService { - Group buildGroup(List eventList){ + Group buildGroupFromEvents(List eventList){ Group newGroup = new Group(); + eventList.forEach(newGroup::applyEvent); + return newGroup; } } diff --git a/src/test/java/mops/gruppen2/domain/GroupTest.java b/src/test/java/mops/gruppen2/domain/GroupTest.java index 50bdfbc..e8bab85 100644 --- a/src/test/java/mops/gruppen2/domain/GroupTest.java +++ b/src/test/java/mops/gruppen2/domain/GroupTest.java @@ -20,7 +20,6 @@ class GroupTest { @BeforeEach public void setUp(){ - } @@ -32,20 +31,16 @@ class GroupTest { void applyAddUserEvent(){ Group group = new Group(); Group testGroup = new Group(); - User user = new User(); + User user = new User("prof", "jens", "bendi", "hi@gmail.com"); addUserEvent = new AddUserEvent(1L,1L,"prof","jens","bendi", "hi@gmail.com"); createGroupEvent = new CreateGroupEvent(1L,1L,"prof1", "hi", "foo"); group.applyEvent(createGroupEvent); group.applyEvent(addUserEvent); testGroup.applyEvent(createGroupEvent); - user.setId("prof"); - user.setVorname("jens"); - user.setNachname("bendi"); - user.setEmail("hi@gmail.com"); - List testTeil= new ArrayList<>(); + List testTeil = new ArrayList<>(); testTeil.add(user); - testGroup.setTeilnehmersList(testTeil); + testGroup.setMembers(testTeil); assertEquals(testGroup, group); } @@ -64,8 +59,8 @@ class GroupTest { group.applyEvent(new UpdateRoleEvent(1L, 1L, "5L", org)); // Assert - assertThat(group.getRollenList()) - .containsOnlyKeys(group.getTeilnehmersList().get(0)) + assertThat(group.getRoles()) + .containsOnlyKeys(group.getMembers().get(0)) .containsValue(org); } @@ -79,10 +74,10 @@ class GroupTest { Group group2 = new Group(); group2.id = 2L; - group2.titel = "hello"; - group2.beschreibung = "foo"; - group2.teilnehmersList = new ArrayList<>(); - group2.rollenList = new HashMap<>(); + group2.title = "hello"; + group2.description = "foo"; + group2.members = new ArrayList<>(); + group2.roles = new HashMap<>(); assertEquals(group2, group1); } From 17ae13c1e8cc581805aaba95d9fd4460d60d5cee Mon Sep 17 00:00:00 2001 From: Christoph Date: Fri, 6 Mar 2020 20:55:29 +0100 Subject: [PATCH 15/31] made events immutable, removed group-setters -> changed tests to work without setters. --- src/main/java/mops/gruppen2/domain/Group.java | 28 ++++------ .../gruppen2/domain/event/AddUserEvent.java | 14 ++++- .../domain/event/CreateGroupEvent.java | 9 ++-- .../domain/event/DeleteUserEvent.java | 6 ++- .../mops/gruppen2/domain/event/Event.java | 8 +-- .../event/UpdateGroupDescriptionEvent.java | 6 ++- .../domain/event/UpdateGroupTitleEvent.java | 6 ++- .../domain/event/UpdateRoleEvent.java | 8 +-- .../java/mops/gruppen2/domain/GroupTest.java | 51 +++++++++---------- 9 files changed, 72 insertions(+), 64 deletions(-) diff --git a/src/main/java/mops/gruppen2/domain/Group.java b/src/main/java/mops/gruppen2/domain/Group.java index 81e746d..57ecd04 100644 --- a/src/main/java/mops/gruppen2/domain/Group.java +++ b/src/main/java/mops/gruppen2/domain/Group.java @@ -1,13 +1,8 @@ package mops.gruppen2.domain; -import lombok.Data; import lombok.EqualsAndHashCode; +import lombok.Getter; import mops.gruppen2.domain.event.*; -import mops.gruppen2.domain.event.AddUserEvent; -import mops.gruppen2.domain.event.CreateGroupEvent; -import mops.gruppen2.domain.event.UpdateGroupDescriptionEvent; -import mops.gruppen2.domain.event.UpdateGroupTitleEvent; -import mops.gruppen2.domain.event.DeleteUserEvent; import java.util.ArrayList; import java.util.HashMap; @@ -15,7 +10,7 @@ import java.util.List; import java.util.Map; @EqualsAndHashCode(callSuper=false) -@Data +@Getter public class Group extends Aggregate { long id; String title; @@ -23,7 +18,7 @@ public class Group extends Aggregate { List members; Map roles; - public void applyEvent(CreateGroupEvent event){ + private void applyEvent(CreateGroupEvent event){ this.id = event.getGroup_id(); this.title = event.getGroupTitle(); this.description = event.getGroupDescription(); @@ -31,7 +26,7 @@ public class Group extends Aggregate { this.roles = new HashMap<>(); } - public void applyEvent(UpdateRoleEvent event) { + private void applyEvent(UpdateRoleEvent event) { members.stream() .filter(user -> user.getUser_id().equals(event.getUser_id())) .findFirst() @@ -39,26 +34,21 @@ public class Group extends Aggregate { () -> System.out.println("UserNotFoundException")); } - public void applyEvent(AddUserEvent event){ - User user = new User(); - - user.setUser_id(event.getUser_id()); - user.setGivenname(event.getGivenname()); - user.setFamilyname(event.getFamilyname()); - user.setEmail(event.getEmail()); + private void applyEvent(AddUserEvent event){ + User user = new User(event.getUser_id(), event.getGivenname(), event.getFamilyname(), event.getEmail()); this.members.add(user); } - public void applyEvent(UpdateGroupTitleEvent event) { + private void applyEvent(UpdateGroupTitleEvent event) { this.title = event.getNewGroupTitle(); } - public void applyEvent(UpdateGroupDescriptionEvent event) { + private void applyEvent(UpdateGroupDescriptionEvent event) { this.description = event.getNewGroupDescription(); } - public void applyEvent(DeleteUserEvent event) { + private void applyEvent(DeleteUserEvent event) { for (User user : members) { if (user.getUser_id().equals(event.getUser_id())) { this.members.remove(user); diff --git a/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java b/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java index fbf35a3..287e41c 100644 --- a/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java @@ -1,8 +1,11 @@ package mops.gruppen2.domain.event; -import lombok.Getter; +import lombok.EqualsAndHashCode; +import lombok.Value; +import mops.gruppen2.domain.User; -@Getter +@EqualsAndHashCode(callSuper = true) +@Value public class AddUserEvent extends Event{ String givenname, familyname, email; @@ -12,4 +15,11 @@ public class AddUserEvent extends Event{ this.familyname = familyname; 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(); + } } diff --git a/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java b/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java index 27982e6..bec00c2 100644 --- a/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java @@ -1,11 +1,12 @@ package mops.gruppen2.domain.event; -import lombok.Getter; +import lombok.EqualsAndHashCode; +import lombok.Value; -@Getter +@EqualsAndHashCode(callSuper = true) +@Value public class CreateGroupEvent extends Event { - String groupTitle; - String groupDescription; + String groupTitle, groupDescription; public CreateGroupEvent(long event_id, long group_id, String user_id, String groupTitle, String groupDescription) { super(event_id, group_id, user_id); diff --git a/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java b/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java index 6cbd55f..24c8226 100644 --- a/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java @@ -1,8 +1,10 @@ package mops.gruppen2.domain.event; -import lombok.Getter; +import lombok.EqualsAndHashCode; +import lombok.Value; -@Getter +@EqualsAndHashCode(callSuper = true) +@Value public class DeleteUserEvent extends Event{ public DeleteUserEvent(long event_id, long group_id, String user_id) { diff --git a/src/main/java/mops/gruppen2/domain/event/Event.java b/src/main/java/mops/gruppen2/domain/event/Event.java index 2805096..781315e 100644 --- a/src/main/java/mops/gruppen2/domain/event/Event.java +++ b/src/main/java/mops/gruppen2/domain/event/Event.java @@ -1,10 +1,10 @@ package mops.gruppen2.domain.event; -import lombok.AllArgsConstructor; -import lombok.Getter; +import lombok.Value; +import lombok.experimental.NonFinal; -@Getter -@AllArgsConstructor +@Value +@NonFinal public class Event { long event_id; long group_id; diff --git a/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java b/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java index a0ada05..badc4b5 100644 --- a/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java @@ -1,8 +1,10 @@ package mops.gruppen2.domain.event; -import lombok.Getter; +import lombok.EqualsAndHashCode; +import lombok.Value; -@Getter +@EqualsAndHashCode(callSuper = true) +@Value public class UpdateGroupDescriptionEvent extends Event { String newGroupDescription; diff --git a/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java b/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java index 5e00b27..74cb1ad 100644 --- a/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java @@ -1,8 +1,10 @@ package mops.gruppen2.domain.event; -import lombok.Getter; +import lombok.EqualsAndHashCode; +import lombok.Value; -@Getter +@EqualsAndHashCode(callSuper = true) +@Value public class UpdateGroupTitleEvent extends Event { String newGroupTitle; diff --git a/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java b/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java index b2398be..aaa1667 100644 --- a/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java @@ -1,12 +1,14 @@ package mops.gruppen2.domain.event; -import lombok.Getter; +import lombok.EqualsAndHashCode; +import lombok.Value; import mops.gruppen2.domain.Role; -@Getter +@EqualsAndHashCode(callSuper = true) +@Value public class UpdateRoleEvent extends Event { - private final Role newRole; + Role newRole; public UpdateRoleEvent(long event_id, long group_id, String user_id, Role newRole) { super(event_id, group_id, user_id); diff --git a/src/test/java/mops/gruppen2/domain/GroupTest.java b/src/test/java/mops/gruppen2/domain/GroupTest.java index e8bab85..3892b9e 100644 --- a/src/test/java/mops/gruppen2/domain/GroupTest.java +++ b/src/test/java/mops/gruppen2/domain/GroupTest.java @@ -8,7 +8,6 @@ import org.junit.jupiter.api.Test; import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -27,22 +26,40 @@ class GroupTest { void applyEvent() { } + @Test + void applyCreateGroupEvent() { + String userId = "asd"; + CreateGroupEvent event = new CreateGroupEvent(1L,2,userId, "hello", "foo"); + + Group group1 = new Group(); + group1.applyEvent(event); + + Group group2 = new Group(); + group2.id = 2L; + group2.title = "hello"; + group2.description = "foo"; + group2.members = new ArrayList<>(); + group2.roles = new HashMap<>(); + + assertEquals(group2, group1); + } + @Test void applyAddUserEvent(){ Group group = new Group(); - Group testGroup = new Group(); + // Group testGroup = new Group(); User user = new User("prof", "jens", "bendi", "hi@gmail.com"); - addUserEvent = new AddUserEvent(1L,1L,"prof","jens","bendi", "hi@gmail.com"); createGroupEvent = new CreateGroupEvent(1L,1L,"prof1", "hi", "foo"); + addUserEvent = new AddUserEvent(1L,1L, user); group.applyEvent(createGroupEvent); group.applyEvent(addUserEvent); - testGroup.applyEvent(createGroupEvent); - List testTeil = new ArrayList<>(); - testTeil.add(user); - testGroup.setMembers(testTeil); + // testGroup.applyEvent(createGroupEvent); + // List testTeil = new ArrayList<>(); + // testTeil.add(user); + // testGroup.setMembers(testTeil); - assertEquals(testGroup, group); + assertThat(group.getMembers().get(0)).isEqualTo(user); } // Verwendet CreateGroupEvent und AddUserEvent @@ -64,22 +81,4 @@ class GroupTest { .containsValue(org); } - @Test - void applyCreteGroupEvent() { - String userId = "asd"; - CreateGroupEvent event = new CreateGroupEvent(1L,2,userId, "hello", "foo"); - - Group group1 = new Group(); - group1.applyEvent(event); - - Group group2 = new Group(); - group2.id = 2L; - group2.title = "hello"; - group2.description = "foo"; - group2.members = new ArrayList<>(); - group2.roles = new HashMap<>(); - - assertEquals(group2, group1); - } - } From fb3a94cf040f3ab96331fdb4df1de688546f4bd1 Mon Sep 17 00:00:00 2001 From: Christoph Date: Fri, 6 Mar 2020 20:58:57 +0100 Subject: [PATCH 16/31] changed role representation to enum --- src/main/java/mops/gruppen2/domain/Admin.java | 4 ---- src/main/java/mops/gruppen2/domain/Org.java | 4 ---- src/main/java/mops/gruppen2/domain/Role.java | 4 ++-- src/test/java/mops/gruppen2/domain/GroupTest.java | 5 ++--- 4 files changed, 4 insertions(+), 13 deletions(-) delete mode 100644 src/main/java/mops/gruppen2/domain/Admin.java delete mode 100644 src/main/java/mops/gruppen2/domain/Org.java diff --git a/src/main/java/mops/gruppen2/domain/Admin.java b/src/main/java/mops/gruppen2/domain/Admin.java deleted file mode 100644 index 2b03dae..0000000 --- a/src/main/java/mops/gruppen2/domain/Admin.java +++ /dev/null @@ -1,4 +0,0 @@ -package mops.gruppen2.domain; - -public class Admin extends Role { -} diff --git a/src/main/java/mops/gruppen2/domain/Org.java b/src/main/java/mops/gruppen2/domain/Org.java deleted file mode 100644 index 4780b5b..0000000 --- a/src/main/java/mops/gruppen2/domain/Org.java +++ /dev/null @@ -1,4 +0,0 @@ -package mops.gruppen2.domain; - -public class Org extends Role { -} diff --git a/src/main/java/mops/gruppen2/domain/Role.java b/src/main/java/mops/gruppen2/domain/Role.java index c62431e..4d97579 100644 --- a/src/main/java/mops/gruppen2/domain/Role.java +++ b/src/main/java/mops/gruppen2/domain/Role.java @@ -1,5 +1,5 @@ package mops.gruppen2.domain; -public class Role { - +public enum Role { + ORGA, ADMIN } diff --git a/src/test/java/mops/gruppen2/domain/GroupTest.java b/src/test/java/mops/gruppen2/domain/GroupTest.java index 3892b9e..4541830 100644 --- a/src/test/java/mops/gruppen2/domain/GroupTest.java +++ b/src/test/java/mops/gruppen2/domain/GroupTest.java @@ -67,18 +67,17 @@ class GroupTest { void updateRoleForExistingUser() { // Arrange Group group = new Group(); - Org org = new Org(); group.applyEvent(new CreateGroupEvent(1L, 1L, "1L", "gruppe1", "Eine Testgruppe")); group.applyEvent(new AddUserEvent(1L, 1L, "5L", "Peter", "Pan", "123@mail.de")); // Act - group.applyEvent(new UpdateRoleEvent(1L, 1L, "5L", org)); + group.applyEvent(new UpdateRoleEvent(1L, 1L, "5L", Role.ORGA)); // Assert assertThat(group.getRoles()) .containsOnlyKeys(group.getMembers().get(0)) - .containsValue(org); + .containsValue(Role.ORGA); } } From e05c6f4e3ab93229e21d60bdeba5309180abca5a Mon Sep 17 00:00:00 2001 From: Christoph Date: Fri, 6 Mar 2020 21:30:58 +0100 Subject: [PATCH 17/31] decreased visibility of group-fields -> adapted tests and GroupService --- .../java/mops/gruppen2/domain/Aggregate.java | 10 +++- src/main/java/mops/gruppen2/domain/Group.java | 13 +++-- .../mops/gruppen2/service/GroupService.java | 12 ++++- .../java/mops/gruppen2/domain/GroupTest.java | 53 +++++++------------ 4 files changed, 44 insertions(+), 44 deletions(-) diff --git a/src/main/java/mops/gruppen2/domain/Aggregate.java b/src/main/java/mops/gruppen2/domain/Aggregate.java index f09b3ea..105c57b 100644 --- a/src/main/java/mops/gruppen2/domain/Aggregate.java +++ b/src/main/java/mops/gruppen2/domain/Aggregate.java @@ -1,15 +1,23 @@ package mops.gruppen2.domain; +import lombok.Getter; import mops.gruppen2.domain.event.Event; import java.lang.reflect.Method; public abstract class Aggregate { + @Getter + protected final long id; + + protected Aggregate(long id) { + this.id = id; + } + /** * Ruft die spezifische applyEvent-Methode im entsprechenden Aggregat auf. * - * @param event + * @param event Einzelne Änderung an dem Aggregat */ public void applyEvent(Event event) { try { diff --git a/src/main/java/mops/gruppen2/domain/Group.java b/src/main/java/mops/gruppen2/domain/Group.java index 57ecd04..9594372 100644 --- a/src/main/java/mops/gruppen2/domain/Group.java +++ b/src/main/java/mops/gruppen2/domain/Group.java @@ -12,14 +12,13 @@ import java.util.Map; @EqualsAndHashCode(callSuper=false) @Getter public class Group extends Aggregate { - long id; - String title; - String description; - List members; - Map roles; + private String title; + private String description; + private List members; + private Map roles; - private void applyEvent(CreateGroupEvent event){ - this.id = event.getGroup_id(); + public Group(CreateGroupEvent event) { + super(event.getGroup_id()); this.title = event.getGroupTitle(); this.description = event.getGroupDescription(); this.members = new ArrayList<>(); diff --git a/src/main/java/mops/gruppen2/service/GroupService.java b/src/main/java/mops/gruppen2/service/GroupService.java index a5c959f..c8f5c0f 100644 --- a/src/main/java/mops/gruppen2/service/GroupService.java +++ b/src/main/java/mops/gruppen2/service/GroupService.java @@ -1,6 +1,7 @@ package mops.gruppen2.service; import mops.gruppen2.domain.Group; +import mops.gruppen2.domain.event.CreateGroupEvent; import mops.gruppen2.domain.event.Event; import org.springframework.stereotype.Service; import java.util.List; @@ -8,8 +9,15 @@ import java.util.List; @Service public class GroupService { - Group buildGroupFromEvents(List eventList){ - Group newGroup = new Group(); + /** + * Konstruiert eine vollständige Gruppe aus Events, welche dieselbe Gruppe betreffen. + * + * @param event Initiales CreateGroup-Event + * @param eventList Die restlichen Events für diese Gruppe + * @return Gruppe auf aktuellem Stand + */ + Group buildGroupFromEvents(CreateGroupEvent event, List eventList){ + Group newGroup = new Group(event); eventList.forEach(newGroup::applyEvent); diff --git a/src/test/java/mops/gruppen2/domain/GroupTest.java b/src/test/java/mops/gruppen2/domain/GroupTest.java index 4541830..0aa8a42 100644 --- a/src/test/java/mops/gruppen2/domain/GroupTest.java +++ b/src/test/java/mops/gruppen2/domain/GroupTest.java @@ -2,62 +2,46 @@ package mops.gruppen2.domain; import mops.gruppen2.domain.event.AddUserEvent; import mops.gruppen2.domain.event.CreateGroupEvent; +import mops.gruppen2.domain.event.Event; import mops.gruppen2.domain.event.UpdateRoleEvent; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import java.util.ArrayList; -import java.util.HashMap; - import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertEquals; class GroupTest { - AddUserEvent addUserEvent; - CreateGroupEvent createGroupEvent; - @BeforeEach public void setUp(){ } + @Disabled @Test void applyEvent() { } @Test - void applyCreateGroupEvent() { - String userId = "asd"; - CreateGroupEvent event = new CreateGroupEvent(1L,2,userId, "hello", "foo"); + void createSingleGroup() { + CreateGroupEvent createGroupEvent = new CreateGroupEvent(1L,2, "asd", "hello", "foo"); - Group group1 = new Group(); - group1.applyEvent(event); + Group group = new Group(createGroupEvent); - Group group2 = new Group(); - group2.id = 2L; - group2.title = "hello"; - group2.description = "foo"; - group2.members = new ArrayList<>(); - group2.roles = new HashMap<>(); - - assertEquals(group2, group1); + assertThat(group.getDescription()).isEqualTo("foo"); + assertThat(group.getTitle()).isEqualTo("hello"); + assertThat(group.getId()).isEqualTo(2); } + // Verwendet CreateGroupEvent @Test - void applyAddUserEvent(){ - Group group = new Group(); - // Group testGroup = new Group(); - User user = new User("prof", "jens", "bendi", "hi@gmail.com"); - createGroupEvent = new CreateGroupEvent(1L,1L,"prof1", "hi", "foo"); - addUserEvent = new AddUserEvent(1L,1L, user); + void addSingleUser(){ + CreateGroupEvent createGroupEvent = new CreateGroupEvent(1L,1L,"prof1", "hi", "foo"); + Group group = new Group(createGroupEvent); - group.applyEvent(createGroupEvent); + User user = new User("prof", "jens", "bendi", "hi@gmail.com"); + AddUserEvent addUserEvent = new AddUserEvent(1L,1L, user); group.applyEvent(addUserEvent); - // testGroup.applyEvent(createGroupEvent); - // List testTeil = new ArrayList<>(); - // testTeil.add(user); - // testGroup.setMembers(testTeil); assertThat(group.getMembers().get(0)).isEqualTo(user); } @@ -66,10 +50,11 @@ class GroupTest { @Test void updateRoleForExistingUser() { // Arrange - Group group = new Group(); + CreateGroupEvent createGroupEvent = new CreateGroupEvent(1L, 1L, "1L", "gruppe1", "Eine Testgruppe"); + Event addUserEvent = new AddUserEvent(1L, 1L, "5L", "Peter", "Pan", "123@mail.de"); - group.applyEvent(new CreateGroupEvent(1L, 1L, "1L", "gruppe1", "Eine Testgruppe")); - group.applyEvent(new AddUserEvent(1L, 1L, "5L", "Peter", "Pan", "123@mail.de")); + Group group = new Group(createGroupEvent); + group.applyEvent(addUserEvent); // Act group.applyEvent(new UpdateRoleEvent(1L, 1L, "5L", Role.ORGA)); From cc174b3269eb989c22023cd6c101cae63be09c52 Mon Sep 17 00:00:00 2001 From: Christoph Date: Fri, 6 Mar 2020 22:18:11 +0100 Subject: [PATCH 18/31] general style improvements + javadoc --- config/checkstyle/checkstyle.xml | 7 ---- .../mops/gruppen2/Gruppen2Application.java | 2 +- .../controller/SwaggerAPIController.java | 29 +++++++++------- .../java/mops/gruppen2/domain/Aggregate.java | 5 ++- src/main/java/mops/gruppen2/domain/Role.java | 2 +- src/main/java/mops/gruppen2/domain/User.java | 9 ++--- .../gruppen2/domain/event/AddUserEvent.java | 33 +++++++++++-------- .../domain/event/CreateGroupEvent.java | 13 ++++---- .../domain/event/DeleteUserEvent.java | 5 ++- .../mops/gruppen2/domain/event/Event.java | 6 ++-- .../event/UpdateGroupDescriptionEvent.java | 3 ++ .../domain/event/UpdateGroupTitleEvent.java | 3 ++ .../domain/event/UpdateRoleEvent.java | 3 ++ .../gruppen2/security/SecurityConfig.java | 6 +++- .../mops/gruppen2/service/GroupService.java | 24 +++++++------- .../service/SerializationService.java | 2 +- .../gruppen2/Gruppen2ApplicationTests.java | 6 ++-- .../java/mops/gruppen2/domain/GroupTest.java | 15 ++++++--- 18 files changed, 103 insertions(+), 70 deletions(-) diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml index 0e70ecf..4506630 100644 --- a/config/checkstyle/checkstyle.xml +++ b/config/checkstyle/checkstyle.xml @@ -229,13 +229,6 @@ - - - - - diff --git a/src/main/java/mops/gruppen2/Gruppen2Application.java b/src/main/java/mops/gruppen2/Gruppen2Application.java index 2e7599a..71aa410 100644 --- a/src/main/java/mops/gruppen2/Gruppen2Application.java +++ b/src/main/java/mops/gruppen2/Gruppen2Application.java @@ -16,7 +16,7 @@ public class Gruppen2Application { } @Bean - public Docket productAPI(){ + public Docket productAPI() { return new Docket(DocumentationType.SWAGGER_2).select() .apis(RequestHandlerSelectors.basePackage("mops.gruppen2")).build(); } diff --git a/src/main/java/mops/gruppen2/controller/SwaggerAPIController.java b/src/main/java/mops/gruppen2/controller/SwaggerAPIController.java index 932fbfe..f1d0a10 100644 --- a/src/main/java/mops/gruppen2/controller/SwaggerAPIController.java +++ b/src/main/java/mops/gruppen2/controller/SwaggerAPIController.java @@ -10,15 +10,22 @@ import java.util.List; @RestController public class SwaggerAPIController { - @RequestMapping(value = "/products", method = RequestMethod.GET) - public List getProducts(){ - List productList = new ArrayList<>(); - productList.add("Honey"); - productList.add("Almond"); - return productList; - } - @RequestMapping(value = "/products", method = RequestMethod.POST) - public String createProduct() { - return "Product is saved successfully"; - } + + /** + * Ein Beispiel für eine API mit Swagger. + * + * @return Eine Liste von Produkten, repräsentiert durch Strings + */ + @RequestMapping(value = "/products", method = RequestMethod.GET) + public List getProducts() { + List productList = new ArrayList<>(); + productList.add("Honey"); + productList.add("Almond"); + return productList; + } + + @RequestMapping(value = "/products", method = RequestMethod.POST) + public String createProduct() { + return "Product is saved successfully"; + } } diff --git a/src/main/java/mops/gruppen2/domain/Aggregate.java b/src/main/java/mops/gruppen2/domain/Aggregate.java index 105c57b..0cd3081 100644 --- a/src/main/java/mops/gruppen2/domain/Aggregate.java +++ b/src/main/java/mops/gruppen2/domain/Aggregate.java @@ -5,6 +5,9 @@ import mops.gruppen2.domain.event.Event; import java.lang.reflect.Method; +/** + * Repräsentiert viele Events als aggregiertes Objekt. + */ public abstract class Aggregate { @Getter @@ -17,7 +20,7 @@ public abstract class Aggregate { /** * Ruft die spezifische applyEvent-Methode im entsprechenden Aggregat auf. * - * @param event Einzelne Änderung an dem Aggregat + * @param event Event, welches aggregiert wird */ public void applyEvent(Event event) { try { diff --git a/src/main/java/mops/gruppen2/domain/Role.java b/src/main/java/mops/gruppen2/domain/Role.java index 4d97579..91a6429 100644 --- a/src/main/java/mops/gruppen2/domain/Role.java +++ b/src/main/java/mops/gruppen2/domain/Role.java @@ -1,5 +1,5 @@ package mops.gruppen2.domain; public enum Role { - ORGA, ADMIN + ORGA, ADMIN, STUDENT } diff --git a/src/main/java/mops/gruppen2/domain/User.java b/src/main/java/mops/gruppen2/domain/User.java index 0c1fa56..d162b94 100644 --- a/src/main/java/mops/gruppen2/domain/User.java +++ b/src/main/java/mops/gruppen2/domain/User.java @@ -6,8 +6,9 @@ import lombok.Data; @Data @AllArgsConstructor public class User { - String user_id; - String givenname; - String familyname; - String email; + + String user_id; + String givenname; + String familyname; + String email; } diff --git a/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java b/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java index 287e41c..fd66ee9 100644 --- a/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/AddUserEvent.java @@ -4,22 +4,27 @@ import lombok.EqualsAndHashCode; import lombok.Value; import mops.gruppen2.domain.User; +/** + * Fügt einen einzelnen Nutzer einer Gruppe hinzu. + */ @EqualsAndHashCode(callSuper = true) @Value -public class AddUserEvent extends Event{ - String givenname, familyname, email; +public class AddUserEvent extends Event { + String givenname; + 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 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 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 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(); + } } diff --git a/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java b/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java index bec00c2..1f2a3e1 100644 --- a/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/CreateGroupEvent.java @@ -6,11 +6,12 @@ import lombok.Value; @EqualsAndHashCode(callSuper = true) @Value public class CreateGroupEvent extends Event { - String groupTitle, groupDescription; + String groupTitle; + String groupDescription; - public CreateGroupEvent(long event_id, long group_id, String user_id, String groupTitle, String groupDescription) { - super(event_id, group_id, user_id); - this.groupTitle = groupTitle; - this.groupDescription = groupDescription; - } + public CreateGroupEvent(long event_id, long group_id, String user_id, String groupTitle, String groupDescription) { + super(event_id, group_id, user_id); + this.groupTitle = groupTitle; + this.groupDescription = groupDescription; + } } diff --git a/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java b/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java index 24c8226..366dae2 100644 --- a/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/DeleteUserEvent.java @@ -3,9 +3,12 @@ package mops.gruppen2.domain.event; import lombok.EqualsAndHashCode; import lombok.Value; +/** + * Entfernt ein einzelnes Mitglied einer Gruppe. + */ @EqualsAndHashCode(callSuper = true) @Value -public class DeleteUserEvent extends Event{ +public class DeleteUserEvent extends Event { public DeleteUserEvent(long event_id, long group_id, String user_id) { super(event_id, group_id, user_id); diff --git a/src/main/java/mops/gruppen2/domain/event/Event.java b/src/main/java/mops/gruppen2/domain/event/Event.java index 781315e..6835d96 100644 --- a/src/main/java/mops/gruppen2/domain/event/Event.java +++ b/src/main/java/mops/gruppen2/domain/event/Event.java @@ -6,7 +6,7 @@ import lombok.experimental.NonFinal; @Value @NonFinal public class Event { - long event_id; - long group_id; - String user_id; + long event_id; + long group_id; + String user_id; } diff --git a/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java b/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java index badc4b5..d4bc16c 100644 --- a/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/UpdateGroupDescriptionEvent.java @@ -3,6 +3,9 @@ package mops.gruppen2.domain.event; import lombok.EqualsAndHashCode; import lombok.Value; +/** + * Ändert nur die Gruppenbeschreibung. + */ @EqualsAndHashCode(callSuper = true) @Value public class UpdateGroupDescriptionEvent extends Event { diff --git a/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java b/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java index 74cb1ad..4f78f17 100644 --- a/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/UpdateGroupTitleEvent.java @@ -3,6 +3,9 @@ package mops.gruppen2.domain.event; import lombok.EqualsAndHashCode; import lombok.Value; +/** + * Ändert nur den Gruppentitel. + */ @EqualsAndHashCode(callSuper = true) @Value public class UpdateGroupTitleEvent extends Event { diff --git a/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java b/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java index aaa1667..ae8bd5e 100644 --- a/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java +++ b/src/main/java/mops/gruppen2/domain/event/UpdateRoleEvent.java @@ -4,6 +4,9 @@ import lombok.EqualsAndHashCode; import lombok.Value; import mops.gruppen2.domain.Role; +/** + * Aktualisiert die Gruppenrolle eines Teilnehmers. + */ @EqualsAndHashCode(callSuper = true) @Value public class UpdateRoleEvent extends Event { diff --git a/src/main/java/mops/gruppen2/security/SecurityConfig.java b/src/main/java/mops/gruppen2/security/SecurityConfig.java index e3299e7..da56f84 100644 --- a/src/main/java/mops/gruppen2/security/SecurityConfig.java +++ b/src/main/java/mops/gruppen2/security/SecurityConfig.java @@ -6,7 +6,11 @@ import org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticatio import org.keycloak.adapters.springsecurity.config.KeycloakWebSecurityConfigurerAdapter; import org.keycloak.representations.AccessToken; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.*; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Scope; +import org.springframework.context.annotation.ScopedProxyMode; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration; diff --git a/src/main/java/mops/gruppen2/service/GroupService.java b/src/main/java/mops/gruppen2/service/GroupService.java index c8f5c0f..52a717b 100644 --- a/src/main/java/mops/gruppen2/service/GroupService.java +++ b/src/main/java/mops/gruppen2/service/GroupService.java @@ -9,18 +9,18 @@ import java.util.List; @Service public class GroupService { - /** - * Konstruiert eine vollständige Gruppe aus Events, welche dieselbe Gruppe betreffen. - * - * @param event Initiales CreateGroup-Event - * @param eventList Die restlichen Events für diese Gruppe - * @return Gruppe auf aktuellem Stand - */ - Group buildGroupFromEvents(CreateGroupEvent event, List eventList){ - Group newGroup = new Group(event); + /** + * Konstruiert eine vollständige Gruppe aus Events, welche dieselbe Gruppe betreffen. + * + * @param event Initiales CreateGroup-Event + * @param eventList Die restlichen Events für diese Gruppe + * @return Gruppe auf aktuellem Stand + */ + Group buildGroupFromEvents(CreateGroupEvent event, List eventList) { + Group newGroup = new Group(event); - eventList.forEach(newGroup::applyEvent); + eventList.forEach(newGroup::applyEvent); - return newGroup; - } + return newGroup; + } } diff --git a/src/main/java/mops/gruppen2/service/SerializationService.java b/src/main/java/mops/gruppen2/service/SerializationService.java index 53f63d3..8d3452c 100644 --- a/src/main/java/mops/gruppen2/service/SerializationService.java +++ b/src/main/java/mops/gruppen2/service/SerializationService.java @@ -3,7 +3,7 @@ package mops.gruppen2.service; import org.springframework.stereotype.Service; /** - * Übersetzt und baut + * Übersetzt JSON-Event-Payloads zu Java-Event-Repräsentationen und zurück. */ @Service public class SerializationService { diff --git a/src/test/java/mops/gruppen2/Gruppen2ApplicationTests.java b/src/test/java/mops/gruppen2/Gruppen2ApplicationTests.java index e0b4ab2..5b437f6 100644 --- a/src/test/java/mops/gruppen2/Gruppen2ApplicationTests.java +++ b/src/test/java/mops/gruppen2/Gruppen2ApplicationTests.java @@ -6,8 +6,8 @@ import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class Gruppen2ApplicationTests { - @Test - void contextLoads() { - } + @Test + void contextLoads() { + } } diff --git a/src/test/java/mops/gruppen2/domain/GroupTest.java b/src/test/java/mops/gruppen2/domain/GroupTest.java index 0aa8a42..73d8db7 100644 --- a/src/test/java/mops/gruppen2/domain/GroupTest.java +++ b/src/test/java/mops/gruppen2/domain/GroupTest.java @@ -2,7 +2,6 @@ package mops.gruppen2.domain; import mops.gruppen2.domain.event.AddUserEvent; import mops.gruppen2.domain.event.CreateGroupEvent; -import mops.gruppen2.domain.event.Event; import mops.gruppen2.domain.event.UpdateRoleEvent; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; @@ -35,7 +34,7 @@ class GroupTest { // Verwendet CreateGroupEvent @Test - void addSingleUser(){ + void addSingleUser() { CreateGroupEvent createGroupEvent = new CreateGroupEvent(1L,1L,"prof1", "hi", "foo"); Group group = new Group(createGroupEvent); @@ -51,13 +50,15 @@ class GroupTest { void updateRoleForExistingUser() { // Arrange CreateGroupEvent createGroupEvent = new CreateGroupEvent(1L, 1L, "1L", "gruppe1", "Eine Testgruppe"); - Event addUserEvent = new AddUserEvent(1L, 1L, "5L", "Peter", "Pan", "123@mail.de"); + AddUserEvent addUserEvent = new AddUserEvent(1L, 1L, "5L", "Peter", "Pan", "123@mail.de"); Group group = new Group(createGroupEvent); group.applyEvent(addUserEvent); + UpdateRoleEvent updateRoleEvent = new UpdateRoleEvent(1L, 1L, "5L", Role.ORGA); + // Act - group.applyEvent(new UpdateRoleEvent(1L, 1L, "5L", Role.ORGA)); + group.applyEvent(updateRoleEvent); // Assert assertThat(group.getRoles()) @@ -65,4 +66,10 @@ class GroupTest { .containsValue(Role.ORGA); } + @Disabled + @Test + void updateRoleForNonExistingUser() { + + } + } From b94432eec658fa2136cfd2afae547bf4640ee860 Mon Sep 17 00:00:00 2001 From: Christoph Date: Fri, 6 Mar 2020 22:18:44 +0100 Subject: [PATCH 19/31] refactor UpdateRoleEvent-handler --- src/main/java/mops/gruppen2/domain/Group.java | 95 +++++++++++-------- 1 file changed, 54 insertions(+), 41 deletions(-) diff --git a/src/main/java/mops/gruppen2/domain/Group.java b/src/main/java/mops/gruppen2/domain/Group.java index 9594372..4df3f61 100644 --- a/src/main/java/mops/gruppen2/domain/Group.java +++ b/src/main/java/mops/gruppen2/domain/Group.java @@ -4,55 +4,68 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import mops.gruppen2.domain.event.*; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; -@EqualsAndHashCode(callSuper=false) +/** + * Repräsentiert den aggregierten Zustand einer Gruppe. + */ +@EqualsAndHashCode(callSuper = false) @Getter public class Group extends Aggregate { - private String title; - private String description; - private List members; - private Map roles; + private String title; + private String description; + private List members; + private Map roles; - public Group(CreateGroupEvent event) { - super(event.getGroup_id()); - this.title = event.getGroupTitle(); - this.description = event.getGroupDescription(); - this.members = new ArrayList<>(); - this.roles = new HashMap<>(); - } + public Group(CreateGroupEvent event) { + super(event.getGroup_id()); + this.title = event.getGroupTitle(); + this.description = event.getGroupDescription(); + this.members = new ArrayList<>(); + this.roles = new HashMap<>(); + } - private void applyEvent(UpdateRoleEvent event) { - members.stream() - .filter(user -> user.getUser_id().equals(event.getUser_id())) - .findFirst() - .ifPresentOrElse(user -> roles.put(user, event.getNewRole()), - () -> System.out.println("UserNotFoundException")); - } + private void applyEvent(UpdateRoleEvent event) { + User user; - private void applyEvent(AddUserEvent event){ - User user = new User(event.getUser_id(), event.getGivenname(), event.getFamilyname(), event.getEmail()); + Optional userOptional = members.stream() + .filter(u -> u.getUser_id().equals(event.getUser_id())) + .findFirst(); - this.members.add(user); - } + if (userOptional.isPresent()) { + user = userOptional.get(); + } else { + System.out.println("UserNotFoundException"); + return; + } - private void applyEvent(UpdateGroupTitleEvent event) { - this.title = event.getNewGroupTitle(); - } + if (roles.containsKey(user) && event.getNewRole() == Role.STUDENT) { + roles.remove(user); + } else { + roles.put(user, event.getNewRole()); + } + } - private void applyEvent(UpdateGroupDescriptionEvent event) { - this.description = event.getNewGroupDescription(); - } + private void applyEvent(AddUserEvent event) { + User user = new User(event.getUser_id(), event.getGivenname(), event.getFamilyname(), event.getEmail()); - private void applyEvent(DeleteUserEvent event) { - for (User user : members) { - if (user.getUser_id().equals(event.getUser_id())) { - this.members.remove(user); - break; - } - } - } + this.members.add(user); + } + + private void applyEvent(UpdateGroupTitleEvent event) { + this.title = event.getNewGroupTitle(); + } + + private void applyEvent(UpdateGroupDescriptionEvent event) { + this.description = event.getNewGroupDescription(); + } + + private void applyEvent(DeleteUserEvent event) { + for (User user : members) { + if (user.getUser_id().equals(event.getUser_id())) { + this.members.remove(user); + break; + } + } + } } From dd87078b2ee9a88aa04e04c4b7964f8cf53656c5 Mon Sep 17 00:00:00 2001 From: Christoph Date: Sat, 7 Mar 2020 16:31:26 +0100 Subject: [PATCH 20/31] refactor buildfile --- build.gradle | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/build.gradle b/build.gradle index 18cce31..e7e29c6 100644 --- a/build.gradle +++ b/build.gradle @@ -4,9 +4,18 @@ plugins { id 'org.springframework.boot' version '2.2.5.RELEASE' id 'io.spring.dependency-management' version '1.0.9.RELEASE' id 'java' - id 'com.github.spotbugs' version "3.0.0" + + id 'com.github.spotbugs' version '3.0.0' id 'checkstyle' + + id 'com.github.johnrengelman.processes' version '0.5.0' + id 'org.springdoc.openapi-gradle-plugin' version '1.0.0' } + +group = 'mops' +version = '0.0.1-SNAPSHOT' +sourceCompatibility = '11' + spotbugs{ ignoreFailures = true effort = "max" @@ -26,10 +35,6 @@ checkstyle { ignoreFailures = true } -group = 'mops' -version = '0.0.1-SNAPSHOT' -sourceCompatibility = '11' - configurations { developmentOnly runtimeClasspath { @@ -56,21 +61,27 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.keycloak:keycloak-spring-boot-starter:9.0.0' implementation 'org.keycloak.bom:keycloak-adapter-bom:3.3.0.Final' implementation 'mops:styleguide:2.1.0' - compile group: 'io.springfox', name: 'springfox-swagger2', version: '2.7.0' - compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.7.0' + + implementation 'io.springfox:springfox-swagger2:2.9.2' + implementation 'io.springfox:springfox-swagger-ui:2.9.2' + + compile 'org.springframework.boot:spring-boot-starter-web' + compileOnly 'org.projectlombok:lombok' - developmentOnly 'org.springframework.boot:spring-boot-devtools' - testImplementation 'org.assertj:assertj-core:3.15.0' - runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' + developmentOnly 'org.springframework.boot:spring-boot-devtools' + runtimeOnly 'com.h2database:h2' + + testImplementation 'org.assertj:assertj-core:3.15.0' testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' } testImplementation 'org.springframework.security:spring-security-test' - compile('org.springframework.boot:spring-boot-starter-web') + testImplementation 'com.tngtech.archunit:archunit-junit5:0.13.1' } test { From 1a3c0a459f32b7173e30feac157fba0d8b98dee2 Mon Sep 17 00:00:00 2001 From: Christoph Date: Sat, 7 Mar 2020 16:54:02 +0100 Subject: [PATCH 21/31] add javafaker + slf4j binding for spotbugs --- build.gradle | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index e7e29c6..61e65a9 100644 --- a/build.gradle +++ b/build.gradle @@ -65,9 +65,10 @@ dependencies { implementation 'org.keycloak:keycloak-spring-boot-starter:9.0.0' implementation 'org.keycloak.bom:keycloak-adapter-bom:3.3.0.Final' implementation 'mops:styleguide:2.1.0' - implementation 'io.springfox:springfox-swagger2:2.9.2' implementation 'io.springfox:springfox-swagger-ui:2.9.2' + implementation 'org.slf4j:slf4j-simple:1.7.30' + implementation 'com.github.javafaker:javafaker:1.0.2' compile 'org.springframework.boot:spring-boot-starter-web' From 6d32092dcf28141d033eae62aa58d527541288e4 Mon Sep 17 00:00:00 2001 From: Christoph Date: Sat, 7 Mar 2020 17:21:17 +0100 Subject: [PATCH 22/31] refine swagger example --- .../mops/gruppen2/Gruppen2Application.java | 26 +++++++++- .../controller/SwaggerAPIController.java | 31 ------------ .../SwaggerAPIControllerExample.java | 47 +++++++++++++++++++ .../domain/ProductSwaggerExample.java | 12 +++++ .../gruppen2/security/SecurityConfig.java | 2 - src/main/resources/application-dev.properties | 1 - 6 files changed, 83 insertions(+), 36 deletions(-) delete mode 100644 src/main/java/mops/gruppen2/controller/SwaggerAPIController.java create mode 100644 src/main/java/mops/gruppen2/controller/SwaggerAPIControllerExample.java create mode 100644 src/main/java/mops/gruppen2/domain/ProductSwaggerExample.java diff --git a/src/main/java/mops/gruppen2/Gruppen2Application.java b/src/main/java/mops/gruppen2/Gruppen2Application.java index 71aa410..0861b85 100644 --- a/src/main/java/mops/gruppen2/Gruppen2Application.java +++ b/src/main/java/mops/gruppen2/Gruppen2Application.java @@ -3,11 +3,16 @@ package mops.gruppen2; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; +import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.Contact; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; +import java.util.Collections; + @SpringBootApplication @EnableSwagger2 public class Gruppen2Application { @@ -17,7 +22,24 @@ public class Gruppen2Application { @Bean public Docket productAPI() { - return new Docket(DocumentationType.SWAGGER_2).select() - .apis(RequestHandlerSelectors.basePackage("mops.gruppen2")).build(); + return new Docket(DocumentationType.SWAGGER_2) + .select() + .paths(PathSelectors.ant("/products/**")) + .apis(RequestHandlerSelectors.basePackage("mops.gruppen2")) + .build() + .apiInfo(apiMetadata()); + } + + private ApiInfo apiMetadata() { + return new ApiInfo( + "Gruppenbildung API", + "API zum anfragen/aktualisieren der Gruppendaten.", + "0.0.1", + "Free to use", + new Contact("gruppen2", "https://github.com/hhu-propra2/abschlussprojekt-it-bois", ""), + "", + "", + Collections.emptyList() + ); } } diff --git a/src/main/java/mops/gruppen2/controller/SwaggerAPIController.java b/src/main/java/mops/gruppen2/controller/SwaggerAPIController.java deleted file mode 100644 index f1d0a10..0000000 --- a/src/main/java/mops/gruppen2/controller/SwaggerAPIController.java +++ /dev/null @@ -1,31 +0,0 @@ -package mops.gruppen2.controller; - - -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -import java.util.ArrayList; -import java.util.List; - -@RestController -public class SwaggerAPIController { - - /** - * Ein Beispiel für eine API mit Swagger. - * - * @return Eine Liste von Produkten, repräsentiert durch Strings - */ - @RequestMapping(value = "/products", method = RequestMethod.GET) - public List getProducts() { - List productList = new ArrayList<>(); - productList.add("Honey"); - productList.add("Almond"); - return productList; - } - - @RequestMapping(value = "/products", method = RequestMethod.POST) - public String createProduct() { - return "Product is saved successfully"; - } -} diff --git a/src/main/java/mops/gruppen2/controller/SwaggerAPIControllerExample.java b/src/main/java/mops/gruppen2/controller/SwaggerAPIControllerExample.java new file mode 100644 index 0000000..b186b9e --- /dev/null +++ b/src/main/java/mops/gruppen2/controller/SwaggerAPIControllerExample.java @@ -0,0 +1,47 @@ +package mops.gruppen2.controller; + + +import com.github.javafaker.Faker; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import mops.gruppen2.domain.ProductSwaggerExample; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; + +/** + * Ein Beispiel für eine API mit Swagger. + */ +@RestController +@RequestMapping("/products") +public class SwaggerAPIControllerExample { + + private final Faker faker = new Faker(); + private final List products = new ArrayList<>(); + + @GetMapping("/get/all") + @ApiOperation(value = "Erzeugt eine Liste mit allen gespeicherten Produkten") + public List getProducts() { + return products; + } + + @GetMapping("/get/{index}") + public ProductSwaggerExample getProduct(@ApiParam("Produkt Index") @PathVariable int index) { + return products.get(index); + } + + @PostMapping("/save") + public String saveProduct(@RequestBody ProductSwaggerExample product) { + products.add(product); + + return "Product saved successfully"; + } + + @PostMapping("/random") + public String saveRandomProduct() { + products.add(new ProductSwaggerExample(faker.food().ingredient(), "Empty")); + + return "Product saved successfully"; + } +} diff --git a/src/main/java/mops/gruppen2/domain/ProductSwaggerExample.java b/src/main/java/mops/gruppen2/domain/ProductSwaggerExample.java new file mode 100644 index 0000000..14f50dd --- /dev/null +++ b/src/main/java/mops/gruppen2/domain/ProductSwaggerExample.java @@ -0,0 +1,12 @@ +package mops.gruppen2.domain; + +import lombok.Value; + +// @ApiModelProperty +@Value +public class ProductSwaggerExample { + + // @ApiModelProperty + String name; + String description; +} diff --git a/src/main/java/mops/gruppen2/security/SecurityConfig.java b/src/main/java/mops/gruppen2/security/SecurityConfig.java index da56f84..8816b24 100644 --- a/src/main/java/mops/gruppen2/security/SecurityConfig.java +++ b/src/main/java/mops/gruppen2/security/SecurityConfig.java @@ -74,8 +74,6 @@ class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter { http.headers().frameOptions().disable(); } - - /** * Declaring this class enables us to use the Spring specific * {@link org.springframework.security.access.annotation.Secured} annotation diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties index a7ff497..3ad4107 100644 --- a/src/main/resources/application-dev.properties +++ b/src/main/resources/application-dev.properties @@ -14,4 +14,3 @@ keycloak.auth-server-url=https://keycloak.cs.hhu.de/auth keycloak.realm=MOPS keycloak.resource=demo keycloak.public-client=true - From d45aa8b7d9ea7b362c7ed206b7bc7317813ba217 Mon Sep 17 00:00:00 2001 From: Christoph Date: Mon, 9 Mar 2020 11:32:32 +0100 Subject: [PATCH 23/31] remove unnecessary dependency + increase spotbugs report level --- build.gradle | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 61e65a9..a811058 100644 --- a/build.gradle +++ b/build.gradle @@ -18,6 +18,7 @@ sourceCompatibility = '11' spotbugs{ ignoreFailures = true + reportLevel = "high" effort = "max" toolVersion = '4.0.0-RC1' } @@ -67,11 +68,8 @@ dependencies { implementation 'mops:styleguide:2.1.0' implementation 'io.springfox:springfox-swagger2:2.9.2' implementation 'io.springfox:springfox-swagger-ui:2.9.2' - implementation 'org.slf4j:slf4j-simple:1.7.30' implementation 'com.github.javafaker:javafaker:1.0.2' - compile 'org.springframework.boot:spring-boot-starter-web' - compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' developmentOnly 'org.springframework.boot:spring-boot-devtools' From cfb6af52c2042e4bc10d19dd60fd2314bd81c533 Mon Sep 17 00:00:00 2001 From: Christoph Date: Mon, 9 Mar 2020 11:36:09 +0100 Subject: [PATCH 24/31] removed unnecessary dependencies --- build.gradle | 3 --- 1 file changed, 3 deletions(-) diff --git a/build.gradle b/build.gradle index a811058..0872831 100644 --- a/build.gradle +++ b/build.gradle @@ -7,9 +7,6 @@ plugins { id 'com.github.spotbugs' version '3.0.0' id 'checkstyle' - - id 'com.github.johnrengelman.processes' version '0.5.0' - id 'org.springdoc.openapi-gradle-plugin' version '1.0.0' } group = 'mops' From c7f9c0b9850db6e3673093f088a18691b3b339b7 Mon Sep 17 00:00:00 2001 From: Christoph Date: Mon, 9 Mar 2020 12:28:46 +0100 Subject: [PATCH 25/31] removed final modifier from aggregate-id --- src/main/java/mops/gruppen2/domain/Aggregate.java | 6 +----- src/main/java/mops/gruppen2/domain/Group.java | 14 ++++++++------ 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/main/java/mops/gruppen2/domain/Aggregate.java b/src/main/java/mops/gruppen2/domain/Aggregate.java index 0cd3081..8439b6c 100644 --- a/src/main/java/mops/gruppen2/domain/Aggregate.java +++ b/src/main/java/mops/gruppen2/domain/Aggregate.java @@ -11,11 +11,7 @@ import java.lang.reflect.Method; public abstract class Aggregate { @Getter - protected final long id; - - protected Aggregate(long id) { - this.id = id; - } + protected long id; /** * Ruft die spezifische applyEvent-Methode im entsprechenden Aggregat auf. diff --git a/src/main/java/mops/gruppen2/domain/Group.java b/src/main/java/mops/gruppen2/domain/Group.java index 4df3f61..fceae1e 100644 --- a/src/main/java/mops/gruppen2/domain/Group.java +++ b/src/main/java/mops/gruppen2/domain/Group.java @@ -14,17 +14,19 @@ import java.util.*; public class Group extends Aggregate { private String title; private String description; - private List members; - private Map roles; + private final List members; + private final Map roles; - public Group(CreateGroupEvent event) { - super(event.getGroup_id()); - this.title = event.getGroupTitle(); - this.description = event.getGroupDescription(); + public Group() { this.members = new ArrayList<>(); this.roles = new HashMap<>(); } + private void applyEvent(CreateGroupEvent event) { + title = event.getGroupTitle(); + description = event.getGroupDescription(); + } + private void applyEvent(UpdateRoleEvent event) { User user; From 86a4975c008261e9651df985404227a42870c395 Mon Sep 17 00:00:00 2001 From: Christoph Date: Mon, 9 Mar 2020 12:46:29 +0100 Subject: [PATCH 26/31] fix tests after refactor --- src/main/java/mops/gruppen2/domain/Aggregate.java | 2 +- src/main/java/mops/gruppen2/domain/Group.java | 1 + .../java/mops/gruppen2/service/GroupService.java | 6 +++--- src/test/java/mops/gruppen2/domain/GroupTest.java | 15 +++++++++------ 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/main/java/mops/gruppen2/domain/Aggregate.java b/src/main/java/mops/gruppen2/domain/Aggregate.java index 8439b6c..294cc60 100644 --- a/src/main/java/mops/gruppen2/domain/Aggregate.java +++ b/src/main/java/mops/gruppen2/domain/Aggregate.java @@ -8,9 +8,9 @@ import java.lang.reflect.Method; /** * Repräsentiert viele Events als aggregiertes Objekt. */ +@Getter public abstract class Aggregate { - @Getter protected long id; /** diff --git a/src/main/java/mops/gruppen2/domain/Group.java b/src/main/java/mops/gruppen2/domain/Group.java index fceae1e..2716aeb 100644 --- a/src/main/java/mops/gruppen2/domain/Group.java +++ b/src/main/java/mops/gruppen2/domain/Group.java @@ -25,6 +25,7 @@ public class Group extends Aggregate { private void applyEvent(CreateGroupEvent event) { title = event.getGroupTitle(); description = event.getGroupDescription(); + id = event.getGroup_id(); } private void applyEvent(UpdateRoleEvent event) { diff --git a/src/main/java/mops/gruppen2/service/GroupService.java b/src/main/java/mops/gruppen2/service/GroupService.java index 52a717b..42e9d31 100644 --- a/src/main/java/mops/gruppen2/service/GroupService.java +++ b/src/main/java/mops/gruppen2/service/GroupService.java @@ -1,9 +1,9 @@ package mops.gruppen2.service; import mops.gruppen2.domain.Group; -import mops.gruppen2.domain.event.CreateGroupEvent; import mops.gruppen2.domain.event.Event; import org.springframework.stereotype.Service; + import java.util.List; @Service @@ -16,8 +16,8 @@ public class GroupService { * @param eventList Die restlichen Events für diese Gruppe * @return Gruppe auf aktuellem Stand */ - Group buildGroupFromEvents(CreateGroupEvent event, List eventList) { - Group newGroup = new Group(event); + Group buildGroupFromEvents(List eventList) { + Group newGroup = new Group(); eventList.forEach(newGroup::applyEvent); diff --git a/src/test/java/mops/gruppen2/domain/GroupTest.java b/src/test/java/mops/gruppen2/domain/GroupTest.java index 73d8db7..3901fe0 100644 --- a/src/test/java/mops/gruppen2/domain/GroupTest.java +++ b/src/test/java/mops/gruppen2/domain/GroupTest.java @@ -23,9 +23,10 @@ class GroupTest { @Test void createSingleGroup() { - CreateGroupEvent createGroupEvent = new CreateGroupEvent(1L,2, "asd", "hello", "foo"); + CreateGroupEvent createGroupEvent = new CreateGroupEvent(1,2, "asd", "hello", "foo"); - Group group = new Group(createGroupEvent); + Group group = new Group(); + group.applyEvent(createGroupEvent); assertThat(group.getDescription()).isEqualTo("foo"); assertThat(group.getTitle()).isEqualTo("hello"); @@ -35,11 +36,12 @@ class GroupTest { // Verwendet CreateGroupEvent @Test void addSingleUser() { - CreateGroupEvent createGroupEvent = new CreateGroupEvent(1L,1L,"prof1", "hi", "foo"); - Group group = new Group(createGroupEvent); + CreateGroupEvent createGroupEvent = new CreateGroupEvent(1,1,"prof1", "hi", "foo"); + Group group = new Group(); + group.applyEvent(createGroupEvent); User user = new User("prof", "jens", "bendi", "hi@gmail.com"); - AddUserEvent addUserEvent = new AddUserEvent(1L,1L, user); + AddUserEvent addUserEvent = new AddUserEvent(1,1, user); group.applyEvent(addUserEvent); assertThat(group.getMembers().get(0)).isEqualTo(user); @@ -52,7 +54,8 @@ class GroupTest { CreateGroupEvent createGroupEvent = new CreateGroupEvent(1L, 1L, "1L", "gruppe1", "Eine Testgruppe"); AddUserEvent addUserEvent = new AddUserEvent(1L, 1L, "5L", "Peter", "Pan", "123@mail.de"); - Group group = new Group(createGroupEvent); + Group group = new Group(); + group.applyEvent(createGroupEvent); group.applyEvent(addUserEvent); UpdateRoleEvent updateRoleEvent = new UpdateRoleEvent(1L, 1L, "5L", Role.ORGA); From af4a12c89218ea66ecc66549a0eb0b976fc5c1b6 Mon Sep 17 00:00:00 2001 From: Christoph Date: Mon, 9 Mar 2020 13:25:38 +0100 Subject: [PATCH 27/31] refactor aggregate build process --- src/main/java/mops/gruppen2/domain/Aggregate.java | 11 ++++++++++- .../java/mops/gruppen2/service/GroupService.java | 3 +-- src/test/java/mops/gruppen2/domain/GroupTest.java | 12 ++++++------ 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/main/java/mops/gruppen2/domain/Aggregate.java b/src/main/java/mops/gruppen2/domain/Aggregate.java index 294cc60..f5e2c8a 100644 --- a/src/main/java/mops/gruppen2/domain/Aggregate.java +++ b/src/main/java/mops/gruppen2/domain/Aggregate.java @@ -4,6 +4,7 @@ import lombok.Getter; import mops.gruppen2.domain.event.Event; import java.lang.reflect.Method; +import java.util.List; /** * Repräsentiert viele Events als aggregiertes Objekt. @@ -13,12 +14,20 @@ public abstract class Aggregate { protected long id; + public void apply(List events) { + events.forEach(this::applyEvent); + } + + public void apply(Event event) { + applyEvent(event); + } + /** * Ruft die spezifische applyEvent-Methode im entsprechenden Aggregat auf. * * @param event Event, welches aggregiert wird */ - public void applyEvent(Event event) { + private void applyEvent(Event event) { try { Method method = this.getClass().getDeclaredMethod("applyEvent", event.getClass()); method.setAccessible(true); diff --git a/src/main/java/mops/gruppen2/service/GroupService.java b/src/main/java/mops/gruppen2/service/GroupService.java index 42e9d31..b6dba9c 100644 --- a/src/main/java/mops/gruppen2/service/GroupService.java +++ b/src/main/java/mops/gruppen2/service/GroupService.java @@ -18,8 +18,7 @@ public class GroupService { */ Group buildGroupFromEvents(List eventList) { Group newGroup = new Group(); - - eventList.forEach(newGroup::applyEvent); + newGroup.apply(eventList); return newGroup; } diff --git a/src/test/java/mops/gruppen2/domain/GroupTest.java b/src/test/java/mops/gruppen2/domain/GroupTest.java index 3901fe0..192e7b6 100644 --- a/src/test/java/mops/gruppen2/domain/GroupTest.java +++ b/src/test/java/mops/gruppen2/domain/GroupTest.java @@ -26,7 +26,7 @@ class GroupTest { CreateGroupEvent createGroupEvent = new CreateGroupEvent(1,2, "asd", "hello", "foo"); Group group = new Group(); - group.applyEvent(createGroupEvent); + group.apply(createGroupEvent); assertThat(group.getDescription()).isEqualTo("foo"); assertThat(group.getTitle()).isEqualTo("hello"); @@ -38,11 +38,11 @@ class GroupTest { void addSingleUser() { CreateGroupEvent createGroupEvent = new CreateGroupEvent(1,1,"prof1", "hi", "foo"); Group group = new Group(); - group.applyEvent(createGroupEvent); + group.apply(createGroupEvent); User user = new User("prof", "jens", "bendi", "hi@gmail.com"); AddUserEvent addUserEvent = new AddUserEvent(1,1, user); - group.applyEvent(addUserEvent); + group.apply(addUserEvent); assertThat(group.getMembers().get(0)).isEqualTo(user); } @@ -55,13 +55,13 @@ class GroupTest { AddUserEvent addUserEvent = new AddUserEvent(1L, 1L, "5L", "Peter", "Pan", "123@mail.de"); Group group = new Group(); - group.applyEvent(createGroupEvent); - group.applyEvent(addUserEvent); + group.apply(createGroupEvent); + group.apply(addUserEvent); UpdateRoleEvent updateRoleEvent = new UpdateRoleEvent(1L, 1L, "5L", Role.ORGA); // Act - group.applyEvent(updateRoleEvent); + group.apply(updateRoleEvent); // Assert assertThat(group.getRoles()) From 1a3b1c52b3ba121327a958ebe21eb402b5040132 Mon Sep 17 00:00:00 2001 From: Christoph Date: Mon, 9 Mar 2020 13:25:54 +0100 Subject: [PATCH 28/31] add eventDTO --- src/main/java/mops/gruppen2/domain/EventDTO.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/main/java/mops/gruppen2/domain/EventDTO.java diff --git a/src/main/java/mops/gruppen2/domain/EventDTO.java b/src/main/java/mops/gruppen2/domain/EventDTO.java new file mode 100644 index 0000000..13bee88 --- /dev/null +++ b/src/main/java/mops/gruppen2/domain/EventDTO.java @@ -0,0 +1,13 @@ +package mops.gruppen2.domain; + +import lombok.Value; +import org.springframework.data.relational.core.mapping.Table; + +@Value +@Table("event") +public class EventDTO { + long event_id; + long group_id; + String user_id; + String event_payload; +} From 2da89300e357f437298871225cf9cd988056e376 Mon Sep 17 00:00:00 2001 From: Christoph Date: Mon, 9 Mar 2020 13:48:01 +0100 Subject: [PATCH 29/31] Jackson serialization test --- .../SwaggerAPIControllerExample.java | 23 +++++++++++++++++++ .../mops/gruppen2/domain/event/Event.java | 2 ++ .../mops/gruppen2/service/GroupService.java | 4 +--- .../service/SerializationService.java | 20 ++++++++++++++++ 4 files changed, 46 insertions(+), 3 deletions(-) diff --git a/src/main/java/mops/gruppen2/controller/SwaggerAPIControllerExample.java b/src/main/java/mops/gruppen2/controller/SwaggerAPIControllerExample.java index b186b9e..3b5c06e 100644 --- a/src/main/java/mops/gruppen2/controller/SwaggerAPIControllerExample.java +++ b/src/main/java/mops/gruppen2/controller/SwaggerAPIControllerExample.java @@ -1,10 +1,13 @@ package mops.gruppen2.controller; +import com.fasterxml.jackson.core.JsonProcessingException; import com.github.javafaker.Faker; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import mops.gruppen2.domain.ProductSwaggerExample; +import mops.gruppen2.domain.event.AddUserEvent; +import mops.gruppen2.service.SerializationService; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; @@ -19,6 +22,11 @@ public class SwaggerAPIControllerExample { private final Faker faker = new Faker(); private final List products = new ArrayList<>(); + private final SerializationService serializationService; + + public SwaggerAPIControllerExample(SerializationService serializationService) { + this.serializationService = serializationService; + } @GetMapping("/get/all") @ApiOperation(value = "Erzeugt eine Liste mit allen gespeicherten Produkten") @@ -44,4 +52,19 @@ public class SwaggerAPIControllerExample { return "Product saved successfully"; } + + @GetMapping("/json") + public void json() { + try { + serializationService.serializeEvent(new AddUserEvent( + 1, + 1, + "Eins", + faker.leagueOfLegends().location(), + faker.name().lastName(), + "123@email.de")); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } + } } diff --git a/src/main/java/mops/gruppen2/domain/event/Event.java b/src/main/java/mops/gruppen2/domain/event/Event.java index 6835d96..65f4584 100644 --- a/src/main/java/mops/gruppen2/domain/event/Event.java +++ b/src/main/java/mops/gruppen2/domain/event/Event.java @@ -1,10 +1,12 @@ package mops.gruppen2.domain.event; +import com.fasterxml.jackson.annotation.JsonTypeInfo; import lombok.Value; import lombok.experimental.NonFinal; @Value @NonFinal +@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME) public class Event { long event_id; long group_id; diff --git a/src/main/java/mops/gruppen2/service/GroupService.java b/src/main/java/mops/gruppen2/service/GroupService.java index b6dba9c..c018e76 100644 --- a/src/main/java/mops/gruppen2/service/GroupService.java +++ b/src/main/java/mops/gruppen2/service/GroupService.java @@ -12,14 +12,12 @@ public class GroupService { /** * Konstruiert eine vollständige Gruppe aus Events, welche dieselbe Gruppe betreffen. * - * @param event Initiales CreateGroup-Event - * @param eventList Die restlichen Events für diese Gruppe + * @param eventList Die Events für diese Gruppe * @return Gruppe auf aktuellem Stand */ Group buildGroupFromEvents(List eventList) { Group newGroup = new Group(); newGroup.apply(eventList); - return newGroup; } } diff --git a/src/main/java/mops/gruppen2/service/SerializationService.java b/src/main/java/mops/gruppen2/service/SerializationService.java index 8d3452c..57e9f3f 100644 --- a/src/main/java/mops/gruppen2/service/SerializationService.java +++ b/src/main/java/mops/gruppen2/service/SerializationService.java @@ -1,5 +1,11 @@ package mops.gruppen2.service; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import mops.gruppen2.domain.event.Event; +import mops.gruppen2.repository.EventRepository; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; /** @@ -7,4 +13,18 @@ import org.springframework.stereotype.Service; */ @Service public class SerializationService { + + private final EventRepository eventStore; + private final Logger log = LoggerFactory.getLogger(SerializationService.class); + + public SerializationService(EventRepository eventStore) { + this.eventStore = eventStore; + } + + public String serializeEvent(Event event) throws JsonProcessingException { + ObjectMapper mapper = new ObjectMapper(); + String json = mapper.writeValueAsString(event); + log.info(json); + return json; + } } From aa80a3b5dff548906cd83439552e550fb599f1d8 Mon Sep 17 00:00:00 2001 From: killerber4t Date: Mon, 9 Mar 2020 14:25:00 +0100 Subject: [PATCH 30/31] add Saving Events in DB --- .../controller/SwaggerAPIControllerExample.java | 16 +++++++++------- src/main/java/mops/gruppen2/domain/EventDTO.java | 5 ++++- .../gruppen2/repository/EventRepository.java | 3 ++- .../gruppen2/service/SerializationService.java | 14 ++++++++++++++ 4 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/main/java/mops/gruppen2/controller/SwaggerAPIControllerExample.java b/src/main/java/mops/gruppen2/controller/SwaggerAPIControllerExample.java index 3b5c06e..5953926 100644 --- a/src/main/java/mops/gruppen2/controller/SwaggerAPIControllerExample.java +++ b/src/main/java/mops/gruppen2/controller/SwaggerAPIControllerExample.java @@ -55,14 +55,16 @@ public class SwaggerAPIControllerExample { @GetMapping("/json") public void json() { + AddUserEvent aEvent = new AddUserEvent( + 1, + 1, + "Eins", + faker.leagueOfLegends().location(), + faker.name().lastName(), + "123@email.de"); try { - serializationService.serializeEvent(new AddUserEvent( - 1, - 1, - "Eins", - faker.leagueOfLegends().location(), - faker.name().lastName(), - "123@email.de")); + serializationService.serializeEvent(aEvent); + serializationService.saveEvent(aEvent); } catch (JsonProcessingException e) { e.printStackTrace(); } diff --git a/src/main/java/mops/gruppen2/domain/EventDTO.java b/src/main/java/mops/gruppen2/domain/EventDTO.java index 13bee88..c7ceda5 100644 --- a/src/main/java/mops/gruppen2/domain/EventDTO.java +++ b/src/main/java/mops/gruppen2/domain/EventDTO.java @@ -1,11 +1,14 @@ package mops.gruppen2.domain; +import lombok.Data; import lombok.Value; +import org.springframework.data.annotation.Id; import org.springframework.data.relational.core.mapping.Table; -@Value @Table("event") +@Data public class EventDTO { + @Id long event_id; long group_id; String user_id; diff --git a/src/main/java/mops/gruppen2/repository/EventRepository.java b/src/main/java/mops/gruppen2/repository/EventRepository.java index 0e04761..4352a97 100644 --- a/src/main/java/mops/gruppen2/repository/EventRepository.java +++ b/src/main/java/mops/gruppen2/repository/EventRepository.java @@ -1,7 +1,8 @@ package mops.gruppen2.repository; +import mops.gruppen2.domain.EventDTO; import mops.gruppen2.domain.event.Event; import org.springframework.data.repository.CrudRepository; -public interface EventRepository extends CrudRepository { +public interface EventRepository extends CrudRepository { } diff --git a/src/main/java/mops/gruppen2/service/SerializationService.java b/src/main/java/mops/gruppen2/service/SerializationService.java index 57e9f3f..c20af44 100644 --- a/src/main/java/mops/gruppen2/service/SerializationService.java +++ b/src/main/java/mops/gruppen2/service/SerializationService.java @@ -2,6 +2,7 @@ package mops.gruppen2.service; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import mops.gruppen2.domain.EventDTO; import mops.gruppen2.domain.event.Event; import mops.gruppen2.repository.EventRepository; import org.slf4j.Logger; @@ -27,4 +28,17 @@ public class SerializationService { log.info(json); return json; } + + public void saveEvent(Event event){ + try { + EventDTO eventDTO = new EventDTO(); + eventDTO.setGroup_id(event.getGroup_id()); + eventDTO.setUser_id(event.getUser_id()); + eventDTO.setEvent_payload(serializeEvent(event)); + eventStore.save(eventDTO); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } + + } } From 2d8d91c206cc5424543e2e1290aab0fae4660774 Mon Sep 17 00:00:00 2001 From: killerber4t Date: Mon, 9 Mar 2020 14:26:06 +0100 Subject: [PATCH 31/31] disable test method --- .../mops/gruppen2/controller/SwaggerAPIControllerExample.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/mops/gruppen2/controller/SwaggerAPIControllerExample.java b/src/main/java/mops/gruppen2/controller/SwaggerAPIControllerExample.java index 5953926..5caa747 100644 --- a/src/main/java/mops/gruppen2/controller/SwaggerAPIControllerExample.java +++ b/src/main/java/mops/gruppen2/controller/SwaggerAPIControllerExample.java @@ -53,7 +53,7 @@ public class SwaggerAPIControllerExample { return "Product saved successfully"; } - @GetMapping("/json") + /*@GetMapping("/json") //just for testing public void json() { AddUserEvent aEvent = new AddUserEvent( 1, @@ -68,5 +68,5 @@ public class SwaggerAPIControllerExample { } catch (JsonProcessingException e) { e.printStackTrace(); } - } + }*/ }