From 64f54ada27a32a6ae86a991504fd41aeec4ff7a7 Mon Sep 17 00:00:00 2001 From: Christoph Date: Fri, 6 Mar 2020 20:03:15 +0100 Subject: [PATCH 01/15] 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 02/15] 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 03/15] 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 04/15] 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 05/15] 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 06/15] 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 07/15] 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 08/15] 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 09/15] 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 10/15] 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 11/15] 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 12/15] 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 13/15] 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 14/15] 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 15/15] 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);