commit 7adb3acc8d2a81fbc5cfeff06f0a7b9f6b246367 Author: Mario Date: Wed Mar 18 22:00:54 2026 +0100 Initialer commit diff --git a/aufgaben-service/.classpath b/aufgaben-service/.classpath new file mode 100644 index 0000000..8630bfa --- /dev/null +++ b/aufgaben-service/.classpath @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aufgaben-service/.project b/aufgaben-service/.project new file mode 100644 index 0000000..7663b72 --- /dev/null +++ b/aufgaben-service/.project @@ -0,0 +1,33 @@ + + + aufgaben-service + + + + org.eclipse.jdt.core.javanature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.buildship.core.gradleprojectnature + + + + org.eclipse.jdt.core.javabuilder + + + + org.eclipse.wst.common.project.facet.core.builder + + + + org.eclipse.wst.validation.validationbuilder + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + + diff --git a/aufgaben-service/.settings/org.eclipse.buildship.core.prefs b/aufgaben-service/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..a7b84d9 --- /dev/null +++ b/aufgaben-service/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,2 @@ +connection.project.dir=.. +eclipse.preferences.version=1 diff --git a/aufgaben-service/.settings/org.eclipse.jdt.core.prefs b/aufgaben-service/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..5c96052 --- /dev/null +++ b/aufgaben-service/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,13 @@ +# +#Sat Apr 01 12:17:22 CEST 2023 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.source=17 +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.debug.sourceFile=generate diff --git a/aufgaben-service/.settings/org.eclipse.wst.common.component b/aufgaben-service/.settings/org.eclipse.wst.common.component new file mode 100644 index 0000000..1f7d773 --- /dev/null +++ b/aufgaben-service/.settings/org.eclipse.wst.common.component @@ -0,0 +1,13 @@ + + + + + + + + + + uses + + + diff --git a/aufgaben-service/.settings/org.eclipse.wst.common.project.facet.core.xml b/aufgaben-service/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 0000000..2b28d58 --- /dev/null +++ b/aufgaben-service/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/aufgaben-service/bin/main/META-INF/hibernate.cfg.xml b/aufgaben-service/bin/main/META-INF/hibernate.cfg.xml new file mode 100644 index 0000000..315bcff --- /dev/null +++ b/aufgaben-service/bin/main/META-INF/hibernate.cfg.xml @@ -0,0 +1,13 @@ + + + + + + org.hibernate.dialect.MySQLDialect + + + validate + + \ No newline at end of file diff --git a/aufgaben-service/bin/main/META-INF/persistence.xml b/aufgaben-service/bin/main/META-INF/persistence.xml new file mode 100644 index 0000000..6872b3c --- /dev/null +++ b/aufgaben-service/bin/main/META-INF/persistence.xml @@ -0,0 +1,18 @@ + + + + + org.hibernate.ejb.HibernatePersistence + java:/Aufgaben + + + + + + \ No newline at end of file diff --git a/aufgaben-service/bin/main/WEB-INF/web.xml b/aufgaben-service/bin/main/WEB-INF/web.xml new file mode 100644 index 0000000..afa4e62 --- /dev/null +++ b/aufgaben-service/bin/main/WEB-INF/web.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/Aufgabe.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/Aufgabe.class new file mode 100644 index 0000000..2db00f3 Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/Aufgabe.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabeDAO.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabeDAO.class new file mode 100644 index 0000000..366ddaf Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabeDAO.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabeEntity.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabeEntity.class new file mode 100644 index 0000000..15ece83 Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabeEntity.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabeResource.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabeResource.class new file mode 100644 index 0000000..a011341 Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabeResource.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabenApplication.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabenApplication.class new file mode 100644 index 0000000..ea94563 Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabenApplication.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabenGruppe.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabenGruppe.class new file mode 100644 index 0000000..c20bd58 Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabenGruppe.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabenGruppeDAO.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabenGruppeDAO.class new file mode 100644 index 0000000..c4c88ef Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabenGruppeDAO.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabenGruppeDisplay.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabenGruppeDisplay.class new file mode 100644 index 0000000..cb2da13 Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabenGruppeDisplay.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabenGruppeEntity.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabenGruppeEntity.class new file mode 100644 index 0000000..66ed23a Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabenGruppeEntity.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabenGruppeList.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabenGruppeList.class new file mode 100644 index 0000000..38a8d22 Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabenGruppeList.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabenGruppeResource.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabenGruppeResource.class new file mode 100644 index 0000000..1973762 Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/AufgabenGruppeResource.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/DefaultFiller.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/DefaultFiller.class new file mode 100644 index 0000000..8b6d3a0 Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/DefaultFiller.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/Favorit.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/Favorit.class new file mode 100644 index 0000000..73ec121 Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/Favorit.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/FavoritDAO.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/FavoritDAO.class new file mode 100644 index 0000000..ca54cab Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/FavoritDAO.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/FavoritEntity.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/FavoritEntity.class new file mode 100644 index 0000000..025a2b5 Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/FavoritEntity.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/FavoritList.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/FavoritList.class new file mode 100644 index 0000000..60dbccf Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/FavoritList.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/FavoritResource.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/FavoritResource.class new file mode 100644 index 0000000..2c63d09 Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/FavoritResource.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/FillerResource.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/FillerResource.class new file mode 100644 index 0000000..52216a4 Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/FillerResource.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/ImageScaler.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/ImageScaler.class new file mode 100644 index 0000000..b3e3a86 Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/ImageScaler.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/Sperre.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/Sperre.class new file mode 100644 index 0000000..6150dbb Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/Sperre.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/SperreDAO.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/SperreDAO.class new file mode 100644 index 0000000..95c7278 Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/SperreDAO.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/SperreEntity.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/SperreEntity.class new file mode 100644 index 0000000..be2b5ba Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/SperreEntity.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/SprerreResource.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/SprerreResource.class new file mode 100644 index 0000000..bf1413f Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/SprerreResource.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/Strafe.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/Strafe.class new file mode 100644 index 0000000..8f1b7e0 Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/Strafe.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/StrafeDAO.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/StrafeDAO.class new file mode 100644 index 0000000..52e010b Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/StrafeDAO.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/StrafeEntity.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/StrafeEntity.class new file mode 100644 index 0000000..1336d0d Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/StrafeEntity.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/StrafeResource.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/StrafeResource.class new file mode 100644 index 0000000..ef0fd31 Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/StrafeResource.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/Toy.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/Toy.class new file mode 100644 index 0000000..b1b1035 Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/Toy.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/ToyDAO.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/ToyDAO.class new file mode 100644 index 0000000..9d42626 Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/ToyDAO.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/ToyEntity.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/ToyEntity.class new file mode 100644 index 0000000..df0384a Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/ToyEntity.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/ToyResource.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/ToyResource.class new file mode 100644 index 0000000..f34a59d Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/ToyResource.class differ diff --git a/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/Werkzeug.class b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/Werkzeug.class new file mode 100644 index 0000000..8ea3ac0 Binary files /dev/null and b/aufgaben-service/bin/main/de/oaa/xxx/aufgaben/Werkzeug.class differ diff --git a/aufgaben-service/bin/main/femaleCB.png b/aufgaben-service/bin/main/femaleCB.png new file mode 100644 index 0000000..def74dc Binary files /dev/null and b/aufgaben-service/bin/main/femaleCB.png differ diff --git a/aufgaben-service/bin/main/index.html b/aufgaben-service/bin/main/index.html new file mode 100644 index 0000000..f8a3eed --- /dev/null +++ b/aufgaben-service/bin/main/index.html @@ -0,0 +1 @@ +

Was machst du hier?

\ No newline at end of file diff --git a/aufgaben-service/bin/main/knebel.png b/aufgaben-service/bin/main/knebel.png new file mode 100644 index 0000000..47c66fd Binary files /dev/null and b/aufgaben-service/bin/main/knebel.png differ diff --git a/aufgaben-service/bin/main/log4j2.xml b/aufgaben-service/bin/main/log4j2.xml new file mode 100644 index 0000000..f2e539a --- /dev/null +++ b/aufgaben-service/bin/main/log4j2.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/aufgaben-service/bin/main/maleCB.png b/aufgaben-service/bin/main/maleCB.png new file mode 100644 index 0000000..13cfd7d Binary files /dev/null and b/aufgaben-service/bin/main/maleCB.png differ diff --git a/aufgaben-service/bin/main/peitsche.png b/aufgaben-service/bin/main/peitsche.png new file mode 100644 index 0000000..29f9950 Binary files /dev/null and b/aufgaben-service/bin/main/peitsche.png differ diff --git a/aufgaben-service/bin/main/plugs.png b/aufgaben-service/bin/main/plugs.png new file mode 100644 index 0000000..0aa9d64 Binary files /dev/null and b/aufgaben-service/bin/main/plugs.png differ diff --git a/aufgaben-service/bin/main/sex.png b/aufgaben-service/bin/main/sex.png new file mode 100644 index 0000000..04273b6 Binary files /dev/null and b/aufgaben-service/bin/main/sex.png differ diff --git a/aufgaben-service/build.gradle b/aufgaben-service/build.gradle new file mode 100644 index 0000000..87dc570 --- /dev/null +++ b/aufgaben-service/build.gradle @@ -0,0 +1,39 @@ +plugins { + id 'java' + id 'war' + id 'eclipse' +} + +repositories { + mavenCentral() +} + +sourceSets { + main { + java { + srcDir 'src/main/java' + } + resources { + srcDir 'src/main/webapp' +// srcDir 'src/main/resources' + } + } +} + +dependencies { + implementation project(':framework') + + compileOnly 'jakarta.platform:jakarta.jakartaee-web-api:9.0.0' + compileOnly 'jakarta.persistence:jakarta.persistence-api:3.1.0' + compileOnly 'jakarta.resource:jakarta.resource-api:2.1.0' + + compileOnly 'org.jboss.ejb3:jboss-ejb3-ext-api:2.3.0.Final' + + compileOnly 'org.apache.logging.log4j:log4j-slf4j-impl:2.20.0' + + testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1' +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/Aufgabe.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/Aufgabe.class new file mode 100644 index 0000000..054b7f2 Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/Aufgabe.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabeDAO.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabeDAO.class new file mode 100644 index 0000000..987f394 Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabeDAO.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabeEntity.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabeEntity.class new file mode 100644 index 0000000..31a5c9f Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabeEntity.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabeResource.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabeResource.class new file mode 100644 index 0000000..fb252c7 Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabeResource.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabenApplication.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabenApplication.class new file mode 100644 index 0000000..755b49a Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabenApplication.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabenGruppe.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabenGruppe.class new file mode 100644 index 0000000..97d774a Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabenGruppe.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabenGruppeDAO.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabenGruppeDAO.class new file mode 100644 index 0000000..d7c7037 Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabenGruppeDAO.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabenGruppeDisplay.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabenGruppeDisplay.class new file mode 100644 index 0000000..7761a0a Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabenGruppeDisplay.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabenGruppeEntity.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabenGruppeEntity.class new file mode 100644 index 0000000..ce8817a Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabenGruppeEntity.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabenGruppeList.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabenGruppeList.class new file mode 100644 index 0000000..748fd91 Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabenGruppeList.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabenGruppeResource.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabenGruppeResource.class new file mode 100644 index 0000000..073af3f Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/AufgabenGruppeResource.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/DefaultFiller.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/DefaultFiller.class new file mode 100644 index 0000000..1291ce3 Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/DefaultFiller.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/Favorit.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/Favorit.class new file mode 100644 index 0000000..7934479 Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/Favorit.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/FavoritDAO.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/FavoritDAO.class new file mode 100644 index 0000000..385e8ab Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/FavoritDAO.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/FavoritEntity.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/FavoritEntity.class new file mode 100644 index 0000000..b13334f Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/FavoritEntity.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/FavoritList.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/FavoritList.class new file mode 100644 index 0000000..d504655 Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/FavoritList.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/FavoritResource.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/FavoritResource.class new file mode 100644 index 0000000..59af167 Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/FavoritResource.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/FillerResource.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/FillerResource.class new file mode 100644 index 0000000..26c2c2e Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/FillerResource.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/ImageScaler.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/ImageScaler.class new file mode 100644 index 0000000..e7ebd51 Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/ImageScaler.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/Sperre.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/Sperre.class new file mode 100644 index 0000000..0e82a60 Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/Sperre.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/SperreDAO.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/SperreDAO.class new file mode 100644 index 0000000..3f8f374 Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/SperreDAO.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/SperreEntity.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/SperreEntity.class new file mode 100644 index 0000000..d3945b6 Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/SperreEntity.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/SprerreResource.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/SprerreResource.class new file mode 100644 index 0000000..b7287a5 Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/SprerreResource.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/Strafe.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/Strafe.class new file mode 100644 index 0000000..77128e8 Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/Strafe.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/StrafeDAO.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/StrafeDAO.class new file mode 100644 index 0000000..f4422d8 Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/StrafeDAO.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/StrafeEntity.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/StrafeEntity.class new file mode 100644 index 0000000..5bcce42 Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/StrafeEntity.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/StrafeResource.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/StrafeResource.class new file mode 100644 index 0000000..4ab17fe Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/StrafeResource.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/Toy.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/Toy.class new file mode 100644 index 0000000..00c5b8d Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/Toy.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/ToyDAO.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/ToyDAO.class new file mode 100644 index 0000000..d2cec91 Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/ToyDAO.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/ToyEntity.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/ToyEntity.class new file mode 100644 index 0000000..fb04b90 Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/ToyEntity.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/ToyResource.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/ToyResource.class new file mode 100644 index 0000000..c5186be Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/ToyResource.class differ diff --git a/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/Werkzeug.class b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/Werkzeug.class new file mode 100644 index 0000000..1a5435a Binary files /dev/null and b/aufgaben-service/build/classes/java/main/de/oaa/xxx/aufgaben/Werkzeug.class differ diff --git a/aufgaben-service/build/libs/aufgaben-service.war b/aufgaben-service/build/libs/aufgaben-service.war new file mode 100644 index 0000000..33a70e9 Binary files /dev/null and b/aufgaben-service/build/libs/aufgaben-service.war differ diff --git a/aufgaben-service/build/resources/main/META-INF/hibernate.cfg.xml b/aufgaben-service/build/resources/main/META-INF/hibernate.cfg.xml new file mode 100644 index 0000000..315bcff --- /dev/null +++ b/aufgaben-service/build/resources/main/META-INF/hibernate.cfg.xml @@ -0,0 +1,13 @@ + + + + + + org.hibernate.dialect.MySQLDialect + + + validate + + \ No newline at end of file diff --git a/aufgaben-service/build/resources/main/META-INF/persistence.xml b/aufgaben-service/build/resources/main/META-INF/persistence.xml new file mode 100644 index 0000000..6872b3c --- /dev/null +++ b/aufgaben-service/build/resources/main/META-INF/persistence.xml @@ -0,0 +1,18 @@ + + + + + org.hibernate.ejb.HibernatePersistence + java:/Aufgaben + + + + + + \ No newline at end of file diff --git a/aufgaben-service/build/resources/main/WEB-INF/web.xml b/aufgaben-service/build/resources/main/WEB-INF/web.xml new file mode 100644 index 0000000..afa4e62 --- /dev/null +++ b/aufgaben-service/build/resources/main/WEB-INF/web.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/aufgaben-service/build/resources/main/femaleCB.png b/aufgaben-service/build/resources/main/femaleCB.png new file mode 100644 index 0000000..def74dc Binary files /dev/null and b/aufgaben-service/build/resources/main/femaleCB.png differ diff --git a/aufgaben-service/build/resources/main/index.html b/aufgaben-service/build/resources/main/index.html new file mode 100644 index 0000000..f8a3eed --- /dev/null +++ b/aufgaben-service/build/resources/main/index.html @@ -0,0 +1 @@ +

Was machst du hier?

\ No newline at end of file diff --git a/aufgaben-service/build/resources/main/knebel.png b/aufgaben-service/build/resources/main/knebel.png new file mode 100644 index 0000000..47c66fd Binary files /dev/null and b/aufgaben-service/build/resources/main/knebel.png differ diff --git a/aufgaben-service/build/resources/main/log4j2.xml b/aufgaben-service/build/resources/main/log4j2.xml new file mode 100644 index 0000000..f2e539a --- /dev/null +++ b/aufgaben-service/build/resources/main/log4j2.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/aufgaben-service/build/resources/main/maleCB.png b/aufgaben-service/build/resources/main/maleCB.png new file mode 100644 index 0000000..13cfd7d Binary files /dev/null and b/aufgaben-service/build/resources/main/maleCB.png differ diff --git a/aufgaben-service/build/resources/main/peitsche.png b/aufgaben-service/build/resources/main/peitsche.png new file mode 100644 index 0000000..29f9950 Binary files /dev/null and b/aufgaben-service/build/resources/main/peitsche.png differ diff --git a/aufgaben-service/build/resources/main/plugs.png b/aufgaben-service/build/resources/main/plugs.png new file mode 100644 index 0000000..0aa9d64 Binary files /dev/null and b/aufgaben-service/build/resources/main/plugs.png differ diff --git a/aufgaben-service/build/resources/main/sex.png b/aufgaben-service/build/resources/main/sex.png new file mode 100644 index 0000000..04273b6 Binary files /dev/null and b/aufgaben-service/build/resources/main/sex.png differ diff --git a/aufgaben-service/build/tmp/compileJava/previous-compilation-data.bin b/aufgaben-service/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000..990025b Binary files /dev/null and b/aufgaben-service/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/aufgaben-service/build/tmp/war/MANIFEST.MF b/aufgaben-service/build/tmp/war/MANIFEST.MF new file mode 100644 index 0000000..58630c0 --- /dev/null +++ b/aufgaben-service/build/tmp/war/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/Aufgabe.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/Aufgabe.java new file mode 100644 index 0000000..39682fa --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/Aufgabe.java @@ -0,0 +1,98 @@ +package de.oaa.xxx.aufgaben; + +import java.util.List; +import java.util.UUID; + +public class Aufgabe { + + private UUID aufgabeId; + private String kurzText; + private String text; + private Integer level; + private Integer sekundenVon; + private Integer sekundenBis; + private UUID gruppeId; + private List benoetigtAktiv; + private List benoetigtPassiv; + private List benoetigteToys; + + public UUID getAufgabeId() { + return aufgabeId; + } + + public void setAufgabeId(UUID aufgabeId) { + this.aufgabeId = aufgabeId; + } + + public String getKurzText() { + return kurzText; + } + + public void setKurzText(String kurzText) { + this.kurzText = kurzText; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public Integer getLevel() { + return level; + } + + public void setLevel(Integer level) { + this.level = level; + } + + public Integer getSekundenVon() { + return sekundenVon; + } + + public void setSekundenVon(Integer sekundenVon) { + this.sekundenVon = sekundenVon; + } + + public Integer getSekundenBis() { + return sekundenBis; + } + + public void setSekundenBis(Integer sekundenBis) { + this.sekundenBis = sekundenBis; + } + + public List getBenoetigtAktiv() { + return benoetigtAktiv; + } + + public void setBenoetigtAktiv(List benoetigtAktiv) { + this.benoetigtAktiv = benoetigtAktiv; + } + + public List getBenoetigtPassiv() { + return benoetigtPassiv; + } + + public void setBenoetigtPassiv(List benoetigtPassiv) { + this.benoetigtPassiv = benoetigtPassiv; + } + + public List getBenoetigteToys() { + return benoetigteToys; + } + + public void setBenoetigteToys(List benoetigteToys) { + this.benoetigteToys = benoetigteToys; + } + + public UUID getGruppeId() { + return gruppeId; + } + + public void setGruppeId(UUID gruppeId) { + this.gruppeId = gruppeId; + } +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabeDAO.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabeDAO.java new file mode 100644 index 0000000..7baf162 --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabeDAO.java @@ -0,0 +1,11 @@ +package de.oaa.xxx.aufgaben; + +import de.oaa.xxx.framework.AbstractDAO; +import jakarta.persistence.EntityManager; + +public class AufgabeDAO extends AbstractDAO { + + public AufgabeDAO(EntityManager entityManager) { + super(AufgabeEntity.class, entityManager); + } +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabeEntity.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabeEntity.java new file mode 100644 index 0000000..ee2c2f0 --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabeEntity.java @@ -0,0 +1,161 @@ +package de.oaa.xxx.aufgaben; + +import java.util.List; +import java.util.UUID; + +import de.oaa.xxx.framework.XXXEntity; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.ElementCollection; +import jakarta.persistence.Entity; +import jakarta.persistence.Enumerated; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.JoinTable; +import jakarta.persistence.ManyToMany; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; + +@Entity +@Table(name = "aufgabe") +public class AufgabeEntity implements XXXEntity { + + @Id + @Column + private UUID aufgabeId; + @Column + private String kurzText; + @Column + private String text; + @Column + private Integer level; + @Column + private Integer sekundenVon; + @Column + private Integer sekundenBis; + @ManyToOne + @JoinColumn(name = "gruppeId") + private AufgabenGruppeEntity aufgabenGruppe; + @Column + @Enumerated + @ElementCollection(targetClass = Werkzeug.class) + private List benoetigtAktiv; + @Column + @Enumerated + @ElementCollection(targetClass = Werkzeug.class) + private List benoetigtPassiv; + @ManyToMany(cascade = CascadeType.DETACH) + @JoinTable(name = "aufgabeToy", joinColumns = { @JoinColumn(name = "aufgabeId") }, inverseJoinColumns = { + @JoinColumn(name = "toyId") }) + private List benoetigteToys; + + public UUID getAufgabeId() { + return aufgabeId; + } + + public void setAufgabeId(UUID aufgabeId) { + this.aufgabeId = aufgabeId; + } + + public String getKurzText() { + return kurzText; + } + + public void setKurzText(String kurzText) { + this.kurzText = kurzText; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public Integer getLevel() { + return level; + } + + public void setLevel(Integer level) { + this.level = level; + } + + public Integer getSekundenVon() { + return sekundenVon; + } + + public void setSekundenVon(Integer sekundenVon) { + this.sekundenVon = sekundenVon; + } + + public Integer getSekundenBis() { + return sekundenBis; + } + + public void setSekundenBis(Integer sekundenBis) { + this.sekundenBis = sekundenBis; + } + + public AufgabenGruppeEntity getAufgabenGruppe() { + return aufgabenGruppe; + } + + public void setAufgabenGruppe(AufgabenGruppeEntity aufgabenGruppe) { + this.aufgabenGruppe = aufgabenGruppe; + } + + public List getBenoetigtAktiv() { + return benoetigtAktiv; + } + + public void setBenoetigtAktiv(List benoetigtAktiv) { + this.benoetigtAktiv = benoetigtAktiv; + } + + public List getBenoetigtPassiv() { + return benoetigtPassiv; + } + + public void setBenoetigtPassiv(List benoetigtPassiv) { + this.benoetigtPassiv = benoetigtPassiv; + } + + public List getBenoetigteToys() { + return benoetigteToys; + } + + public void setBenoetigteToys(List benoetigteToys) { + this.benoetigteToys = benoetigteToys; + } + + public Aufgabe toAufgabe() { + Aufgabe aufgabe = new Aufgabe(); + aufgabe.setAufgabeId(aufgabeId); + aufgabe.setBenoetigtAktiv(benoetigtAktiv.stream().map(obj -> obj).toList()); + aufgabe.setBenoetigteToys(benoetigteToys.stream().map(obj -> obj.toToy()).toList()); + aufgabe.setBenoetigtPassiv(benoetigtPassiv.stream().map(obj -> obj).toList()); + aufgabe.setGruppeId(aufgabenGruppe.getGruppenId()); + aufgabe.setKurzText(kurzText); + aufgabe.setLevel(level); + aufgabe.setSekundenBis(sekundenBis); + aufgabe.setSekundenVon(sekundenVon); + aufgabe.setText(text); + return aufgabe; + } + + public static AufgabeEntity create(Aufgabe aufgabe, AufgabenGruppeEntity aufgabenGruppeEntity) { + AufgabeEntity entity = new AufgabeEntity(); + entity.setAufgabeId(UUID.randomUUID()); + entity.setAufgabenGruppe(aufgabenGruppeEntity); + entity.setBenoetigtAktiv(aufgabe.getBenoetigtAktiv()); + entity.setBenoetigteToys(aufgabe.getBenoetigteToys().stream().map(toy -> ToyEntity.create(toy, aufgabenGruppeEntity)).toList()); + entity.setBenoetigtPassiv(aufgabe.getBenoetigtPassiv()); + entity.setKurzText(aufgabe.getKurzText()); + entity.setLevel(aufgabe.getLevel()); + entity.setSekundenBis(aufgabe.getSekundenBis()); + entity.setSekundenVon(aufgabe.getSekundenVon()); + entity.setText(aufgabe.getText()); + return entity; + } +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabeResource.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabeResource.java new file mode 100644 index 0000000..ed9abfd --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabeResource.java @@ -0,0 +1,108 @@ +package de.oaa.xxx.aufgaben; + +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import de.oaa.xxx.framework.request.RequestChecker; +import jakarta.annotation.Resource; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.transaction.SystemException; +import jakarta.transaction.Transactional; +import jakarta.transaction.UserTransaction; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.Status; +import jakarta.ws.rs.core.UriInfo; + +@Transactional +@ApplicationScoped +@Path("aufgabe") +public class AufgabeResource { + + private Logger LOGGER = LoggerFactory.getLogger(getClass()); + + @PersistenceContext(name = "aufgaben") + private EntityManager entityManager; + @Resource + private UserTransaction transaction; + + @Path("{aufgabeId}") + @GET + @Produces(MediaType.APPLICATION_JSON) + public Response get(@PathParam("aufgabeId") UUID aufgabeId, @Context HttpServletRequest req) throws IllegalStateException, SecurityException, SystemException { + try { + RequestChecker.checkRequest(req); + transaction.begin(); + AufgabeEntity entity = new AufgabeDAO(entityManager).findById(aufgabeId); + if (entity != null) { + Aufgabe aufgabe = entity.toAufgabe(); + transaction.commit(); + return Response.ok(aufgabe).build(); + } else { + transaction.rollback(); + return Response.noContent().build(); + } + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } + + @POST + @Consumes(MediaType.APPLICATION_JSON) + public Response create(Aufgabe aufgabe, @Context UriInfo uriInfo, @Context HttpServletRequest req) throws IllegalStateException, SecurityException, SystemException { + try { + RequestChecker.checkRequest(req); + if (aufgabe.getKurzText() == null || aufgabe.getText() == null || aufgabe.getLevel() == null || aufgabe.getGruppeId() == null) { + return Response.status(Status.BAD_REQUEST).build(); + } + transaction.begin(); + AufgabenGruppeEntity gruppeEntity = new AufgabenGruppeDAO(entityManager).findById(aufgabe.getGruppeId()); + if (gruppeEntity == null || gruppeEntity.getAufgaben().size() > 50) { + transaction.rollback(); + return Response.status(Status.BAD_REQUEST).build(); + } + AufgabeEntity entity = AufgabeEntity.create(aufgabe, gruppeEntity); + new AufgabeDAO(entityManager).persist(entity); + transaction.commit(); + return Response.created(uriInfo.getAbsolutePathBuilder().path(entity.getAufgabeId().toString()).build()) + .build(); + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } + + @DELETE + @Consumes(MediaType.APPLICATION_JSON) + public Response delete(Aufgabe aufgabe, @Context HttpServletRequest req) throws IllegalStateException, SecurityException, SystemException { + try { + RequestChecker.checkRequest(req); + transaction.begin(); + AufgabeDAO dao = new AufgabeDAO(entityManager); + AufgabeEntity entity = dao.findById(aufgabe.getAufgabeId()); + dao.remove(entity); + transaction.commit(); + return Response.accepted().build(); + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabenApplication.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabenApplication.java new file mode 100644 index 0000000..ce6fe01 --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabenApplication.java @@ -0,0 +1,9 @@ +package de.oaa.xxx.aufgaben; + +import jakarta.ws.rs.ApplicationPath; +import jakarta.ws.rs.core.Application; + +@ApplicationPath("/") +public class AufgabenApplication extends Application { + +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabenGruppe.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabenGruppe.java new file mode 100644 index 0000000..6ce2a80 --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabenGruppe.java @@ -0,0 +1,86 @@ +package de.oaa.xxx.aufgaben; + +import java.util.List; +import java.util.UUID; + +public class AufgabenGruppe { + + private UUID gruppenId; + private String name; + private String beschreibung; + private String von; + private UUID userId; + private boolean privateGruppe; + private List toys; + private List aufgaben; + private List strafen; + private List sperren; + private String bild; + public UUID getGruppenId() { + return gruppenId; + } + public void setGruppenId(UUID gruppenId) { + this.gruppenId = gruppenId; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getBeschreibung() { + return beschreibung; + } + public void setBeschreibung(String beschreibung) { + this.beschreibung = beschreibung; + } + public UUID getUserId() { + return userId; + } + public void setUserId(UUID userId) { + this.userId = userId; + } + public boolean isPrivateGruppe() { + return privateGruppe; + } + public void setPrivateGruppe(boolean privateGruppe) { + this.privateGruppe = privateGruppe; + } + public List getToys() { + return toys; + } + public void setToys(List toys) { + this.toys = toys; + } + public List getAufgaben() { + return aufgaben; + } + public void setAufgaben(List aufgaben) { + this.aufgaben = aufgaben; + } + public List getStrafen() { + return strafen; + } + public void setStrafen(List strafen) { + this.strafen = strafen; + } + public List getSperren() { + return sperren; + } + public void setSperren(List sperren) { + this.sperren = sperren; + } + public void setBild(String bild) { + this.bild = bild; + } + public String getBild() { + return bild; + } + public String getVon() { + return von; + } + public void setVon(String von) { + this.von = von; + } + +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabenGruppeDAO.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabenGruppeDAO.java new file mode 100644 index 0000000..cad4d29 --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabenGruppeDAO.java @@ -0,0 +1,50 @@ +package de.oaa.xxx.aufgaben; + +import java.util.Collections; +import java.util.List; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import de.oaa.xxx.framework.AbstractDAO; +import jakarta.persistence.EntityManager; +import jakarta.persistence.TypedQuery; + +public class AufgabenGruppeDAO extends AbstractDAO { + + private Logger LOGGER = LoggerFactory.getLogger(getClass()); + + public AufgabenGruppeDAO(EntityManager manager) { + super(AufgabenGruppeEntity.class, manager); + } + + public List list(UUID userId, String search) { + try { + TypedQuery query = getEntityManager().createQuery( + "select age from AufgabenGruppeEntity age where (age.privateGruppe = false" + (userId == null ? ")" : " or age.userId = :userId)") + (search == null ? "" : " and age.name like :search"), AufgabenGruppeEntity.class); + if (userId != null) { + query.setParameter("userId", userId); + } + if (search != null) { + query.setParameter("search", "%" + search + "%"); + } + query.setMaxResults(50); + return query.getResultList(); + } catch (Exception e) { + LOGGER.error(e.getMessage(), e); + return Collections.emptyList(); + } + } + + public List listOwn(UUID userId) { + try { + TypedQuery query = getEntityManager().createQuery("select age from AufgabenGruppeEntity age where age.userId = :userId", AufgabenGruppeEntity.class); + query.setParameter("userId", userId); + return query.getResultList(); + } catch (Exception e) { + LOGGER.error(e.getMessage(), e); + return Collections.emptyList(); + } + } +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabenGruppeDisplay.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabenGruppeDisplay.java new file mode 100644 index 0000000..e74a05f --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabenGruppeDisplay.java @@ -0,0 +1,69 @@ +package de.oaa.xxx.aufgaben; + +import java.util.UUID; + +public class AufgabenGruppeDisplay { + + private UUID gruppenId; + private String name; + private String beschreibung; + private UUID userId; + private boolean privateGruppe; + private String bild; + private String von; + + public UUID getGruppenId() { + return gruppenId; + } + + public void setGruppenId(UUID gruppenId) { + this.gruppenId = gruppenId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getBeschreibung() { + return beschreibung; + } + + public void setBeschreibung(String beschreibung) { + this.beschreibung = beschreibung; + } + + public UUID getUserId() { + return userId; + } + + public void setUserId(UUID userId) { + this.userId = userId; + } + + public boolean isPrivateGruppe() { + return privateGruppe; + } + + public void setPrivateGruppe(boolean privateGruppe) { + this.privateGruppe = privateGruppe; + } + + public void setBild(String bild) { + this.bild = bild; + } + public String getBild() { + return bild; + } + + public String getVon() { + return von; + } + + public void setVon(String von) { + this.von = von; + } +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabenGruppeEntity.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabenGruppeEntity.java new file mode 100644 index 0000000..4f36121 --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabenGruppeEntity.java @@ -0,0 +1,173 @@ +package de.oaa.xxx.aufgaben; + +import java.util.Base64; +import java.util.List; +import java.util.UUID; + +import de.oaa.xxx.framework.XXXEntity; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Lob; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; + +@Entity +@Table(name="aufgabenGruppe") +public class AufgabenGruppeEntity implements XXXEntity { + + @Id + @Column + private UUID gruppenId; + @Column + private String name; + @Column + private String beschreibung; + @Column + private UUID userId; + @Column + private boolean privateGruppe; + @Lob + @Column(columnDefinition="BLOB") + private byte[] bild; + @Column + private String von; + @Column + private Integer relevanz; + @OneToMany(mappedBy = "aufgabenGruppe") + private List toys; + @OneToMany(mappedBy = "aufgabenGruppe") + private List aufgaben; + @OneToMany(mappedBy = "aufgabenGruppe") + private List strafen; + @OneToMany(mappedBy = "aufgabenGruppe") + private List sperren; + + public UUID getGruppenId() { + return gruppenId; + } + + public void setGruppenId(UUID gruppenId) { + this.gruppenId = gruppenId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public UUID getUserId() { + return userId; + } + + public void setUserId(UUID userId) { + this.userId = userId; + } + + public boolean isPrivateGruppe() { + return privateGruppe; + } + + public void setPrivateGruppe(boolean privateGruppe) { + this.privateGruppe = privateGruppe; + } + + public List getToys() { + return toys; + } + + public void setToys(List toys) { + this.toys = toys; + } + + public List getAufgaben() { + return aufgaben; + } + + public void setAufgaben(List aufgaben) { + this.aufgaben = aufgaben; + } + + public List getStrafen() { + return strafen; + } + + public void setStrafen(List strafen) { + this.strafen = strafen; + } + + public List getSperren() { + return sperren; + } + + public void setSperren(List sperren) { + this.sperren = sperren; + } + + public String getBeschreibung() { + return beschreibung; + } + + public void setBeschreibung(String beschreibung) { + this.beschreibung = beschreibung; + } + + public AufgabenGruppe toAufgabenGruppe() { + AufgabenGruppe gruppe = new AufgabenGruppe(); + gruppe.setGruppenId(gruppenId); + gruppe.setUserId(userId); + gruppe.setName(name); + gruppe.setBeschreibung(beschreibung); + gruppe.setPrivateGruppe(privateGruppe); + gruppe.setBild(Base64.getEncoder().encodeToString(bild)); + gruppe.setVon(von); + gruppe.setToys(toys.stream().map(toy -> toy.toToy()).toList()); + gruppe.setAufgaben(aufgaben.stream().map(aufgabe -> aufgabe.toAufgabe()).toList()); + gruppe.setStrafen(strafen.stream().map(strafe -> strafe.toStrafe()).toList()); + gruppe.setSperren(sperren.stream().map(sperre -> sperre.toSperre()).toList()); + return gruppe; + } + + public static AufgabenGruppeEntity create(AufgabenGruppe gruppe) { + AufgabenGruppeEntity entity = new AufgabenGruppeEntity(); + entity.setGruppenId(UUID.randomUUID()); + entity.setName(gruppe.getName()); + entity.setBeschreibung(gruppe.getBeschreibung()); + entity.setUserId(gruppe.getUserId()); + entity.setPrivateGruppe(gruppe.isPrivateGruppe()); + entity.setBild(Base64.getDecoder().decode(gruppe.getBild())); + entity.setVon(gruppe.getVon()); + return entity; + } + + public AufgabenGruppeDisplay toAufgabenGruppeDisplay() { + AufgabenGruppeDisplay gruppe = new AufgabenGruppeDisplay(); + gruppe.setGruppenId(gruppenId); + gruppe.setUserId(userId); + gruppe.setName(name); + gruppe.setBeschreibung(beschreibung); + gruppe.setPrivateGruppe(privateGruppe); + gruppe.setBild(Base64.getEncoder().encodeToString(bild)); + gruppe.setVon(von); + return gruppe; + } + + public byte[] getBild() { + return bild; + } + + public void setBild(byte[] bild) { + this.bild = bild; + } + + public String getVon() { + return von; + } + + public void setVon(String von) { + this.von = von; + } +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabenGruppeList.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabenGruppeList.java new file mode 100644 index 0000000..a9458b1 --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabenGruppeList.java @@ -0,0 +1,16 @@ +package de.oaa.xxx.aufgaben; + +import java.util.List; + +public class AufgabenGruppeList { + + private List gruppen; + + public List getGruppen() { + return gruppen; + } + + public void setGruppen(List gruppen) { + this.gruppen = gruppen; + } +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabenGruppeResource.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabenGruppeResource.java new file mode 100644 index 0000000..efc9ae5 --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/AufgabenGruppeResource.java @@ -0,0 +1,145 @@ +package de.oaa.xxx.aufgaben; + +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import de.oaa.xxx.framework.request.RequestChecker; +import jakarta.annotation.Resource; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.transaction.SystemException; +import jakarta.transaction.UserTransaction; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.Status; +import jakarta.ws.rs.core.UriInfo; + +@Path("gruppe") +@ApplicationScoped +public class AufgabenGruppeResource { + + private Logger LOGGER = LoggerFactory.getLogger(getClass()); + + @PersistenceContext(name = "aufgaben") + private EntityManager entityManager; + @Resource + private UserTransaction transaction; + + @Path("all") + @GET + @Produces(MediaType.APPLICATION_JSON) + public Response getAll(@QueryParam("search") String search, @Context HttpServletRequest req) throws IllegalStateException, SecurityException, SystemException { + try { + UUID userId = RequestChecker.checkRequest(req).getUserId(); + transaction.begin(); + AufgabenGruppeList list = new AufgabenGruppeList(); + list.setGruppen(new AufgabenGruppeDAO(entityManager).list(userId, search).stream().map(entity -> entity.toAufgabenGruppeDisplay()).toList()); + transaction.commit(); + return Response.ok(list).build(); + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } + + @Path("own") + @GET + @Produces(MediaType.APPLICATION_JSON) + public Response getOwn(@QueryParam("userId") UUID userId, @Context HttpServletRequest req) throws IllegalStateException, SecurityException, SystemException { + try { + RequestChecker.checkRequest(req); + if (userId != null) { + transaction.begin(); + AufgabenGruppeList list = new AufgabenGruppeList(); + list.setGruppen(new AufgabenGruppeDAO(entityManager).listOwn(userId).stream() + .map(entity -> entity.toAufgabenGruppeDisplay()).toList()); + transaction.commit(); + return Response.ok(list).build(); + } else { + return Response.status(Status.BAD_REQUEST).build(); + } + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } + + @Path("{gruppeId}") + @GET + @Produces(MediaType.APPLICATION_JSON) + public Response get(@PathParam("gruppeId") UUID gruppeId, @Context HttpServletRequest req) throws IllegalStateException, SecurityException, SystemException { + try { + RequestChecker.checkRequest(req); + transaction.begin(); + AufgabenGruppeEntity entity = new AufgabenGruppeDAO(entityManager).findById(gruppeId); + if (entity != null) { + AufgabenGruppe aufgabenGruppe = entity.toAufgabenGruppe(); + transaction.commit(); + return Response.ok(aufgabenGruppe).build(); + } else { + transaction.commit(); + return Response.noContent().build(); + } + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } + + @POST + @Consumes(MediaType.APPLICATION_JSON) + public Response post(AufgabenGruppe gruppe, @Context UriInfo uriInfo, @Context HttpServletRequest req) throws IllegalStateException, SecurityException, SystemException { + try { + RequestChecker.checkRequest(req); + transaction.begin(); + AufgabenGruppeEntity entity = AufgabenGruppeEntity.create(gruppe); + new AufgabenGruppeDAO(entityManager).persist(entity); + transaction.commit(); + return Response.created(uriInfo.getAbsolutePathBuilder().path(entity.getGruppenId().toString()).build()) + .build(); + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } + + @DELETE + @Consumes(MediaType.APPLICATION_JSON) + public Response delete(AufgabenGruppe gruppe, @Context HttpServletRequest req) throws IllegalStateException, SecurityException, SystemException { + try { + RequestChecker.checkRequest(req); + transaction.begin(); + AufgabenGruppeDAO dao = new AufgabenGruppeDAO(entityManager); + AufgabenGruppeEntity entity = dao.findById(gruppe.getGruppenId()); + dao.remove(entity); + transaction.commit(); + return Response.accepted().build(); + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } + + @GET + public Response orderRelevanz() { + return Response.notModified().build(); + } +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/DefaultFiller.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/DefaultFiller.java new file mode 100644 index 0000000..2bb8254 --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/DefaultFiller.java @@ -0,0 +1,463 @@ +package de.oaa.xxx.aufgaben; + +import static de.oaa.xxx.aufgaben.Werkzeug.ANUS; +import static de.oaa.xxx.aufgaben.Werkzeug.MUND; +import static de.oaa.xxx.aufgaben.Werkzeug.PENIS; +import static de.oaa.xxx.aufgaben.Werkzeug.UMSCHNALLDILDO; +import static de.oaa.xxx.aufgaben.Werkzeug.VAGINA; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.UUID; + +import jakarta.persistence.EntityManager; + +public class DefaultFiller { + + + private AufgabeDAO aufgabeDAO; + private AufgabenGruppeDAO gruppeDao; + private SperreDAO sperreDao; + private StrafeDAO strafeDao; + private ToyDAO toyDao; + + DefaultFiller(EntityManager entityManager) { + this.aufgabeDAO = new AufgabeDAO(entityManager); + this.gruppeDao = new AufgabenGruppeDAO(entityManager); + this.sperreDao = new SperreDAO(entityManager); + this.strafeDao = new StrafeDAO(entityManager); + this.toyDao = new ToyDAO(entityManager); + } + + void chastityFemale() { + AufgabenGruppeEntity keuschWiebl = createAufgGruppe("Keuschhaltung weiblich", "Enthält verschiedene Aufgaben für Keuschhaltung von weiblichen Spielpartnern", getClass().getClassLoader().getResourceAsStream("femaleCB.png")); + ToyEntity kg = createToy("KG weiblich", "Ein Voll-Keuschheitsgürtel für die Frau", keuschWiebl); + ToyEntity kgVaginal = createToy("KG weiblich, Vaginaldildo", "Ein Voll-Keuschheitsgürtel für die Frau inkl. eines Vaginaldildos", keuschWiebl); + ToyEntity kgAnal = createToy("KG weiblich, Analdildo", "Ein Voll-Keuschheitsgürtel für die Frau inkl. eines Analdildos", keuschWiebl); + ToyEntity kgDouble = createToy("KG weiblich, Vaginal- u. Analdildo", "Ein Voll-Keuschheitsgürtel für die Frau inkl. eines Vaginal- und Analdildos", keuschWiebl); + + createSperre("Voll-KG", "{PASSIV} trägt fortan einen Voll-KG, {AKTIV} ist der Keyholder", "{AKTIV}, es ist ab der Zeit {PASSIV} von ihrem KG zu befreien", 10, 30, Arrays.asList(kg), Arrays.asList(VAGINA), keuschWiebl); + createSperre("Voll-KG + Vaginaldildo", "{PASSIV} trägt fortan einen Voll-KG mit Vaginaldildo, {AKTIV} ist der Keyholder", "{AKTIV}, es ist ab der Zeit {PASSIV} von ihrem KG zu befreien", 10, 30, Arrays.asList(kgVaginal), Arrays.asList(VAGINA), keuschWiebl); + createSperre("Voll-KG + Analdildo", "{PASSIV} trägt fortan einen Voll-KG mit Analdildo, {AKTIV} ist der Keyholder", "{AKTIV}, es ist ab der Zeit {PASSIV} von ihrem KG zu befreien", 10, 30, Arrays.asList(kgAnal), Arrays.asList(VAGINA, ANUS), keuschWiebl); + createSperre("Voll-KG + Doubleplugged", "{PASSIV} trägt fortan einen Voll-KG mit Vaginal- und Analdildo, {AKTIV} ist der Keyholder", "{AKTIV}, es ist ab der Zeit {PASSIV} von ihrem KG zu befreien", 10, 30, Arrays.asList(kgDouble), Arrays.asList(VAGINA, ANUS), keuschWiebl); + } + + void chastityMale() { + AufgabenGruppeEntity keuschMaennl = createAufgGruppe("Keuschhaltung männlich", "Enthält verschiedene Aufgaben für Keuschhaltung von männlichen Spielpartnern", getClass().getClassLoader().getResourceAsStream("maleCB.png")); + ToyEntity kaefig = createToy("Peniskäfig", "Ein gewöhnlicher Peniskäfig", keuschMaennl); + ToyEntity kgMaennl = createToy("KG männlich", "Ein Voll-Keuschheitsgürtel für den Mann", keuschMaennl); + ToyEntity knMaennlAnal = createToy("KG männlich, Analdildo", "Ein Voll-Keuschheitsgürtel für den Mann inkl. eines Analdildos oder -plugs", keuschMaennl); + + createSperre("Peniskäfig", "{PASSIV} trägt fortan einen Peniskäfig, {AKTIV} ist der Keyholder", "{AKTIV}, es ist ab der Zeit {PASSIV} von seinem Peniskäfig zu befreien", 10, 30, Arrays.asList(kaefig), Arrays.asList(PENIS), keuschMaennl); + createSperre("Voll-KG", "{PASSIV} trägt fortan einen Voll-KG, {AKTIV} ist der Keyholder", "{AKTIV}, es ist ab der Zeit {PASSIV} von seinem KG zu befreien", 10, 30, Arrays.asList(kgMaennl), Arrays.asList(PENIS), keuschMaennl); + createSperre("Voll-KG + Analdildo", "{PASSIV} trägt fortan einen Voll-KG mit Analdildo, {AKTIV} ist der Keyholder", "{AKTIV}, es ist ab der Zeit {PASSIV} von seinem KG zu befreien", 10, 30, Arrays.asList(knMaennlAnal), Arrays.asList(PENIS, ANUS), keuschMaennl); + } + + void plugs() { + AufgabenGruppeEntity gruppe = createAufgGruppe("Plugs", "Enthät verschiedene Aufgaben für das Tragen von Buttplugs über einen gewissen Zeitraum.", getClass().getClassLoader().getResourceAsStream("plugs.png")); + ToyEntity plugKlein = createToy("Plug klein", "Ein kleiner Buttplug", gruppe); + ToyEntity plugMittel = createToy("Plug mittel", "Ein mittelgroßer Buttplug", gruppe); + ToyEntity plugGross = createToy("Plug groß", "Ein großer Buttplug", gruppe); + ToyEntity plugElektro = createToy("Elektro-Plug", "Ein Elektropplug, der Stromstöße verpasst", gruppe); + + createSperre("Plug klein", "{AKTIV} führt {PASSIV} einen kleinen Buttplug in anal ein, dieser ist bis auf weiteres zu tragen.", "{AKTIV}, es ist Zeit {PASSIV} von seinem Plug zu befreien", 10, 30, Arrays.asList(plugKlein), Arrays.asList(ANUS), gruppe); + createSperre("Plug mittel", "{AKTIV} führt {PASSIV} einen mittelgroßen Buttplug anal ein, dieser ist bis auf weiteres zu tragen.", "{AKTIV}, es ist Zeit {PASSIV} von seinem Plug zu befreien", 10, 30, Arrays.asList(plugMittel), Arrays.asList(ANUS), gruppe); + createSperre("Plug groß", "{AKTIV} führt {PASSIV} einen gr0ßen Buttplug anal ein, dieser ist bis auf weiteres zu tragen.", "{AKTIV}, es ist Zeit {PASSIV} von seinem Plug zu befreien", 10, 30, Arrays.asList(plugGross), Arrays.asList(ANUS), gruppe); + createSperre("Elektro-Plug", "{AKTIV} führt {PASSIV} einen Elekto-Plug anal ein, dieser ist bis auf weiteres zu tragen. {AKTIV} darf {PASSIV} !leichte Stromstöße verpassen", "{AKTIV}, es ist Zeit {PASSIV} von seinem Plug zu befreien", 10, 30, Arrays.asList(plugElektro), Arrays.asList(ANUS), gruppe); + createSperre("Elektro-Plug", "{AKTIV} führt {PASSIV} einen Elekto-Plug vaginal ein, dieser ist bis auf weiteres zu tragen. {AKTIV} darf {PASSIV} !leichte Stromstöße verpassen", "{AKTIV}, es ist Zeit {PASSIV} von seinem Plug zu befreien", 10, 30, Arrays.asList(plugElektro), Arrays.asList(VAGINA), gruppe); + } + + void knebel() { + AufgabenGruppeEntity gruppe = createAufgGruppe("Knebel", "Enthält verschiedene Aufgaben für das Tragen von Knebeln über einen gewissen Zeitraum.", getClass().getClassLoader().getResourceAsStream("knebel.png")); + ToyEntity ballKnebel = createToy("Ballknebel", "Ein Ballknebel", gruppe); + ToyEntity penisKnebel = createToy("Penisknebel", "Ein Penisknebel", gruppe); + ToyEntity aufblKnebel = createToy("Aufblasbarer Knebel", "Ein aufblasbarer Knebel", gruppe); + ToyEntity isolationsmaske = createToy("Isolationsmaske", "Eine Isolationsmaske", gruppe); + + createSperre("Ballknebel", "{AKTIV}, lege {PASSIV} einen Ballknebel an, dieser ist bis auf weiteres zu tragen.", "{AKTIV}, es ist Zeit {PASSIV} von seinem Knebel zu befreien.", 10, 30, Arrays.asList(ballKnebel), Arrays.asList(MUND), gruppe); + createSperre("Penisknebel", "{AKTIV}, lege {PASSIV} einen Dildoknebel an, dieser ist bis auf weiteres zu tragen.", "{AKTIV}, es ist Zeit {PASSIV} von seinem Knebel zu befreien.", 10, 30, Arrays.asList(penisKnebel), Arrays.asList(MUND), gruppe); + createSperre("Aufblasbarer Knebel", "{AKTIV}, lege {PASSIV} einen aufblasbaren Knebel an und pumpe diesen soweit auf, dass {PASSIV} noch halbwegs gut atmen kann, dieser ist bis auf weiteres zu tragen.", "{AKTIV}, es ist Zeit {PASSIV} von seinem Knebel zu befreien.", 5, 15, Arrays.asList(aufblKnebel), Arrays.asList(MUND), gruppe); + createSperre("Isolationsmaske", "{AKTIV}, lege {PASSIV} eine Isolationsmaske an, diese ist bis auf weiteres zu tragen.", "{AKTIV}, es ist Zeit {PASSIV} von seinem Knebel zu befreien.", 5, 15, Arrays.asList(isolationsmaske), Arrays.asList(MUND), gruppe); + } + + void stafen() { + AufgabenGruppeEntity strafen = createAufgGruppe("Strafen", "Enthält verschiedene Bestrafungen", getClass().getClassLoader().getResourceAsStream("peitsche.png")); + + ToyEntity gerte = createToy("Gerte", "Eine gewöhnliche Gerte", strafen); + ToyEntity paddel = createToy("Paddel", "Eine gewöhnliches Paddel", strafen); + ToyEntity peitsche = createToy("Peitsche", "Eine gewöhnliche Peitsche", strafen); + + ToyEntity penisKnebel = createToy("Doppel-Penisknebel", "Ein Doppel-Penisknebel", strafen); + ToyEntity handfesseln = createToy("Handfesseln", "Fesseln zum Binden der Hände, z.B. Handschellen", strafen); + ToyEntity plugGross = createToy("Plug groß", "Ein großer Buttplug", strafen); + ToyEntity plugElektro = createToy("Elektro-Plug", "Ein Elektropplug, der Stromstöße verpasst", strafen); + ToyEntity plugPump = createToy("Pump-Plug", "Ein aufblasbarer Plug", strafen); + ToyEntity nippelklemmen = createToy("Nippelklemmen", "Nippelklemmen", strafen); + ToyEntity augenbinde = createToy("Augenbinde", "Eine Augenbinde", strafen); + ToyEntity ballKnebel = createToy("Ballknebel", "Ein Ballknebel", strafen); + ToyEntity strapon = createToy("Strapon", "Ein Umschnalldildo", strafen); + ToyEntity kgMann = createToy("KG Mann", "Ein Voll-KG oder Peniskäfig für den Mann", strafen); + ToyEntity kgFrau = createToy("KG Frau", "Ein Voll-KG die Frau", strafen); + ToyEntity dildoKlein = createToy("Dildo klein", "Ein kleiner Dildo", strafen); + ToyEntity dildoGross = createToy("Dildo groß", "Ein großer Dildo", strafen); + + createStrafe("5 Schläge mit flachen Hand", "{PASSIV} stellt sich mit dem Gesicht zur Wand, Hände hinterm Kopf, Beine schulterbreit, {AKTIV} verpasst {PASSIV} 5 Schläge mit der flachen Hand auf das Gesäß.", + 1, null, null, Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), strafen); + createStrafe("15 Schläge mit flachen Hand", "{PASSIV} stellt sich mit dem Gesicht zur Wand, Hände hinterm Kopf, Beine schulterbreit, {AKTIV} verpasst {PASSIV} 15 beherzte Schläge mit der flachen Hand auf das Gesäß, {PASSIV} zählt laut mit", + 3, null, null,Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), strafen); + createStrafe("5 Schläge mit Gerte", "{PASSIV} stellt sich mit dem Gesicht zur Wand, Hände hinterm Kopf, Beine schulterbreit, {AKTIV} verpasst {PASSIV} 5 Schläge mit der Gerte auf das Gesäß.", + 2, null, null, Collections.emptyList(), Collections.emptyList(), Arrays.asList(gerte), strafen); + createStrafe("15 Schläge mit Gerte", "{PASSIV} stellt sich mit dem Gesicht zur Wand, Hände hinterm Kopf, Beine schulterbreit, {AKTIV} verpasst {PASSIV} 15 beherzte Schläge mit der Gerte auf das Gesäß, {PASSIV} zählt laut mit", + 4, null, null,Collections.emptyList(), Collections.emptyList(), Arrays.asList(gerte), strafen); + createStrafe("5 Schläge mit Paddel", "{PASSIV} stellt sich mit dem Gesicht zur Wand, Hände hinterm Kopf, Beine schulterbreit, {AKTIV} verpasst {PASSIV} 5 Schläge mit dem Paddel auf das Gesäß.", + 2, null, null, Collections.emptyList(), Collections.emptyList(), Arrays.asList(paddel), strafen); + createStrafe("15 Schläge mit Paddel", "{PASSIV} stellt sich mit dem Gesicht zur Wand, Hände hinterm Kopf, Beine schulterbreit, {AKTIV} verpasst {PASSIV} 15 beherzte Schläge mit dem Paddel auf das Gesäß, {PASSIV} zählt laut mit", + 4, null, null,Collections.emptyList(), Collections.emptyList(), Arrays.asList(paddel), strafen); + createStrafe("5 Schläge mit Peitsche", "{PASSIV} stellt sich mit dem Gesicht zur Wand, Hände hinterm Kopf, Beine schulterbreit, {AKTIV} verpasst {PASSIV} 5 Schläge mit der Peitsche auf das Gesäß.", + 3, null, null, Collections.emptyList(), Collections.emptyList(), Arrays.asList(peitsche), strafen); + createStrafe("15 Schläge mit Peitsche", "{PASSIV} stellt sich mit dem Gesicht zur Wand, Hände hinterm Kopf, Beine schulterbreit, {AKTIV} verpasst {PASSIV} 15 beherzte Schläge mit der Peitsche auf das Gesäß, {PASSIV} zählt laut mit", + 5, null, null,Collections.emptyList(), Collections.emptyList(), Arrays.asList(peitsche), strafen); + + createStrafe("Schläge auf Klitoris mit Hand", "{PASSIV} liegt auf dem Rücken mit breiten Beinen, {AKTIV} verpasst {PASSIV} 5 Schläge mit der Hand auf die Klitoris, {PASSIV} zählt laut mit", + 4, null, null, Collections.emptyList(), Arrays.asList(VAGINA), Collections.emptyList(), strafen); + createStrafe("Schläge auf Klitoris mit Petische", "{PASSIV} liegt auf dem Rücken mit breiten Beinen, {AKTIV} verpasst {PASSIV} 5 Schläge mit der Peitsche auf die Klitoris, {PASSIV} zählt laut mit", + 5, null, null, Collections.emptyList(), Arrays.asList(VAGINA), Arrays.asList(peitsche), strafen); + createStrafe("Schläge auf Klitoris mit Paddel", "{PASSIV} liegt auf dem Rücken mit breiten Beinen, {AKTIV} verpasst {PASSIV} 5 Schläge mit dem Paddel auf die Klitoris, {PASSIV} zählt laut mit", + 5, null, null, Collections.emptyList(), Arrays.asList(VAGINA), Arrays.asList(paddel), strafen); + createStrafe("Schläge auf Klitoris mit Gerte", "{PASSIV} liegt auf dem Rücken mit breiten Beinen, {AKTIV} verpasst {PASSIV} 5 Schläge mit der Gerte auf die Klitoris, {PASSIV} zählt laut mit", + 5, null, null, Collections.emptyList(), Arrays.asList(VAGINA), Arrays.asList(gerte), strafen); + + createStrafe("5 Ohrfeigen", "{PASSIV} stellt sich mit dem Rücken zur Wand, Hände hinterm Kopf, Beine schulterbreit, {AKTIV} verpasst {PASSIV} 5 Ohrfeigen, {PASSIV} zählt laut mit", + 5, null, null, Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), strafen); + + createStrafe("Elektroplug anal", "{AKTIV} führt {PASSIV} anal einen Elektro-Plug ein. {AKTIV} erhöht ganz langsam die Intensität bis {PASSIV} 'STOP' sagt, dann fängt {AKTIV} wieder bei null an", + 5, 30, 90, Collections.emptyList(), Arrays.asList(ANUS), Arrays.asList(plugElektro), strafen); + createStrafe("Elektroplug vaginal", "{AKTIV} führt {PASSIV} vaginal einen Elektro-Plug ein. {AKTIV} erhöht ganz langsam die Intensität bis {PASSIV} 'STOP' sagt, dann fängt {AKTIV} wieder bei null an", + 5, 30, 90, Collections.emptyList(), Arrays.asList(VAGINA), Arrays.asList(plugElektro), strafen); + createStrafe("Pumpplug anal", "{AKTIV} führt {PASSIV} anal einen Pump-Plug ein. {AKTIV} pumpt ganz langsam auf bis {PASSIV} 'STOP' sagt, dann fängt {AKTIV} wieder bei null an", + 5, 30, 90, Collections.emptyList(), Arrays.asList(ANUS), Arrays.asList(plugPump), strafen); + createStrafe("Pumpplug vaginal", "{AKTIV} führt {PASSIV} anal einen Pump-Plug ein. {AKTIV} pumpt ganz langsam auf bis {PASSIV} 'STOP' sagt, dann fängt {AKTIV} wieder bei null an", + 5, 30, 90, Collections.emptyList(), Arrays.asList(VAGINA), Arrays.asList(plugPump), strafen); + + createStrafe("Facesitting (Vagina)", "{PASSIV} liegt auf dem Rücken, {AKTIV} setzt sich auf das Gesicht von {PASSIV} und lässt sich den Vaginal und/oder Analbereich verwöhnen", + 2 , 90, 180, Arrays.asList(VAGINA, ANUS), Arrays.asList(MUND), Collections.emptyList(), strafen); + createStrafe("Facesitting gefesselt (Vagina)", "{PASSIV} liegt mit auf den Rücken gefesselten Händen auf dem Rücken, {AKTIV} setzt sich auf das Gesicht von {PASSIV} und lässt sich den Vaginal und/oder Analbereich verwöhnen", + 4, 90, 180, Arrays.asList(VAGINA, ANUS), Arrays.asList(MUND), Arrays.asList(handfesseln), strafen); + createStrafe("Facesitting (Penis)", "{PASSIV} liegt auf dem Rücken, {AKTIV} setzt sich auf das Gesicht von {PASSIV} und lässt sich den Penis und/oder Analbereich verwöhnen", + 2, 90, 180, Arrays.asList(PENIS, ANUS), Arrays.asList(MUND), Collections.emptyList(), strafen); + createStrafe("Facesitting gefesselt (Penis)", "{PASSIV} liegt mit auf den Rücken gefesselten Händen auf dem Rücken, {AKTIV} setzt sich auf das Gesicht von {PASSIV} und lässt sich den Penis und/oder Analbereich verwöhnen", + 4, 90, 180, Arrays.asList(VAGINA, PENIS), Arrays.asList(MUND), Arrays.asList(handfesseln), strafen); + + createStrafe("Facesitting Doppelpenisknebel", "{PASSIV} liegt auf dem Rücken, {AKTIV} legt {PASSIV} einen Doppel-Penisknebel an und reitet diesen vaginal oder anal", + 3, 60, 120, Arrays.asList(VAGINA), Arrays.asList(MUND), Arrays.asList(penisKnebel), strafen); + createStrafe("Facesitting Doppelpenisknebel gefesslt", "{PASSIV} liegt mit auf den Rücken gefesselten Händen auf dem Rücken, {AKTIV} legt {PASSIV} einen Doppel-Penisknebel an und reitet diesen vaginal oder anal", + 3, 60, 120, Arrays.asList(VAGINA), Arrays.asList(MUND), Arrays.asList(penisKnebel, handfesseln), strafen); + + createStrafe("Nippelklemmen", "{AKTIV} legt {PASSIV} Nippelklemmen an, {AKTIV} zieht an der Kette und erhöht ganz langsam die Intensität bis {PASSIV} 'STOP' sagt, dann fängt {AKTIV} wieder bei null an", + 3, 30, 90, Collections.emptyList(), Collections.emptyList(), Arrays.asList(nippelklemmen), strafen); + createStrafe("Nippelbehandlung", "{AKTIV} nimmt die Nippel von {PASSIV} zwischen die Finger und erhöht langsam den Druck bis {PASSIV} 'STOP' sagt", + 2, null, null, Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), strafen); + + createStrafe("Hilflos liegen lassen", "{AKTIV} fesselt, knebelt und verbindet die Augen von {PASSIV}. {AKTIV} lässt {PASSIV} wehrlos liegen, bei Ablauf der Zeit erlöst {AKTIV} {PASSIV} mit einem beherzten Plapps auf den Po", + 4, 300, 600, Collections.emptyList(), Collections.emptyList(), Arrays.asList(handfesseln, ballKnebel, augenbinde), strafen); + createStrafe("Strapon reiten", "{PASSIV} liegt auf dem Rücken und trägt dabei einen Umschnalldildo. {AKTIV} reitet den Umschnalldildo von {PASSIV}", + 3, 60, 180, Arrays.asList(VAGINA, ANUS), Collections.emptyList(), Arrays.asList(strapon), strafen); + createStrafe("Strapon reiten gefesselt", "{AKTIV} fesselt und knebelt {PASSIV}. {PASSIV} trägt dabei einen Umschnalldildo. {AKTIV} reitet den Umschnalldildo von {PASSIV}", + 4, 60, 180, Arrays.asList(VAGINA, ANUS), Collections.emptyList(), Arrays.asList(strapon, handfesseln), strafen); + + createStrafe("Teaseblowjob mit dem Strapon", "{AKTIV} fesselt und knebelt {PASSIV}. {PASSIV} trägt dabei einen Umschnalldildo, KG und einen großen Buttplug. {AKTIV} gibt dem Umschnalldildo einen Blowjow in 69er Positition und präsentiert {PASSIV} dabei den Intimbereich", + 5, 180, 300, Arrays.asList(VAGINA), Collections.emptyList(), Arrays.asList(kgMann, plugGross, handfesseln, strapon), strafen); + createStrafe("Teasereiten mit Strapon", "{AKTIV} fesselt und knebelt {PASSIV}. {PASSIV} trägt dabei einen Umschnalldildo, KG und einen großen Buttplug. {AKTIV} reitet den Umschnalldildo von {PASSIV}.", + 5, 180, 300, Arrays.asList(VAGINA), Collections.emptyList(), Arrays.asList(kgMann, plugGross, handfesseln, strapon), strafen); + createStrafe("Tease mit Selbstbefriedigung", "{AKTIV} knebelt {PASSIV} knebelt und fesselt {PASSIV} an einen Stuhl. {PASSIV} trägt dabei einen KG und einen großen Buttplug. {AKTIV} befriedigt sich dann vor den Augen von {PASSIV} selber", + 4, 240, 360, Arrays.asList(VAGINA), Collections.emptyList(), Arrays.asList(kgMann, plugGross, ballKnebel, handfesseln), strafen); + createStrafe("Tease mit Selbstbefriedigung", "{AKTIV} knebelt {PASSIV} knebelt und fesselt {PASSIV} an einen Stuhl. {PASSIV} trägt dabei einen KG und einen großen Buttplug. {AKTIV} befriedigt sich dann vor den Augen von {PASSIV} selber", + 4, 240, 360, Arrays.asList(PENIS), Collections.emptyList(), Arrays.asList(kgFrau, plugGross, ballKnebel, handfesseln), strafen); + + createStrafe("Blowjob auf allen vieren", "{AKTIV}, zwinge {PASSIV} vor dir auf die Knie, führe dein Glied (oder Strap on) in den Mund von {PASSIV} ein und zeig mit einem Deepthroat, wer das sagen hat", + 5, 30, 90, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(MUND), Collections.emptyList(), strafen); + createStrafe("Oralsex mit kleinem Dildo in der Vagina", "{PASSIV}, geh auf die Knie und reite vaginal einen kleinen Dildo, befriedige dabei {AKTIV} oral.", + 2, 60, 120,Arrays.asList(VAGINA, PENIS), Arrays.asList(VAGINA), Arrays.asList(dildoKlein), strafen); + createStrafe("Oralsex mit großen Dildo in der Vagina", "{PASSIV}, geh auf die Knie und reite vaginal einen großen Dildo, befriedige dabei {AKTIV} oral.", + 4, 60, 120,Arrays.asList(VAGINA, PENIS), Arrays.asList(VAGINA), Arrays.asList(dildoGross), strafen); + createStrafe("Oralsex mit kleinem Dildo im Anus", "{PASSIV}, geh auf die Knie und reite anal einen kleinen Dildo, befriedige dabei {AKTIV} oral.", + 3, 60, 120,Arrays.asList(VAGINA, PENIS), Arrays.asList(ANUS), Arrays.asList(dildoKlein), strafen); + createStrafe("Oralsex mit großen Dildo im Anus", "{PASSIV}, geh auf die Knie und reite anal einen großen Dildo, befriedige dabei {AKTIV} oral.", + 4, 60, 120,Arrays.asList(VAGINA, PENIS), Arrays.asList(ANUS), Arrays.asList(dildoGross), strafen); + + createStrafe("Vagina dehnen", "{PASSIV} geht auf alle viere und streckt den hintern schön in die Luft, {AKTIV} führe langsam nach und nach mehr Finger in die Vagina von {PASSIV} ein, bis {PASSIV} 'STOP' sagt", + 2, null, null, Arrays.asList(), Arrays.asList(VAGINA), Arrays.asList(), strafen); + createStrafe("Anus dehnen", "{PASSIV} geht auf alle viere und streckt den hintern schön in die Luft, {AKTIV} führe langsam nach und nach mehr Finger in die Anus von {PASSIV} ein, bis {PASSIV} 'STOP' sagt", + 2, null, null, Arrays.asList(), Arrays.asList(ANUS), Arrays.asList(), strafen); + + createStrafe("Vaginalsex in Missionarstellung und Breathplay", "{AKTIV} dringt in Missionarsstellung in {PASSIV} und gibt vollgas, dabei packt {AKTIV} {PASSIV} am Hals und drückt beherzt zu", + 4, 30, 60, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(VAGINA), Arrays.asList(), strafen); + createStrafe("Analsex in Missionarstellung und Breathplay", "{AKTIV} dringt in Missionarsstellung anal in {PASSIV} und gibt vollgas, dabei packt {AKTIV} {PASSIV} am Hals und drückt beherzt zu", + 4, 30, 60, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(ANUS), Arrays.asList(), strafen); + } + + void aufgabenAnal() { + AufgabenGruppeEntity aufgaben = createAufgGruppe("Aufgaben Anal", "Enthält verschiedene Sex-Aufgaben die sich rund um das Hintertürchen drehen.", getClass().getClassLoader().getResourceAsStream("sex.png")); + + ToyEntity vibrator = createToy("Virbrator", "Ein herkömmlicher Vibrator.", aufgaben); + ToyEntity analVibrator = createToy("Analvirbrator", "Ein Vibrator speziell für die anale Anwendung.", aufgaben); + ToyEntity dildoKlein = createToy("Dildo klein", "Ein kleiner Dildo", aufgaben); + ToyEntity dildoGross = createToy("Dildo groß", "Ein großer Dildo", aufgaben); + ToyEntity doppelDildo = createToy("Doppeldildo", "Ein Doppeldildo", aufgaben); + + createAufgabe("Analingus", "{AKTIV}, verpasse {PASSIV} eine Anusmassage mit der Zunge", 60, 120, + 3, Arrays.asList(MUND), Arrays.asList(ANUS), Collections.emptyList(), aufgaben); + + createAufgabe("Klitoris mit Vibrator verwöhnen und Finger in Po", "{AKTIV}, verwöhne die Klitoris von {PASSIV} mit einem Vibrator, führe dabei einen Finger in den Anus von {PASSIV} ein", + 4, 30, 180, Collections.emptyList(), Arrays.asList(VAGINA, ANUS), Arrays.asList(vibrator), aufgaben); + createAufgabe("Cunnilingus und Finger in Po", "{AKTIV}, verwöhne die Klitoris von {PASSIV} mit dem Mund, führe dabei einen Finger in den Anus von {PASSIV} ein" , + 3, 30, 180, Arrays.asList(MUND), Arrays.asList(VAGINA, ANUS), Collections.emptyList(), aufgaben); + createAufgabe("Klitoris mit Fingern verwöhnen und Finger in Anus", "{AKTIV}, verwöhne die Klitoris von {PASSIV} mit der Hand, führe dabei einen Finger in den Anus von {PASSIV} ein" , + 3, 30, 180, Collections.emptyList(), Arrays.asList(VAGINA, ANUS), Collections.emptyList(), aufgaben); + + createAufgabe("Eichel mit Vibrator verwöhnen und Finger in Po", "{AKTIV}, verwöhne die Eichel von {PASSIV} mit einem Vibrator, führe dabei einen Finger in den Anus von {PASSIV} ein" , + 4, 30, 180, Collections.emptyList(), Arrays.asList(PENIS, ANUS), Arrays.asList(vibrator), aufgaben); + createAufgabe("Felatio und Finger in Po", "{AKTIV}, verwöhne die Eichel von {PASSIV} mit dem Mund, führe dabei einen Finger in den Anus von {PASSIV} ein" , + 4, 30, 180, Arrays.asList(MUND), Arrays.asList(PENIS, ANUS), Collections.emptyList(), aufgaben); + createAufgabe("Handjob und Finger in Po", "{AKTIV}, verwöhne die Eichel von {PASSIV} mit der Hand, führe dabei einen Finger in den Anus von {PASSIV} ein", + 4, 30, 180, Collections.emptyList(), Arrays.asList(PENIS, ANUS),Collections.emptyList(), aufgaben); + + createAufgabe("Anus mit Vibrator verwöhnen", "{AKTIV}, verwöhne den Anus von {PASSIV} mit einem Vibrator" , + 3, 30, 180, Collections.emptyList(), Arrays.asList(ANUS), Arrays.asList(vibrator), aufgaben); + createAufgabe("Anilingus", "{AKTIV}, verwöhne den Anus von {PASSIV} mit dem Mund" , + 3, 30, 180, Arrays.asList(MUND), Arrays.asList(ANUS), Collections.emptyList(), aufgaben); + + createAufgabe("Facesitting und Anilingus", "{AKTIV} liegt auf dem Rücken, {PASSIV} sitzt auf seinem Gesicht. {AKTIV}, verwöhne den Anus von {PASSIV} mit dem Mund" , + 4, 60, 180, Arrays.asList(MUND), Arrays.asList(ANUS), Collections.emptyList(), aufgaben); + + createAufgabe("Analvibrator einführen", "{AKTIV}, führe {PASSIV} einen Analvibrator ein und verwöhne {PASSIV} durch langsame Bewegungen mit selbigem" , + 4, 30, 180, Collections.emptyList(), Arrays.asList(ANUS), Arrays.asList(analVibrator), aufgaben); + createAufgabe("Kleiner Dildo anal", "{AKTIV}, führe {PASSIV} einen kleinen Dildo anal ein und verwöhne {PASSIV} durch langsame Bewegungen mit selbigem" , + 3, 30, 180, Collections.emptyList(), Arrays.asList(ANUS), Arrays.asList(dildoKlein), aufgaben); + createAufgabe("Großer Dildo anal", "{AKTIV}, führe {PASSIV} einen großen Dildo anal ein und verwöhne {PASSIV} durch langsame Bewegungen mit selbigem" , + 4, 30, 180, Collections.emptyList(), Arrays.asList(ANUS), Arrays.asList(dildoGross), aufgaben); + createAufgabe("Großer Dildo anal schnell", "{AKTIV}, führe {PASSIV} einen großen Dildo anal ein und verwöhne {PASSIV} durch schnelle Bewegungen mit selbigem" , + 5, 30, 180, Collections.emptyList(), Arrays.asList(ANUS), Arrays.asList(dildoGross), aufgaben); + + createAufgabe("Doppeldildo schnell", "{AKTIV}, führe {PASSIV} einen Doppeldildo anal und vaginal ein und bewege selbigen möglichst schnell rein und raus" , + 5, 30, 60, Collections.emptyList(), Arrays.asList(VAGINA, ANUS), Arrays.asList(doppelDildo), aufgaben); + createAufgabe("Doppeldildo langsam", "{AKTIV}, führe {PASSIV} einen Doppeldildo anal und vaginal und verwöhne {PASSIV} durch langsame Bewegungen mit selbigem" , + 4, 30, 180, Collections.emptyList(), Arrays.asList(VAGINA, ANUS), Arrays.asList(doppelDildo), aufgaben); + + createAufgabe("Missionarstellung anal langsam", "{AKTIV} dringt in Missionarstellung den Anus von {PASSIV} ein und verwöhnt {PASSIV} mit langsamen Bewegungen", + 4, 60, 180, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(ANUS), Collections.emptyList(), aufgaben); + createAufgabe("Missionarstellung anal schnell", "{AKTIV} dringt in Missionarstellung den Anus von {PASSIV} ein und verwöhnt {PASSIV} mit schnellen Bewegungen", + 5, 30, 90, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(ANUS), Collections.emptyList(), aufgaben); + createAufgabe("Missionarstellung anal vollgas", "{AKTIV} dringt in Missionarstellung den Anus von {PASSIV} und gibt vollgas", + 5, 30, 60, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(ANUS), Collections.emptyList(), aufgaben); + + createAufgabe("Reiterstellung anal langsam", "{PASSIV} setzt sich in Reiterstellung mit dem Anus auf {AKTIV}. {PASSIV} bestimmt das Tempo", + 3, 60, 180, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(ANUS), Collections.emptyList(), aufgaben); + createAufgabe("Reiterstellung anal schnell", "{PASSIV} setzt sich in Reiterstellung mit dem Anus auf {AKTIV}. {PASSIV} versucht das Tempo hoch zu halten", + 4, 60, 120, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(ANUS), Collections.emptyList(), aufgaben); + createAufgabe("Reiterstellung anal vollgas", "{PASSIV} setzt sich in Reiterstellung mit dem Anus auf {AKTIV} und gibt vollgas", + 5, 30, 60, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(ANUS), Collections.emptyList(), aufgaben); + + createAufgabe("Doggystyle langsam Finger in Po", "{AKTIV} dringt in Hundestellung in {PASSIV} ein und verwöhnt {PASSIV} mit langsamen Bewegungen. Dabei dringt {AKTIV} mit einem oder zwei Fingern in den Po von {PASSIV} ein", + 4, 60, 180, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(VAGINA, ANUS), Collections.emptyList(), aufgaben); + createAufgabe("Doggystyle schnell Finger in Po", "{AKTIV} dringt in Hundestellung in {PASSIV} ein und verwöhnt {PASSIV} mit schnellen Bewegungen. Dabei dringt {AKTIV} mit einem oder zwei Fingern in den Po von {PASSIV} ein", + 5, 60, 120, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(VAGINA, ANUS), Collections.emptyList(), aufgaben); + createAufgabe("Doggystyle vollgas Finger in Po", "{AKTIV} dringt in Hundestellung in {PASSIV} ein und gibt vollgas. Dabei dringt {AKTIV} mit einem oder zwei Fingern in den Po von {PASSIV} ein", + 5 ,30, 60, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(VAGINA, ANUS), Collections.emptyList(), aufgaben); + + createAufgabe("Doggystyle anal langsam", "{AKTIV} dringt in Hundestellung den Anus von {PASSIV} ein und verwöhnt {PASSIV} mit langsamen Bewegungen", + 3, 60, 180, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(ANUS), Collections.emptyList(), aufgaben); + createAufgabe("Doggystyle anal schnell", "{AKTIV} dringt in Hundestellung den Anus von {PASSIV} ein und verwöhnt {PASSIV} mit schnellen Bewegungen", + 4, 60, 120, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(ANUS), Collections.emptyList(), aufgaben); + createAufgabe("Doggystyle anal vollgas", "{AKTIV} dringt in Hundestellung den Anus von {PASSIV} ein und gibt vollgas", + 5, 30, 60, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(ANUS), Collections.emptyList(), aufgaben); + createAufgabe("Doggystyle anal vollgas keinen Mucks", "{AKTIV} dringt in Hundestellung anal in {PASSIV} ein und gibt vollgas. {PASSIV} darf dabei keinen laut von sich geben.", + 5, 30, 60, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(ANUS), Collections.emptyList(), aufgaben); + createAufgabe("Doggystyle anal Tempo bestimmt die 'gefickte' Person", "{AKTIV} dringt in Hundestellung den Anus von {PASSIV} ein. {AKTIV} hält still und {PASSIV} gibt das Tempo vor", + 3, 30, 180, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(ANUS), Collections.emptyList(), aufgaben); + + createAufgabe("Löffelchen anal langsam", "{AKTIV} dringt in Löffelchenstellung den Anus von {PASSIV} ein und verwöhnt {PASSIV} mit langsamen Bewegungen", + 3, 60, 180, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(ANUS), Collections.emptyList(), aufgaben); + createAufgabe("Löffelchen anal schnell", "{AKTIV} dringt in Löffelchenstellung den Anus von {PASSIV} ein und verwöhnt {PASSIV} mit schnellen Bewegungen", + 4, 60, 120, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(ANUS), Collections.emptyList(), aufgaben); + createAufgabe("Löffelchen anal vollgas", "{AKTIV} dringt in Löffelchenstellung den Anus von {PASSIV} ein und gibt vollgas", + 5, 30, 60, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(ANUS), Collections.emptyList(), aufgaben); + } + + void aufgaben() { + AufgabenGruppeEntity aufgaben = createAufgGruppe("Aufgaben", "Enthält verschiedene Sex-Aufgaben.", getClass().getClassLoader().getResourceAsStream("sex.png")); + + ToyEntity vibrator = createToy("Virbrator", "Ein herkömmlicher Vibrator.", aufgaben); + ToyEntity dildoKlein = createToy("Dildo klein", "Ein kleiner Dildo", aufgaben); + ToyEntity dildoGross = createToy("Dildo groß", "Ein großer Dildo", aufgaben); + + createAufgabe("Hintern präsentieren", "{AKTIV}, zeig {PASSIV} deinen Hintern, gib dir selber dabei ein oder zwei Klasppse auf den Po", + 1, null, null, Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), aufgaben); + createAufgabe("Hals küssen", "{AKTIV}, küsse den Hals von {PASSIV} leidenschaftlich", + 1, 30, 60, Arrays.asList(MUND) ,Collections.emptyList(), Collections.emptyList(), aufgaben); + createAufgabe("Bauchnabel küssen", "{AKTIV}, zeichne mit Küssen den Bauchnabel von {PASSIV} nach", + 1, 30, 60, Arrays.asList(MUND), Collections.emptyList(), Collections.emptyList(), aufgaben); + createAufgabe("Ohren knabbern", "{AKTIV}, knabber leidenschaftlich an den Ohrläppchen von {PASSIV}", + 1, 30, 60, Arrays.asList(MUND), Collections.emptyList(), Collections.emptyList(), aufgaben); + + + createAufgabe("Berühren ohne anfassen", "{AKTIV}, berühre den gesamten Körper von {PASSIV} ohne die Hände zu verwenden", + 2, 60, 120, Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), aufgaben); + + createAufgabe("Nacken küssen", "{PASSIV} sitzt vor {AKTIV}, {AKTIV} küsste leidenschaftlich den Nacken von {PASSIV}", + 1, 60, 120, Arrays.asList(MUND), Collections.emptyList(), Collections.emptyList(), aufgaben); + createAufgabe("Brust küssen", "{AKTIV}, Küsse die Brust von {PASSIV} ohne die Nippel zu berühren", + 1, 60, 120, Arrays.asList(MUND), Collections.emptyList(), Collections.emptyList(), aufgaben); + createAufgabe("Nippel verwöhnen", "{AKTIV}, verwöhne die Nippel von {PASSIV} mit Küssen", + 2, 60, 120, Arrays.asList(MUND), Collections.emptyList(), Collections.emptyList(), aufgaben); + createAufgabe("Hintern küssen", "{AKTIV}, küsse den Hintern von {PASSIV} ohne den Anus zu berühren", + 1, 60, 120, Arrays.asList(MUND), Collections.emptyList(), Collections.emptyList(), aufgaben); + + createAufgabe("Intimkuss durch Unterwäsche", "{AKTIV}, küsse den Intimbereich von {PASSIV} durch die Unterwäsche", + 2, 60, 120, Arrays.asList(MUND), Collections.emptyList(), Collections.emptyList(), aufgaben); + + createAufgabe("Brustmassage", "{AKTIV}, massiere die Brust von {PASSIV} leidenschaftlich", + 1, 60, 120, Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), aufgaben); + createAufgabe("Hinternmassage", "{AKTIV}, massiere den Hintern von {PASSIV} leidenschaftlich", + 1, 60, 120, Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), aufgaben); + createAufgabe("Rückenmassage", "{AKTIV}, massiere den Rücken von {PASSIV} leidenschaftlich", + 1, 60, 120, Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), aufgaben); + createAufgabe("Oberschänkelmassage", "{AKTIV}, massiere die Oberschenkel von {PASSIV} leidenschaftlich", + 1, 60, 120, Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), aufgaben); + + createAufgabe("Klitoris mit Vibrator verwöhnen", "{AKTIV}, verwöhne die Klitoris von {PASSIV} mit einem Vibrator", + 3, 30, 180, Collections.emptyList(), Arrays.asList(VAGINA), Arrays.asList(vibrator), aufgaben); + createAufgabe("Cunnilingus und Finger in Vagina", "{AKTIV}, verwöhne die Klitoris von {PASSIV} mit dem Mund, führe dabei einen bis zwei Finger in die Vagina von {PASSIV} ein" , + 3, 30, 180, Arrays.asList(MUND), Arrays.asList(VAGINA), Collections.emptyList(), aufgaben); + createAufgabe("Klitoris mit Fingern verwöhnen und Finger in Vagina", "{AKTIV}, verwöhne die Klitoris von {PASSIV} mit der Hand, führe dabei einen bis zwei Finger in die Vagina von {PASSIV} ein", + 4, 30, 180, Collections.emptyList(), Arrays.asList(VAGINA), Collections.emptyList(), aufgaben); + + createAufgabe("Eichel mit Vibrator verwöhnen", "{AKTIV}, verwöhne die Eichel von {PASSIV} mit einem Vibrator" , + 3, 30, 180, Collections.emptyList(), Arrays.asList(PENIS), Arrays.asList(vibrator), aufgaben); + createAufgabe("Felatio", "{AKTIV}, verwöhne die Eichel von {PASSIV} mit dem Mund" , + 3, 30, 180, Arrays.asList(MUND), Arrays.asList(PENIS), Collections.emptyList(), aufgaben); + createAufgabe("Handjob", "{AKTIV}, verwöhne die Eichel von {PASSIV} mit der Hand" , + 3, 30, 180, Collections.emptyList(), Arrays.asList(PENIS), Collections.emptyList(), aufgaben); + + createAufgabe("Facesitting", "{AKTIV} liegt auf dem Rücken, {PASSIV} sitzt auf seinem Gesicht. {AKTIV}, verwöhne die Vagina von {PASSIV} mit dem Mund" , + 4, 60, 180, Arrays.asList(MUND), Arrays.asList(VAGINA), Collections.emptyList(), aufgaben); + + createAufgabe("69er-Position", "69er-Zeit: {AKTIV} liegt oben. {PASSIV}, falls du verschlossen bist, zeihe einen Strap on an, damit {AKTIV} auch was zu tun hat.", + 4, 60, 180, Arrays.asList(VAGINA, MUND), Arrays.asList(MUND), Collections.emptyList(), aufgaben); + + createAufgabe("Kleiner Dildo vaginal", "{AKTIV}, führe {PASSIV} einen kleinen Dildo vaginal ein und verwöhne {PASSIV} durch langsame Bewegungen mit selbigem" , + 3, 30, 180, Collections.emptyList(), Arrays.asList(VAGINA), Arrays.asList(dildoKlein), aufgaben); + createAufgabe("Großer Dildo vaginal", "{AKTIV}, führe {PASSIV} einen großen Dildo vaginal ein und verwöhne {PASSIV} durch langsame Bewegungen mit selbigem" , + 4, 30, 180, Collections.emptyList(), Arrays.asList(VAGINA), Arrays.asList(dildoGross), aufgaben); + createAufgabe("Großer Dildo vaginal schnell", "{AKTIV}, führe {PASSIV} einen großen Dildo vaginal ein und bewege selbigen möglichst schnell rein und raus" , + 5, 30, 60, Collections.emptyList(), Arrays.asList(VAGINA), Arrays.asList(dildoGross), aufgaben); + + createAufgabe("Missionarstellung langsam", "{AKTIV} dringt in Missionarstellung in {PASSIV} ein und verwöhnt {PASSIV} mit langsamen Bewegungen", + 3, 60, 180, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(VAGINA), Collections.emptyList(), aufgaben); + createAufgabe("Missionarstellung schnell", "{AKTIV} dringt in Missionarstellung in {PASSIV} ein und verwöhnt {PASSIV} mit schnellen Bewegungen", + 4, 30, 90, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(VAGINA), Collections.emptyList(), aufgaben); + createAufgabe("Missionarstellung Vollgas", "{AKTIV} dringt in Missionarstellung in {PASSIV} ein und gibt vollgas", + 5, 30, 60, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(VAGINA), Collections.emptyList(), aufgaben); + + createAufgabe("Reiterstellung langsam", "{PASSIV} setzt sich in Reiterstellung auf {AKTIV}. {PASSIV} bestimmt das Tempo", + 3 ,60, 180, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(VAGINA), Collections.emptyList(), aufgaben); + createAufgabe("Reiterstellung schnell", "{PASSIV} setzt sich in Reiterstellung auf {AKTIV}. {PASSIV} versucht das Tempo hoch zu halten", + 4, 60, 120, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(VAGINA), Collections.emptyList(), aufgaben); + createAufgabe("Reiterstellung vollgas", "{PASSIV} setzt sich in Reiterstellung auf {AKTIV} und gibt vollgas", + 5, 30, 60, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(VAGINA), Collections.emptyList(), aufgaben); + + createAufgabe("Doggystyle langsam", "{AKTIV} dringt in Hundestellung in {PASSIV} ein und verwöhnt {PASSIV} mit langsamen Bewegungen", + 3, 60, 180, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(VAGINA), Collections.emptyList(), aufgaben); + createAufgabe("Doggystyle schnell", "{AKTIV} dringt in Hundestellung in {PASSIV} ein und verwöhnt {PASSIV} mit schnellen Bewegungen", + 4, 60, 120, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(VAGINA), Collections.emptyList(), aufgaben); + createAufgabe("Doggystyle vollgas", "{AKTIV} dringt in Hundestellung in {PASSIV} ein und gibt vollgas", + 5, 30, 60, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(VAGINA), Collections.emptyList(), aufgaben); + createAufgabe("Doggystyle vollgas keinen Mucks", "{AKTIV} dringt in Hundestellung in {PASSIV} ein und gibt vollgas. {PASSIV} darf dabei keinen laut von sich geben.", + 5, 30, 60, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(VAGINA), Collections.emptyList(), aufgaben); + createAufgabe("Doggystyle Tempo bestimmt die 'gefickte' Person", "{AKTIV} dringt in Hundestellung in {PASSIV} ein. {AKTIV} hält still und {PASSIV} gibt das Tempo vor", + 3, 60, 180, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(VAGINA), Collections.emptyList(), aufgaben); + + createAufgabe("Löffelchen langsam", "{AKTIV} dringt in Löffelchenstellung in {PASSIV} ein und verwöhnt {PASSIV} mit langsamen Bewegungen", + 3, 60, 180, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(VAGINA), Collections.emptyList(), aufgaben); + createAufgabe("Löffelchen scnell", "{AKTIV} dringt in Löffelchenstellung in {PASSIV} ein und verwöhnt {PASSIV} mit schnellen Bewegungen", + 4, 60, 120, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(VAGINA), Collections.emptyList(), aufgaben); + createAufgabe("Löffelchen vollgas", "{AKTIV} dringt in Löffelchenstellung in {PASSIV} ein und gibt vollgas", + 5, 30, 60, Arrays.asList(PENIS, UMSCHNALLDILDO), Arrays.asList(VAGINA), Collections.emptyList(), aufgaben); + } + + private AufgabeEntity createAufgabe(String kurzText, String text, Integer level, Integer sekundenVon, Integer sekundenBis, List benoetigtAktiv, List benoetigtPassiv, List benoetigteToys, AufgabenGruppeEntity gruppe) { + AufgabeEntity entity = new AufgabeEntity(); + entity.setAufgabeId(UUID.randomUUID()); + entity.setKurzText(kurzText); + entity.setText(text); + entity.setLevel(level); + entity.setSekundenVon(sekundenVon); + entity.setSekundenBis(sekundenBis); + entity.setBenoetigtAktiv(benoetigtAktiv); + entity.setBenoetigtPassiv(benoetigtPassiv); + entity.setBenoetigteToys(benoetigteToys); + entity.setAufgabenGruppe(gruppe); + aufgabeDAO.persist(entity); + return entity; + } + + private StrafeEntity createStrafe(String kurzText, String text, Integer level, Integer sekundenVon, Integer sekundenBis, List benoetigtAktiv, List benoetigtPassiv, List benoetigteToys, AufgabenGruppeEntity gruppe) { + StrafeEntity entity = new StrafeEntity(); + entity.setStrafeId(UUID.randomUUID()); + entity.setKurzText(kurzText); + entity.setText(text); + entity.setLevel(level); + entity.setSekundenVon(sekundenVon); + entity.setSekundenBis(sekundenBis); + entity.setBenoetigtAktiv(benoetigtAktiv); + entity.setBenoetigtPassiv(benoetigtPassiv); + entity.setBenoetigteToys(benoetigteToys); + entity.setAufgabenGruppe(gruppe); + strafeDao.persist(entity); + return entity; + } + + private SperreEntity createSperre(String kurzText, String text, String releaseText, Integer von, Integer bis, List toys, List sperreFue, AufgabenGruppeEntity gruppe) { + SperreEntity entity = new SperreEntity(); + entity.setSperreId(UUID.randomUUID()); + entity.setKurzText(kurzText); + entity.setText(text); + entity.setReleaseText(releaseText); + entity.setMinutenVon(von); + entity.setMinutenBis(bis); + entity.setBenoetigteToys(toys); + entity.setSperreFuer(sperreFue); + entity.setAufgabenGruppe(gruppe); + sperreDao.persist(entity); + return entity; + } + + private AufgabenGruppeEntity createAufgGruppe(String name, String beschreibung, InputStream stream) { + AufgabenGruppeEntity entity = new AufgabenGruppeEntity(); + entity.setGruppenId(UUID.randomUUID()); + entity.setUserId(null); + entity.setName(name); + entity.setBeschreibung(beschreibung); + entity.setPrivateGruppe(false); + try { + entity.setBild(stream.readAllBytes()); + } catch (IOException e) { + e.printStackTrace(); + } + gruppeDao.persist(entity); + return entity; + } + + private ToyEntity createToy(String name, String beschreibung, AufgabenGruppeEntity gruppe) { + ToyEntity toy = new ToyEntity(); + toy.setToyId(UUID.randomUUID()); + toy.setName(name); + toy.setBeschreibung(beschreibung); + toy.setAufgabenGruppe(gruppe); + toyDao.persist(toy); + return toy; + } +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/Favorit.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/Favorit.java new file mode 100644 index 0000000..24ee16d --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/Favorit.java @@ -0,0 +1,35 @@ +package de.oaa.xxx.aufgaben; + +import java.util.UUID; + +public class Favorit { + + private UUID favoritId; + private UUID userId; + private UUID aufgabenGruppeId; + + public UUID getFavoritId() { + return favoritId; + } + + public void setFavoritId(UUID favoritId) { + this.favoritId = favoritId; + } + + public UUID getUserId() { + return userId; + } + + public void setUserId(UUID userId) { + this.userId = userId; + } + + public UUID getAufgabenGruppeId() { + return aufgabenGruppeId; + } + + public void setAufgabenGruppeId(UUID aufgabenGruppeId) { + this.aufgabenGruppeId = aufgabenGruppeId; + } + +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/FavoritDAO.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/FavoritDAO.java new file mode 100644 index 0000000..7cf49c1 --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/FavoritDAO.java @@ -0,0 +1,58 @@ +package de.oaa.xxx.aufgaben; + +import java.util.Collections; +import java.util.List; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import de.oaa.xxx.framework.AbstractDAO; +import jakarta.persistence.EntityManager; +import jakarta.persistence.TypedQuery; + +public class FavoritDAO extends AbstractDAO { + + private Logger LOGGER = LoggerFactory.getLogger(getClass()); + + public FavoritDAO(EntityManager entityManager) { + super(FavoritEntity.class, entityManager); + } + + public List getUserFavoriten(UUID userId) { + try { + TypedQuery query = getEntityManager() + .createQuery("select f from FavoritEntity f where f.userId = :userId", FavoritEntity.class); + query.setParameter("userId", userId); + return query.getResultList(); + } catch (Exception e) { + LOGGER.error(e.getMessage(), e); + return Collections.emptyList(); + } + } + + public FavoritEntity findByUserAndGruppe(UUID userId, UUID gruppeId) { + TypedQuery query = getEntityManager().createQuery(""" + select f from FavoritEntity f + where f.userId = :userId + and f.aufgabenGruppeId = :aufgabenGruppeId + """,FavoritEntity.class); + query.setParameter("userId", userId); + query.setParameter("aufgabenGruppeId", gruppeId); + if (query.getResultList().size() == 1) { + return query.getSingleResult(); + } + return null; + } + + public List findAllByUserAndGruppe(UUID userId, UUID gruppeId) { + TypedQuery query = getEntityManager().createQuery(""" + select f from FavoritEntity f + where f.userId = :userId + and f.aufgabenGruppeId = :aufgabenGruppeId + """,FavoritEntity.class); + query.setParameter("userId", userId); + query.setParameter("aufgabenGruppeId", gruppeId); + return query.getResultList(); + } +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/FavoritEntity.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/FavoritEntity.java new file mode 100644 index 0000000..55eaeb5 --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/FavoritEntity.java @@ -0,0 +1,56 @@ +package de.oaa.xxx.aufgaben; + +import java.util.UUID; + +import de.oaa.xxx.framework.XXXEntity; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; + +@Entity +@Table(name = "favorit") +public class FavoritEntity implements XXXEntity { + + @Id + @Column + private UUID favoritId; + @Column + private UUID userId; + @Column + private UUID aufgabenGruppeId; + public UUID getFavoritId() { + return favoritId; + } + public void setFavoritId(UUID favoritId) { + this.favoritId = favoritId; + } + public UUID getUserId() { + return userId; + } + public void setUserId(UUID userId) { + this.userId = userId; + } + public UUID getAufgabenGruppeId() { + return aufgabenGruppeId; + } + public void setAufgabenGruppeId(UUID aufgabenGruppeId) { + this.aufgabenGruppeId = aufgabenGruppeId; + } + + public Favorit toFavorit() { + Favorit favorit = new Favorit(); + favorit.setAufgabenGruppeId(aufgabenGruppeId); + favorit.setFavoritId(favoritId); + favorit.setUserId(userId); + return favorit; + } + + public static FavoritEntity fromFavorit(Favorit favorit, UUID userId) { + FavoritEntity entity = new FavoritEntity(); + entity.setFavoritId(UUID.randomUUID()); + entity.setAufgabenGruppeId(favorit.getAufgabenGruppeId()); + entity.setUserId(userId); + return entity; + } +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/FavoritList.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/FavoritList.java new file mode 100644 index 0000000..4032d08 --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/FavoritList.java @@ -0,0 +1,16 @@ +package de.oaa.xxx.aufgaben; + +import java.util.List; + +public class FavoritList { + + private List favoriten; + + public List getFavoriten() { + return favoriten; + } + + public void setFavoriten(List favoriten) { + this.favoriten = favoriten; + } +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/FavoritResource.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/FavoritResource.java new file mode 100644 index 0000000..48b384c --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/FavoritResource.java @@ -0,0 +1,128 @@ +package de.oaa.xxx.aufgaben; + +import java.util.List; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import de.oaa.xxx.framework.request.RequestChecker; +import jakarta.annotation.Resource; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.transaction.SystemException; +import jakarta.transaction.UserTransaction; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.Status; +import jakarta.ws.rs.core.UriInfo; + +@ApplicationScoped +@Path("favorit") +public class FavoritResource { + + private Logger LOGGER = LoggerFactory.getLogger(getClass()); + + @PersistenceContext(name = "aufgaben") + private EntityManager entityManager; + @Resource + private UserTransaction transaction; + + @Path("{favoritId}") + @GET + @Produces(MediaType.APPLICATION_JSON) + public Response get(@PathParam("favoritId") UUID favoritId, @Context HttpServletRequest req) throws IllegalStateException, SecurityException, SystemException { + try { + RequestChecker.checkRequest(req); + transaction.begin(); + FavoritEntity entity = new FavoritDAO(entityManager).findById(favoritId); + if (entity != null) { + Favorit favorit = entity.toFavorit(); + transaction.commit(); + return Response.ok(favorit).build(); + } else { + transaction.rollback(); + return Response.noContent().build(); + } + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } + + @GET + @Produces(MediaType.APPLICATION_JSON) + public Response all(@Context HttpServletRequest req) throws IllegalStateException, SecurityException, SystemException { + try { + UUID userId = RequestChecker.checkRequest(req).getUserId(); + transaction.begin(); + List list = new FavoritDAO(entityManager).getUserFavoriten(userId); + if (list != null) { + FavoritList result = new FavoritList(); + result.setFavoriten(list.stream().map(fav -> fav.toFavorit()).toList()); + transaction.commit(); + return Response.ok(result).build(); + } else { + transaction.rollback(); + return Response.noContent().build(); + } + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } + + @POST + @Consumes(MediaType.APPLICATION_JSON) + public Response create(Favorit favorit, @Context UriInfo uriInfo, @Context HttpServletRequest req) throws IllegalStateException, SecurityException, SystemException { + try { + UUID userId = RequestChecker.checkRequest(req).getUserId(); + if (favorit.getAufgabenGruppeId() == null) { + return Response.status(Status.BAD_REQUEST).build(); + } + transaction.begin(); + FavoritDAO dao = new FavoritDAO(entityManager); + FavoritEntity entity = dao.findByUserAndGruppe(userId, favorit.getAufgabenGruppeId()); + if (entity == null) { + entity = FavoritEntity.fromFavorit(favorit, userId); + dao.persist(entity); + } + transaction.commit(); + return Response.created(uriInfo.getAbsolutePathBuilder().path(entity.getFavoritId().toString()).build()) + .build(); + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } + + @DELETE + @Consumes(MediaType.APPLICATION_JSON) + public Response delete(Favorit favorit, @Context HttpServletRequest req) throws IllegalStateException, SecurityException, SystemException { + try { + UUID userId = RequestChecker.checkRequest(req).getUserId(); + transaction.begin(); + FavoritDAO dao = new FavoritDAO(entityManager); + dao.findAllByUserAndGruppe(userId, favorit.getAufgabenGruppeId()).forEach(dao::remove); + transaction.commit(); + return Response.accepted().build(); + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/FillerResource.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/FillerResource.java new file mode 100644 index 0000000..ecc040c --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/FillerResource.java @@ -0,0 +1,69 @@ +package de.oaa.xxx.aufgaben; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.util.Base64; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import jakarta.annotation.Resource; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.transaction.HeuristicMixedException; +import jakarta.transaction.HeuristicRollbackException; +import jakarta.transaction.NotSupportedException; +import jakarta.transaction.RollbackException; +import jakarta.transaction.SystemException; +import jakarta.transaction.UserTransaction; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.client.ClientBuilder; +import jakarta.ws.rs.core.Response; + +@ApplicationScoped +@Path("fill") +public class FillerResource { + + private Logger LOGGER = LoggerFactory.getLogger(getClass()); + + @PersistenceContext(name = "aufgaben") + private EntityManager entityManager; + @Resource + private UserTransaction transaction; + + @GET + public Response fill() { + try { + transaction.begin(); + DefaultFiller filler = new DefaultFiller(entityManager); + filler.chastityFemale(); + filler.chastityMale(); + filler.plugs(); + filler.knebel(); + filler.stafen(); + filler.aufgaben(); + transaction.commit(); + return Response.ok().build(); + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + return Response.serverError().build(); + } + } + + @GET + @Path("read") + public Response read() throws IOException, NotSupportedException, SystemException, SecurityException, IllegalStateException, RollbackException, HeuristicMixedException, HeuristicRollbackException { + AufgabenGruppeList result = ClientBuilder.newClient().target("http://localhost:8080/aufgaben-service/gruppe/all").request().get(AufgabenGruppeList.class); + + + new File("C:/test/").mkdirs(); + for (AufgabenGruppeDisplay entity : result.getGruppen()) { + Files.write(new File("C:/test/" + entity.getName() + ".png").toPath(), Base64.getDecoder().decode(entity.getBild())); + } + + return Response.ok().build(); + } +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/ImageScaler.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/ImageScaler.java new file mode 100644 index 0000000..b0f0a30 --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/ImageScaler.java @@ -0,0 +1,30 @@ +package de.oaa.xxx.aufgaben; + +import java.awt.Image; +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +import javax.imageio.ImageIO; + +import org.slf4j.LoggerFactory; + +public class ImageScaler { + + public byte[] scale(byte[] origByte) { + try (ByteArrayInputStream bais = new ByteArrayInputStream(origByte)) { + BufferedImage orig = ImageIO.read(bais); + BufferedImage scaled = (BufferedImage) orig.getScaledInstance(128, 128, Image.SCALE_DEFAULT); + try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) { + ImageIO.write(scaled, "png", baos); + return baos.toByteArray(); + } catch (IOException exception) { + LoggerFactory.getLogger(getClass()).error("Fehler beim Skalieren des Bildes", exception); + } + } catch (IOException exception) { + LoggerFactory.getLogger(getClass()).error("Fehler beim Skalieren des Bildes", exception); + } + return new byte[0]; + } +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/Sperre.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/Sperre.java new file mode 100644 index 0000000..78a3098 --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/Sperre.java @@ -0,0 +1,89 @@ +package de.oaa.xxx.aufgaben; + +import java.util.List; +import java.util.UUID; + +public class Sperre { + + private UUID sperreId; + private String kurzText; + private String text; + private String releaseText; + private UUID gruppeId; + private List sperreFuer; + private Integer minutenVon; + private Integer minutenBis; + private List benoetigteToys; + + public UUID getSperreId() { + return sperreId; + } + + public void setSperreId(UUID sperreId) { + this.sperreId = sperreId; + } + + public String getKurzText() { + return kurzText; + } + + public void setKurzText(String kurzText) { + this.kurzText = kurzText; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public String getReleaseText() { + return releaseText; + } + + public void setReleaseText(String releaseText) { + this.releaseText = releaseText; + } + + public List getSperreFuer() { + return sperreFuer; + } + + public void setSperreFuer(List sperreFuer) { + this.sperreFuer = sperreFuer; + } + + public Integer getMinutenVon() { + return minutenVon; + } + + public void setMinutenVon(Integer minutenVon) { + this.minutenVon = minutenVon; + } + + public Integer getMinutenBis() { + return minutenBis; + } + + public void setMinutenBis(Integer minutenBis) { + this.minutenBis = minutenBis; + } + + public List getBenoetigteToys() { + return benoetigteToys; + } + + public void setBenoetigteToys(List benoetigteToys) { + this.benoetigteToys = benoetigteToys; + } + + public UUID getGruppeId() { + return gruppeId; + } + + public void setGruppeId(UUID gruppeId) { + this.gruppeId = gruppeId; + } +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/SperreDAO.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/SperreDAO.java new file mode 100644 index 0000000..7484d75 --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/SperreDAO.java @@ -0,0 +1,11 @@ +package de.oaa.xxx.aufgaben; + +import de.oaa.xxx.framework.AbstractDAO; +import jakarta.persistence.EntityManager; + +public class SperreDAO extends AbstractDAO { + + public SperreDAO(EntityManager entityManager) { + super(SperreEntity.class, entityManager); + } +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/SperreEntity.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/SperreEntity.java new file mode 100644 index 0000000..4ff0710 --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/SperreEntity.java @@ -0,0 +1,129 @@ +package de.oaa.xxx.aufgaben; + +import java.util.List; +import java.util.UUID; + +import de.oaa.xxx.framework.XXXEntity; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.ElementCollection; +import jakarta.persistence.Entity; +import jakarta.persistence.Enumerated; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.JoinTable; +import jakarta.persistence.ManyToMany; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; + +@Entity +@Table(name = "sperre") +public class SperreEntity implements XXXEntity { + + @Id + @Column + private UUID sperreId; + @Column + private String kurzText; + @Column + private String text; + @Column + private String releaseText; + @ManyToOne + @JoinColumn(name="gruppeId") + private AufgabenGruppeEntity aufgabenGruppe; + @Column + @Enumerated + @ElementCollection(targetClass = Werkzeug.class) + private List sperreFuer; + @Column + private Integer minutenVon; + @Column + private Integer minutenBis; + @ManyToMany(cascade = CascadeType.DETACH) + @JoinTable( + name = "sperreToy", + joinColumns = {@JoinColumn( name = "sperreId")}, + inverseJoinColumns = { @JoinColumn(name = "toyId")}) + private List benoetigteToys; + public UUID getSperreId() { + return sperreId; + } + public void setSperreId(UUID sperreId) { + this.sperreId = sperreId; + } + public String getKurzText() { + return kurzText; + } + public void setKurzText(String kurzText) { + this.kurzText = kurzText; + } + public String getText() { + return text; + } + public void setText(String text) { + this.text = text; + } + public String getReleaseText() { + return releaseText; + } + public void setReleaseText(String releaseText) { + this.releaseText = releaseText; + } + public List getSperreFuer() { + return sperreFuer; + } + public void setSperreFuer(List sperreFuer) { + this.sperreFuer = sperreFuer; + } + public Integer getMinutenVon() { + return minutenVon; + } + public void setMinutenVon(Integer minutenVon) { + this.minutenVon = minutenVon; + } + public Integer getMinutenBis() { + return minutenBis; + } + public void setMinutenBis(Integer minutenBis) { + this.minutenBis = minutenBis; + } + public List getBenoetigteToys() { + return benoetigteToys; + } + public void setBenoetigteToys(List benoetigteToys) { + this.benoetigteToys = benoetigteToys; + } + public AufgabenGruppeEntity getAufgabenGruppe() { + return aufgabenGruppe; + } + public void setAufgabenGruppe(AufgabenGruppeEntity aufgabenGruppe) { + this.aufgabenGruppe = aufgabenGruppe; + } + public Sperre toSperre() { + Sperre sperre = new Sperre(); + sperre.setSperreId(sperreId); + sperre.setGruppeId(aufgabenGruppe.getGruppenId()); + sperre.setKurzText(kurzText); + sperre.setMinutenBis(minutenBis); + sperre.setMinutenVon(minutenVon); + sperre.setReleaseText(releaseText); + sperre.setSperreFuer(sperreFuer.stream().map(fuer -> fuer).toList()); + sperre.setText(text); + return sperre; + } + + public static SperreEntity create(Sperre sperre, AufgabenGruppeEntity aufgabenGruppeEntity) { + SperreEntity entity = new SperreEntity(); + entity.setSperreId(UUID.randomUUID()); + entity.setAufgabenGruppe(aufgabenGruppeEntity); + entity.setBenoetigteToys(sperre.getBenoetigteToys().stream().map(toy -> ToyEntity.create(toy, aufgabenGruppeEntity)).toList()); + entity.setKurzText(sperre.getKurzText()); + entity.setMinutenBis(sperre.getMinutenBis()); + entity.setMinutenVon(sperre.getMinutenVon()); + entity.setReleaseText(sperre.getReleaseText()); + entity.setSperreFuer(sperre.getSperreFuer()); + entity.setText(sperre.getText()); + return entity; + } +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/SprerreResource.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/SprerreResource.java new file mode 100644 index 0000000..8ee576a --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/SprerreResource.java @@ -0,0 +1,106 @@ +package de.oaa.xxx.aufgaben; + +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import de.oaa.xxx.framework.request.RequestChecker; +import jakarta.annotation.Resource; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.transaction.SystemException; +import jakarta.transaction.UserTransaction; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.Status; +import jakarta.ws.rs.core.UriInfo; + +@ApplicationScoped +@Path("sperre") +public class SprerreResource { + + private Logger LOGGER = LoggerFactory.getLogger(getClass()); + + @PersistenceContext(name = "aufgaben") + private EntityManager entityManager; + @Resource + private UserTransaction transaction; + + + @Path("{sperreId}") + @GET + @Produces(MediaType.APPLICATION_JSON) + public Response get(@PathParam("sperreId") UUID sperreId, @Context HttpServletRequest req) throws IllegalStateException, SecurityException, SystemException { + try { + RequestChecker.checkRequest(req); + transaction.begin(); + SperreEntity entity = new SperreDAO(entityManager).findById(sperreId); + if (entity != null) { + Sperre sperre = entity.toSperre(); + transaction.commit(); + return Response.ok(sperre).build(); + } else { + transaction.rollback(); + return Response.noContent().build(); + } + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } + + @POST + @Consumes(MediaType.APPLICATION_JSON) + public Response create(Sperre sperre, @Context UriInfo uriInfo, @Context HttpServletRequest req) throws IllegalStateException, SecurityException, SystemException { + try { + RequestChecker.checkRequest(req); + if (sperre.getKurzText() == null || sperre.getText() == null || sperre.getMinutenVon() == null || sperre.getGruppeId() == null || sperre.getSperreFuer() == null || sperre.getSperreFuer().isEmpty()) { + return Response.status(Status.BAD_REQUEST).build(); + } + transaction.begin(); + AufgabenGruppeEntity gruppeEntity = new AufgabenGruppeDAO(entityManager).findById(sperre.getGruppeId()); + if (gruppeEntity == null || gruppeEntity.getAufgaben().size() > 50) { + transaction.rollback(); + return Response.status(Status.BAD_REQUEST).build(); + } + SperreEntity entity = SperreEntity.create(sperre, gruppeEntity); + new SperreDAO(entityManager).persist(entity); + transaction.commit(); + return Response.created(uriInfo.getAbsolutePathBuilder().path(entity.getSperreId().toString()).build()).build(); + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } + + @DELETE + @Consumes(MediaType.APPLICATION_JSON) + public Response delete(Sperre sperre, @Context HttpServletRequest req) throws IllegalStateException, SecurityException, SystemException { + try { + RequestChecker.checkRequest(req); + transaction.begin(); + SperreDAO dao = new SperreDAO(entityManager); + SperreEntity entity = dao.findById(sperre.getSperreId()); + dao.remove(entity); + transaction.commit(); + return Response.accepted().build(); + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/Strafe.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/Strafe.java new file mode 100644 index 0000000..a07e630 --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/Strafe.java @@ -0,0 +1,98 @@ +package de.oaa.xxx.aufgaben; + +import java.util.List; +import java.util.UUID; + +public class Strafe { + + private UUID strafeId; + private Integer level; + private String text; + private String kurzText; + private Integer sekundenVon; + private Integer sekundenBis; + private UUID gruppeId; + private List benoetigtAktiv; + private List benoetigtPassiv; + private List benoetigteToys; + + public UUID getStrafeId() { + return strafeId; + } + + public void setStrafeId(UUID strafeId) { + this.strafeId = strafeId; + } + + public Integer getLevel() { + return level; + } + + public void setLevel(Integer level) { + this.level = level; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public Integer getSekundenVon() { + return sekundenVon; + } + + public void setSekundenVon(Integer sekundenVon) { + this.sekundenVon = sekundenVon; + } + + public Integer getSekundenBis() { + return sekundenBis; + } + + public void setSekundenBis(Integer sekundenBis) { + this.sekundenBis = sekundenBis; + } + + public List getBenoetigtAktiv() { + return benoetigtAktiv; + } + + public void setBenoetigtAktiv(List benoetigtAktiv) { + this.benoetigtAktiv = benoetigtAktiv; + } + + public List getBenoetigtPassiv() { + return benoetigtPassiv; + } + + public void setBenoetigtPassiv(List benoetigtPassiv) { + this.benoetigtPassiv = benoetigtPassiv; + } + + public List getBenoetigteToys() { + return benoetigteToys; + } + + public void setBenoetigteToys(List benoetigteToys) { + this.benoetigteToys = benoetigteToys; + } + + public UUID getGruppeId() { + return gruppeId; + } + + public void setGruppeId(UUID gruppeId) { + this.gruppeId = gruppeId; + } + + public String getKurzText() { + return kurzText; + } + + public void setKurzText(String kurzText) { + this.kurzText = kurzText; + } +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/StrafeDAO.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/StrafeDAO.java new file mode 100644 index 0000000..e922879 --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/StrafeDAO.java @@ -0,0 +1,14 @@ +package de.oaa.xxx.aufgaben; + +import de.oaa.xxx.framework.AbstractDAO; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.persistence.EntityManager; + +@ApplicationScoped +public class StrafeDAO extends AbstractDAO { + + public StrafeDAO(EntityManager entityManager) { + super(StrafeEntity.class, entityManager); + } + +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/StrafeEntity.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/StrafeEntity.java new file mode 100644 index 0000000..7152dca --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/StrafeEntity.java @@ -0,0 +1,161 @@ +package de.oaa.xxx.aufgaben; + +import java.util.List; +import java.util.UUID; + +import de.oaa.xxx.framework.XXXEntity; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.ElementCollection; +import jakarta.persistence.Entity; +import jakarta.persistence.Enumerated; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.JoinTable; +import jakarta.persistence.ManyToMany; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; + +@Entity +@Table(name = "strafe") +public class StrafeEntity implements XXXEntity { + + @Id + @Column + private UUID strafeId; + @Column + private String kurzText; + @Column + private Integer level; + @Column + private String text; + @Column + private Integer sekundenVon; + @Column + private Integer sekundenBis; + @ManyToOne + @JoinColumn(name = "gruppeId") + private AufgabenGruppeEntity aufgabenGruppe; + @Column + @Enumerated + @ElementCollection(targetClass = Werkzeug.class) + private List benoetigtAktiv; + @Column + @Enumerated + @ElementCollection(targetClass = Werkzeug.class) + private List benoetigtPassiv; + @ManyToMany(cascade = CascadeType.DETACH) + @JoinTable(name = "strafeToy", joinColumns = { @JoinColumn(name = "strafeId") }, inverseJoinColumns = { + @JoinColumn(name = "toyId") }) + private List benoetigteToys; + + public UUID getStrafeId() { + return strafeId; + } + + public void setStrafeId(UUID strafeId) { + this.strafeId = strafeId; + } + + public Integer getLevel() { + return level; + } + + public void setLevel(Integer level) { + this.level = level; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public Integer getSekundenVon() { + return sekundenVon; + } + + public void setSekundenVon(Integer sekundenVon) { + this.sekundenVon = sekundenVon; + } + + public Integer getSekundenBis() { + return sekundenBis; + } + + public void setSekundenBis(Integer sekundenBis) { + this.sekundenBis = sekundenBis; + } + + public AufgabenGruppeEntity getAufgabenGruppe() { + return aufgabenGruppe; + } + + public void setAufgabenGruppe(AufgabenGruppeEntity aufgabenGruppe) { + this.aufgabenGruppe = aufgabenGruppe; + } + + public List getBenoetigtAktiv() { + return benoetigtAktiv; + } + + public void setBenoetigtAktiv(List benoetigtAktiv) { + this.benoetigtAktiv = benoetigtAktiv; + } + + public List getBenoetigtPassiv() { + return benoetigtPassiv; + } + + public void setBenoetigtPassiv(List benoetigtPassiv) { + this.benoetigtPassiv = benoetigtPassiv; + } + + public List getBenoetigteToys() { + return benoetigteToys; + } + + public void setBenoetigteToys(List benoetigteToys) { + this.benoetigteToys = benoetigteToys; + } + + public Strafe toStrafe() { + Strafe strafe = new Strafe(); + strafe.setStrafeId(strafeId); + strafe.setBenoetigtAktiv(benoetigtAktiv.stream().map(obj -> obj).toList()); + strafe.setBenoetigteToys(benoetigteToys.stream().map(obj -> obj.toToy()).toList()); + strafe.setBenoetigtPassiv(benoetigtPassiv.stream().map(obj -> obj).toList()); + strafe.setGruppeId(aufgabenGruppe.getGruppenId()); + strafe.setKurzText(getKurzText()); + strafe.setLevel(level); + strafe.setSekundenBis(sekundenBis); + strafe.setSekundenVon(sekundenVon); + strafe.setText(text); + return strafe; + } + + public static StrafeEntity create(Strafe strafe, AufgabenGruppeEntity aufgabenGruppeEntity) { + StrafeEntity entity = new StrafeEntity(); + entity.setStrafeId(UUID.randomUUID()); + entity.setAufgabenGruppe(aufgabenGruppeEntity); + entity.setBenoetigtAktiv(strafe.getBenoetigtAktiv()); + entity.setBenoetigteToys(strafe.getBenoetigteToys().stream().map(toy -> ToyEntity.create(toy, aufgabenGruppeEntity)).toList()); + entity.setBenoetigtPassiv(strafe.getBenoetigtPassiv()); + entity.setKurzText(strafe.getKurzText()); + entity.setLevel(strafe.getLevel()); + entity.setSekundenBis(strafe.getSekundenBis()); + entity.setSekundenVon(strafe.getSekundenVon()); + entity.setText(strafe.getText()); + return entity; + } + + public String getKurzText() { + return kurzText; + } + + public void setKurzText(String kurzText) { + this.kurzText = kurzText; + } +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/StrafeResource.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/StrafeResource.java new file mode 100644 index 0000000..f2f6356 --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/StrafeResource.java @@ -0,0 +1,106 @@ +package de.oaa.xxx.aufgaben; + +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import de.oaa.xxx.framework.request.RequestChecker; +import jakarta.annotation.Resource; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.transaction.SystemException; +import jakarta.transaction.UserTransaction; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.Status; +import jakarta.ws.rs.core.UriInfo; + +@ApplicationScoped +@Path("strafe") +public class StrafeResource { + + private Logger LOGGER = LoggerFactory.getLogger(getClass()); + + @PersistenceContext(name = "aufgaben") + private EntityManager entityManager; + @Resource + private UserTransaction transaction; + + @Path("{strafeId}") + @GET + @Produces(MediaType.APPLICATION_JSON) + public Response get(@PathParam("strafeId") UUID strafeId, @Context HttpServletRequest req) throws IllegalStateException, SecurityException, SystemException { + try { + RequestChecker.checkRequest(req); + transaction.begin(); + StrafeEntity entity = new StrafeDAO(entityManager).findById(strafeId); + if (entity != null) { + Strafe strafe = entity.toStrafe(); + transaction.commit(); + return Response.ok(strafe).build(); + } else { + transaction.rollback(); + return Response.noContent().build(); + } + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } + + @POST + @Consumes(MediaType.APPLICATION_JSON) + public Response create(Strafe strafe, @Context UriInfo uriInfo, @Context HttpServletRequest req) throws IllegalStateException, SecurityException, SystemException { + try { + RequestChecker.checkRequest(req); + if (strafe.getKurzText() == null || strafe.getText() == null || strafe.getLevel() == null || strafe.getGruppeId() == null) { + return Response.status(Status.BAD_REQUEST).build(); + } + transaction.begin(); + AufgabenGruppeEntity gruppeEntity = new AufgabenGruppeDAO(entityManager).findById(strafe.getGruppeId()); + if (gruppeEntity == null || gruppeEntity.getAufgaben().size() > 50) { + transaction.rollback(); + return Response.status(Status.BAD_REQUEST).build(); + } + StrafeEntity entity = StrafeEntity.create(strafe, gruppeEntity); + new StrafeDAO(entityManager).persist(entity); + transaction.commit(); + return Response.created(uriInfo.getAbsolutePathBuilder().path(entity.getStrafeId().toString()).build()).build(); + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } + + @DELETE + @Consumes(MediaType.APPLICATION_JSON) + public Response delete(Strafe strafe, @Context HttpServletRequest req) throws IllegalStateException, SecurityException, SystemException { + try { + RequestChecker.checkRequest(req); + transaction.begin(); + StrafeDAO dao = new StrafeDAO(entityManager); + StrafeEntity entity = dao.findById(strafe.getStrafeId()); + dao.remove(entity); + transaction.commit(); + return Response.accepted().build(); + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + + } +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/Toy.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/Toy.java new file mode 100644 index 0000000..26e6f49 --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/Toy.java @@ -0,0 +1,43 @@ +package de.oaa.xxx.aufgaben; + +import java.util.UUID; + +public class Toy { + + private UUID toyId; + private String name; + private String beschreibung; + private UUID gruppeId; + + public UUID getToyId() { + return toyId; + } + + public void setToyId(UUID toyId) { + this.toyId = toyId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getBeschreibung() { + return beschreibung; + } + + public void setBeschreibung(String beschreibung) { + this.beschreibung = beschreibung; + } + + public UUID getGruppeId() { + return gruppeId; + } + + public void setGruppeId(UUID gruppeId) { + this.gruppeId = gruppeId; + } +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/ToyDAO.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/ToyDAO.java new file mode 100644 index 0000000..2168239 --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/ToyDAO.java @@ -0,0 +1,11 @@ +package de.oaa.xxx.aufgaben; + +import de.oaa.xxx.framework.AbstractDAO; +import jakarta.persistence.EntityManager; + +public class ToyDAO extends AbstractDAO { + + public ToyDAO(EntityManager entityManager) { + super(ToyEntity.class, entityManager); + } +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/ToyEntity.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/ToyEntity.java new file mode 100644 index 0000000..c6b11f3 --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/ToyEntity.java @@ -0,0 +1,78 @@ +package de.oaa.xxx.aufgaben; + +import java.util.UUID; + +import de.oaa.xxx.framework.XXXEntity; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; + +@Entity +@Table(name = "toy") +public class ToyEntity implements XXXEntity { + + @Id + @Column + private UUID toyId; + @Column + private String name; + @Column + private String beschreibung; + @ManyToOne + @JoinColumn(name = "gruppeId") + private AufgabenGruppeEntity aufgabenGruppe; + + public UUID getToyId() { + return toyId; + } + + public void setToyId(UUID toyId) { + this.toyId = toyId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getBeschreibung() { + return beschreibung; + } + + public void setBeschreibung(String beschreibung) { + this.beschreibung = beschreibung; + } + + public AufgabenGruppeEntity getAufgabenGruppe() { + return aufgabenGruppe; + } + + public void setAufgabenGruppe(AufgabenGruppeEntity aufgabenGruppe) { + this.aufgabenGruppe = aufgabenGruppe; + } + + public Toy toToy() { + Toy toy = new Toy(); + toy.setBeschreibung(beschreibung); + toy.setName(name); + toy.setGruppeId(aufgabenGruppe.getGruppenId()); + toy.setToyId(toyId); + return toy; + } + + public static ToyEntity create(Toy toy, AufgabenGruppeEntity aufgabenGruppeEntity) { + ToyEntity entity = new ToyEntity(); + entity.setAufgabenGruppe(aufgabenGruppeEntity); + entity.setBeschreibung(toy.getBeschreibung()); + entity.setName(toy.getName()); + entity.setToyId(UUID.randomUUID()); + return entity; + } + +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/ToyResource.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/ToyResource.java new file mode 100644 index 0000000..2ce4eb9 --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/ToyResource.java @@ -0,0 +1,106 @@ +package de.oaa.xxx.aufgaben; + +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import de.oaa.xxx.framework.request.RequestChecker; +import jakarta.annotation.Resource; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.transaction.SystemException; +import jakarta.transaction.UserTransaction; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.Status; +import jakarta.ws.rs.core.UriInfo; + +@ApplicationScoped +@Path("toy") +public class ToyResource { + + private Logger LOGGER = LoggerFactory.getLogger(getClass()); + + @PersistenceContext(name = "aufgaben") + private EntityManager entityManager; + @Resource + private UserTransaction transaction; + + @Path("{toyId}") + @GET + @Produces(MediaType.APPLICATION_JSON) + public Response get(@PathParam("toyId") UUID toyId, @Context HttpServletRequest req) + throws IllegalStateException, SecurityException, SystemException { + try { + RequestChecker.checkRequest(req); + transaction.begin(); + ToyEntity entity = new ToyDAO(entityManager).findById(toyId); + if (entity != null) { + Toy toy = entity.toToy(); + transaction.commit(); + return Response.ok(toy).build(); + } else { + transaction.rollback(); + return Response.noContent().build(); + } + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } + + @POST + @Consumes(MediaType.APPLICATION_JSON) + public Response create(Toy toy, @Context UriInfo uriInfo, @Context HttpServletRequest req) throws IllegalStateException, SecurityException, SystemException { + try { + RequestChecker.checkRequest(req); + if (toy.getName() == null || toy.getGruppeId() == null) { + return Response.status(Status.BAD_REQUEST).build(); + } + transaction.begin(); + AufgabenGruppeEntity gruppeEntity = new AufgabenGruppeDAO(entityManager).findById(toy.getGruppeId()); + if (gruppeEntity == null || gruppeEntity.getAufgaben().size() > 50) { + transaction.rollback(); + return Response.status(Status.BAD_REQUEST).build(); + } + ToyEntity entity = ToyEntity.create(toy, gruppeEntity); + new ToyDAO(entityManager).persist(entity); + transaction.commit(); + return Response.created(uriInfo.getAbsolutePathBuilder().path(entity.getToyId().toString()).build()).build(); + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } + + @DELETE + @Consumes(MediaType.APPLICATION_JSON) + public Response delete(Toy toy, @Context HttpServletRequest req) throws IllegalStateException, SecurityException, SystemException { + try { + RequestChecker.checkRequest(req); + transaction.begin(); + ToyDAO dao = new ToyDAO(entityManager); + ToyEntity entity = dao.findById(toy.getToyId()); + dao.remove(entity); + transaction.rollback(); + return Response.accepted().build(); + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } +} diff --git a/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/Werkzeug.java b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/Werkzeug.java new file mode 100644 index 0000000..a207113 --- /dev/null +++ b/aufgaben-service/src/main/java/de/oaa/xxx/aufgaben/Werkzeug.java @@ -0,0 +1,26 @@ +package de.oaa.xxx.aufgaben; + +public enum Werkzeug { + + MUND("Mund", "Ob die Person gewillt ist den Mund einzusetzen."), + VAGINA("Vagina", "Ob die Person über eine Vagina verfügt und gewillt ist diese einzusetzen."), + PENIS("Penis", "Ob die Person über einen Penis verfügt und gewillt ist diesen einzusetzen."), + ANUS("Anus", "Ob die Person gewillt ist den Anus einzusetzen."), + UMSCHNALLDILDO("Umschnall-Dildo", "Ob die Person über einen Umschnall-Dildo verfügt und gewillt ist diesen einzusetzen."); + + private String anzeige; + private String beschreibung; + + Werkzeug(String anzeige, String beschreibung) { + this.anzeige = anzeige; + this.beschreibung = beschreibung; + } + + public String beschreibungsText() { + return beschreibung; + } + + public String anzeigeText() { + return anzeige; + } +} diff --git a/aufgaben-service/src/main/resources/femaleCB.png b/aufgaben-service/src/main/resources/femaleCB.png new file mode 100644 index 0000000..def74dc Binary files /dev/null and b/aufgaben-service/src/main/resources/femaleCB.png differ diff --git a/aufgaben-service/src/main/resources/knebel.png b/aufgaben-service/src/main/resources/knebel.png new file mode 100644 index 0000000..47c66fd Binary files /dev/null and b/aufgaben-service/src/main/resources/knebel.png differ diff --git a/aufgaben-service/src/main/resources/log4j2.xml b/aufgaben-service/src/main/resources/log4j2.xml new file mode 100644 index 0000000..f2e539a --- /dev/null +++ b/aufgaben-service/src/main/resources/log4j2.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/aufgaben-service/src/main/resources/maleCB.png b/aufgaben-service/src/main/resources/maleCB.png new file mode 100644 index 0000000..13cfd7d Binary files /dev/null and b/aufgaben-service/src/main/resources/maleCB.png differ diff --git a/aufgaben-service/src/main/resources/peitsche.png b/aufgaben-service/src/main/resources/peitsche.png new file mode 100644 index 0000000..29f9950 Binary files /dev/null and b/aufgaben-service/src/main/resources/peitsche.png differ diff --git a/aufgaben-service/src/main/resources/plugs.png b/aufgaben-service/src/main/resources/plugs.png new file mode 100644 index 0000000..0aa9d64 Binary files /dev/null and b/aufgaben-service/src/main/resources/plugs.png differ diff --git a/aufgaben-service/src/main/resources/sex.png b/aufgaben-service/src/main/resources/sex.png new file mode 100644 index 0000000..04273b6 Binary files /dev/null and b/aufgaben-service/src/main/resources/sex.png differ diff --git a/aufgaben-service/src/main/webapp/META-INF/hibernate.cfg.xml b/aufgaben-service/src/main/webapp/META-INF/hibernate.cfg.xml new file mode 100644 index 0000000..315bcff --- /dev/null +++ b/aufgaben-service/src/main/webapp/META-INF/hibernate.cfg.xml @@ -0,0 +1,13 @@ + + + + + + org.hibernate.dialect.MySQLDialect + + + validate + + \ No newline at end of file diff --git a/aufgaben-service/src/main/webapp/META-INF/persistence.xml b/aufgaben-service/src/main/webapp/META-INF/persistence.xml new file mode 100644 index 0000000..6872b3c --- /dev/null +++ b/aufgaben-service/src/main/webapp/META-INF/persistence.xml @@ -0,0 +1,18 @@ + + + + + org.hibernate.ejb.HibernatePersistence + java:/Aufgaben + + + + + + \ No newline at end of file diff --git a/aufgaben-service/src/main/webapp/WEB-INF/web.xml b/aufgaben-service/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..afa4e62 --- /dev/null +++ b/aufgaben-service/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/aufgaben-service/src/main/webapp/index.html b/aufgaben-service/src/main/webapp/index.html new file mode 100644 index 0000000..f8a3eed --- /dev/null +++ b/aufgaben-service/src/main/webapp/index.html @@ -0,0 +1 @@ +

Was machst du hier?

\ No newline at end of file diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..e6c624a --- /dev/null +++ b/build.gradle @@ -0,0 +1,7 @@ +plugins { + id 'eclipse' +} + +subprojects { subProject -> + apply plugin: 'eclipse' +} \ No newline at end of file diff --git a/conf/wildfly/standalone-full.xml b/conf/wildfly/standalone-full.xml new file mode 100644 index 0000000..6fb5f0b --- /dev/null +++ b/conf/wildfly/standalone-full.xml @@ -0,0 +1,653 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=${wildfly.h2.compatibility.mode:REGULAR} + h2 + + sa + sa + + + + jdbc:mysql://localhost:3306/registration + com.mysql.cj.jdbc.Driver + mysql + + xxxuser + knall666.Halla + + + + true + + + + + jdbc:mysql://localhost:3306/User + com.mysql.cj.jdbc.Driver + mysql + + xxxuser + knall666.Halla + + + + true + + + + + jdbc:mysql://localhost:3306/Aufgaben + com.mysql.cj.jdbc.Driver + mysql + + xxxuser + knall666.Halla + + + + true + + + + + jdbc:mysql://localhost:3306/Session + com.mysql.cj.jdbc.Driver + mysql + + xxxuser + knall666.Halla + + + + true + + + + + + org.h2.jdbcx.JdbcDataSource + + + com.mysql.cj.jdbc.MysqlXADataSource + + + + + + + + + + + + + + + + + + + + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + kafka-rar-1.0.0.rar + + XATransaction + + + + 1 + 20 + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${jboss.bind.address:127.0.0.1} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/framework/.classpath b/framework/.classpath new file mode 100644 index 0000000..b647cb9 --- /dev/null +++ b/framework/.classpath @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/framework/.project b/framework/.project new file mode 100644 index 0000000..7261ba7 --- /dev/null +++ b/framework/.project @@ -0,0 +1,22 @@ + + + framework + + + + org.eclipse.jdt.core.javanature + org.eclipse.buildship.core.gradleprojectnature + + + + org.eclipse.jdt.core.javabuilder + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + + diff --git a/framework/.settings/org.eclipse.buildship.core.prefs b/framework/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..a7b84d9 --- /dev/null +++ b/framework/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,2 @@ +connection.project.dir=.. +eclipse.preferences.version=1 diff --git a/framework/.settings/org.eclipse.jdt.core.prefs b/framework/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..5c96052 --- /dev/null +++ b/framework/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,13 @@ +# +#Sat Apr 01 12:17:22 CEST 2023 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.source=17 +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.debug.sourceFile=generate diff --git a/framework/.settings/org.eclipse.wst.common.component b/framework/.settings/org.eclipse.wst.common.component new file mode 100644 index 0000000..a7e764e --- /dev/null +++ b/framework/.settings/org.eclipse.wst.common.component @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/.settings/org.eclipse.wst.common.project.facet.core.xml b/framework/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 0000000..2b28d58 --- /dev/null +++ b/framework/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/bin/main/de/oaa/xxx/framework/AbstractDAO.class b/framework/bin/main/de/oaa/xxx/framework/AbstractDAO.class new file mode 100644 index 0000000..f9859d9 Binary files /dev/null and b/framework/bin/main/de/oaa/xxx/framework/AbstractDAO.class differ diff --git a/framework/bin/main/de/oaa/xxx/framework/XXXEntity.class b/framework/bin/main/de/oaa/xxx/framework/XXXEntity.class new file mode 100644 index 0000000..f519070 Binary files /dev/null and b/framework/bin/main/de/oaa/xxx/framework/XXXEntity.class differ diff --git a/framework/bin/main/de/oaa/xxx/framework/request/NotAuthorizedException.class b/framework/bin/main/de/oaa/xxx/framework/request/NotAuthorizedException.class new file mode 100644 index 0000000..4028d7b Binary files /dev/null and b/framework/bin/main/de/oaa/xxx/framework/request/NotAuthorizedException.class differ diff --git a/framework/bin/main/de/oaa/xxx/framework/request/RequestChecker.class b/framework/bin/main/de/oaa/xxx/framework/request/RequestChecker.class new file mode 100644 index 0000000..7097b1a Binary files /dev/null and b/framework/bin/main/de/oaa/xxx/framework/request/RequestChecker.class differ diff --git a/framework/bin/main/de/oaa/xxx/framework/request/User.class b/framework/bin/main/de/oaa/xxx/framework/request/User.class new file mode 100644 index 0000000..6f67a82 Binary files /dev/null and b/framework/bin/main/de/oaa/xxx/framework/request/User.class differ diff --git a/framework/build.gradle b/framework/build.gradle new file mode 100644 index 0000000..22671b0 --- /dev/null +++ b/framework/build.gradle @@ -0,0 +1,25 @@ +plugins { + id 'java' +} + +repositories { + mavenCentral() +} + +dependencies { + compileOnly 'jakarta.platform:jakarta.jakartaee-web-api:9.0.0' + compileOnly 'jakarta.persistence:jakarta.persistence-api:3.1.0' + compileOnly 'jakarta.resource:jakarta.resource-api:2.1.0' + + compileOnly 'org.jboss.ejb3:jboss-ejb3-ext-api:2.3.0.Final' + + compileOnly 'org.apache.logging.log4j:log4j-slf4j-impl:2.20.0' + + compileOnly 'org.apache.logging.log4j:log4j-slf4j-impl:2.20.0' + + testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1' +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/framework/build/classes/java/main/de/oaa/xxx/framework/AbstractDAO.class b/framework/build/classes/java/main/de/oaa/xxx/framework/AbstractDAO.class new file mode 100644 index 0000000..b6463fb Binary files /dev/null and b/framework/build/classes/java/main/de/oaa/xxx/framework/AbstractDAO.class differ diff --git a/framework/build/classes/java/main/de/oaa/xxx/framework/XXXEntity.class b/framework/build/classes/java/main/de/oaa/xxx/framework/XXXEntity.class new file mode 100644 index 0000000..f519070 Binary files /dev/null and b/framework/build/classes/java/main/de/oaa/xxx/framework/XXXEntity.class differ diff --git a/framework/build/classes/java/main/de/oaa/xxx/framework/request/NotAuthorizedException.class b/framework/build/classes/java/main/de/oaa/xxx/framework/request/NotAuthorizedException.class new file mode 100644 index 0000000..738d40f Binary files /dev/null and b/framework/build/classes/java/main/de/oaa/xxx/framework/request/NotAuthorizedException.class differ diff --git a/framework/build/classes/java/main/de/oaa/xxx/framework/request/RequestChecker.class b/framework/build/classes/java/main/de/oaa/xxx/framework/request/RequestChecker.class new file mode 100644 index 0000000..f229312 Binary files /dev/null and b/framework/build/classes/java/main/de/oaa/xxx/framework/request/RequestChecker.class differ diff --git a/framework/build/classes/java/main/de/oaa/xxx/framework/request/User.class b/framework/build/classes/java/main/de/oaa/xxx/framework/request/User.class new file mode 100644 index 0000000..0d96cbf Binary files /dev/null and b/framework/build/classes/java/main/de/oaa/xxx/framework/request/User.class differ diff --git a/framework/build/libs/framework.jar b/framework/build/libs/framework.jar new file mode 100644 index 0000000..82dfb9c Binary files /dev/null and b/framework/build/libs/framework.jar differ diff --git a/framework/build/tmp/compileJava/previous-compilation-data.bin b/framework/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000..225462a Binary files /dev/null and b/framework/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/framework/build/tmp/jar/MANIFEST.MF b/framework/build/tmp/jar/MANIFEST.MF new file mode 100644 index 0000000..58630c0 --- /dev/null +++ b/framework/build/tmp/jar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/framework/src/main/java/de/oaa/xxx/framework/AbstractDAO.java b/framework/src/main/java/de/oaa/xxx/framework/AbstractDAO.java new file mode 100644 index 0000000..d8acdb4 --- /dev/null +++ b/framework/src/main/java/de/oaa/xxx/framework/AbstractDAO.java @@ -0,0 +1,68 @@ +package de.oaa.xxx.framework; + +import java.util.Collections; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import jakarta.persistence.EntityManager; + +public abstract class AbstractDAO { + + private Logger LOGGER = LoggerFactory.getLogger(getClass()); + private Class entityClass; + private EntityManager entityManager; + + public AbstractDAO(Class entityClass, EntityManager entityManager) { + this.entityClass = entityClass; + this.entityManager = entityManager; + } + + public void update(T toUpdate) { + try { + getEntityManager().merge(toUpdate); + } catch (Exception e) { + LOGGER.error(e.getMessage(), e); + } + } + + public void persist(T toPersist) { + try { + LOGGER.info("Persisting Entity " + toPersist); + getEntityManager().persist(toPersist); + } catch (Exception e) { + LOGGER.error(e.getMessage(), e); + } + } + + public void remove(T toRemove) { + try { + getEntityManager().remove(toRemove); + } catch (Exception e) { + LOGGER.error(e.getMessage(), e); + } + } + + public T findById(Object id) { + try { + return getEntityManager().find(entityClass, id); + } catch (Exception e) { + LOGGER.error(e.getMessage(), e); + return null; + } + } + + public List list() { + try { + return getEntityManager().createQuery("select e from " + entityClass.getSimpleName() + " e", entityClass).getResultList(); + } catch (Exception e) { + LOGGER.error(e.getMessage(), e); + return Collections.emptyList(); + } + } + + protected EntityManager getEntityManager() { + return entityManager; + } +} diff --git a/framework/src/main/java/de/oaa/xxx/framework/XXXEntity.java b/framework/src/main/java/de/oaa/xxx/framework/XXXEntity.java new file mode 100644 index 0000000..caaba07 --- /dev/null +++ b/framework/src/main/java/de/oaa/xxx/framework/XXXEntity.java @@ -0,0 +1,5 @@ +package de.oaa.xxx.framework; + +public interface XXXEntity { + +} diff --git a/framework/src/main/java/de/oaa/xxx/framework/request/NotAuthorizedException.java b/framework/src/main/java/de/oaa/xxx/framework/request/NotAuthorizedException.java new file mode 100644 index 0000000..0abfa56 --- /dev/null +++ b/framework/src/main/java/de/oaa/xxx/framework/request/NotAuthorizedException.java @@ -0,0 +1,10 @@ +package de.oaa.xxx.framework.request; + +public class NotAuthorizedException extends Exception { + + private static final long serialVersionUID = 1L; + + NotAuthorizedException(String text) { + super(text); + } +} diff --git a/framework/src/main/java/de/oaa/xxx/framework/request/RequestChecker.java b/framework/src/main/java/de/oaa/xxx/framework/request/RequestChecker.java new file mode 100644 index 0000000..57dd77f --- /dev/null +++ b/framework/src/main/java/de/oaa/xxx/framework/request/RequestChecker.java @@ -0,0 +1,32 @@ +package de.oaa.xxx.framework.request; + +import java.net.URI; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.client.Client; +import jakarta.ws.rs.client.ClientBuilder; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.Status; + +public class RequestChecker { + + public static User checkRequest(HttpServletRequest request) throws NotAuthorizedException { + String token = request.getHeader("token"); + if (token == null) { + throw new NotAuthorizedException("Kein Token im Header"); + } + Client clientPost = ClientBuilder.newClient(); + Response response = + clientPost.target("http://localhost:8080/user-service/login/") + .queryParam("token", token).request().build("POST").invoke(); + if (response == null || Status.CREATED.getStatusCode() != response.getStatus()) { + throw new NotAuthorizedException("Token konnte nicht validiert werden."); + } + URI uri = response.getLocation(); + clientPost.close(); + Client clientGet = ClientBuilder.newClient(); + User result = clientGet.target(uri).request().get(User.class); + clientGet.close(); + return result; + } +} diff --git a/framework/src/main/java/de/oaa/xxx/framework/request/User.java b/framework/src/main/java/de/oaa/xxx/framework/request/User.java new file mode 100644 index 0000000..12cb7d9 --- /dev/null +++ b/framework/src/main/java/de/oaa/xxx/framework/request/User.java @@ -0,0 +1,43 @@ +package de.oaa.xxx.framework.request; + +import java.util.UUID; + +public class User { + + private UUID userId; + private String name; + private String email; + private String password; + + public UUID getUserId() { + return userId; + } + + public void setUserId(UUID userId) { + this.userId = userId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..41d9927 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..aa991fc --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..1b6c787 --- /dev/null +++ b/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..ac1b06f --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/localdeploy/.project b/localdeploy/.project new file mode 100644 index 0000000..2742227 --- /dev/null +++ b/localdeploy/.project @@ -0,0 +1,17 @@ + + + localdeploy + + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + + org.eclipse.buildship.core.gradleprojectnature + + diff --git a/localdeploy/.settings/org.eclipse.buildship.core.prefs b/localdeploy/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..a7b84d9 --- /dev/null +++ b/localdeploy/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,2 @@ +connection.project.dir=.. +eclipse.preferences.version=1 diff --git a/localdeploy/build.gradle b/localdeploy/build.gradle new file mode 100644 index 0000000..fe4e782 --- /dev/null +++ b/localdeploy/build.gradle @@ -0,0 +1 @@ +apply from: "localdeploy.gradle" \ No newline at end of file diff --git a/localdeploy/localdeploy.bat b/localdeploy/localdeploy.bat new file mode 100644 index 0000000..7808f0e --- /dev/null +++ b/localdeploy/localdeploy.bat @@ -0,0 +1 @@ +call gradlew localdeploy:deploy \ No newline at end of file diff --git a/localdeploy/localdeploy.gradle b/localdeploy/localdeploy.gradle new file mode 100644 index 0000000..01fe209 --- /dev/null +++ b/localdeploy/localdeploy.gradle @@ -0,0 +1,28 @@ +def wildflyHome = project.hasProperty('wildflyHome') ? project.getProperty('wildflyHome') : (System.getenv('JBOSS_HOME') != null ? System.getenv('JBOSS_HOME').replaceAll('\\\\', '/') : '') + +ext { + println wildflyHome +} + +configurations { + deploy +} + +dependencies { + deploy project(path: ":aufgaben-service", configuration: 'archives') + deploy project(path: ":mail-service", configuration: 'archives') + deploy project(path: ":registration-service", configuration: 'archives') + deploy project(path: ":session-service", configuration: 'archives') + deploy project(path: ":user-service", configuration: 'archives') +} + +task clearDeploymentFolder { + doFirst { + delete wildflyHome + '/standalone/deployments/' + } +} + +task deploy(dependsOn:['clearDeploymentFolder'], type: Copy) { + from configurations.deploy + into wildflyHome + '/standalone/deployments' +} \ No newline at end of file diff --git a/localdeploy/standalone/deployments/aufgaben-service.war b/localdeploy/standalone/deployments/aufgaben-service.war new file mode 100644 index 0000000..b03b8ac Binary files /dev/null and b/localdeploy/standalone/deployments/aufgaben-service.war differ diff --git a/localdeploy/standalone/deployments/mail-service.war b/localdeploy/standalone/deployments/mail-service.war new file mode 100644 index 0000000..af10b0d Binary files /dev/null and b/localdeploy/standalone/deployments/mail-service.war differ diff --git a/localdeploy/standalone/deployments/registration-service.war b/localdeploy/standalone/deployments/registration-service.war new file mode 100644 index 0000000..723b4db Binary files /dev/null and b/localdeploy/standalone/deployments/registration-service.war differ diff --git a/localdeploy/standalone/deployments/session-service.war b/localdeploy/standalone/deployments/session-service.war new file mode 100644 index 0000000..13858c9 Binary files /dev/null and b/localdeploy/standalone/deployments/session-service.war differ diff --git a/localdeploy/standalone/deployments/user-service.war b/localdeploy/standalone/deployments/user-service.war new file mode 100644 index 0000000..c46107e Binary files /dev/null and b/localdeploy/standalone/deployments/user-service.war differ diff --git a/mail-service/.classpath b/mail-service/.classpath new file mode 100644 index 0000000..185a46b --- /dev/null +++ b/mail-service/.classpath @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mail-service/.project b/mail-service/.project new file mode 100644 index 0000000..51b23e2 --- /dev/null +++ b/mail-service/.project @@ -0,0 +1,33 @@ + + + mail-service + + + + org.eclipse.jdt.core.javanature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.buildship.core.gradleprojectnature + + + + org.eclipse.jdt.core.javabuilder + + + + org.eclipse.wst.common.project.facet.core.builder + + + + org.eclipse.wst.validation.validationbuilder + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + + diff --git a/mail-service/.settings/org.eclipse.buildship.core.prefs b/mail-service/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..a7b84d9 --- /dev/null +++ b/mail-service/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,2 @@ +connection.project.dir=.. +eclipse.preferences.version=1 diff --git a/mail-service/.settings/org.eclipse.jdt.core.prefs b/mail-service/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..5c96052 --- /dev/null +++ b/mail-service/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,13 @@ +# +#Sat Apr 01 12:17:22 CEST 2023 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.source=17 +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.debug.sourceFile=generate diff --git a/mail-service/.settings/org.eclipse.wst.common.component b/mail-service/.settings/org.eclipse.wst.common.component new file mode 100644 index 0000000..dd346a4 --- /dev/null +++ b/mail-service/.settings/org.eclipse.wst.common.component @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/mail-service/.settings/org.eclipse.wst.common.project.facet.core.xml b/mail-service/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 0000000..2b28d58 --- /dev/null +++ b/mail-service/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/mail-service/bin/main/META-INF/hibernate.cfg.xml b/mail-service/bin/main/META-INF/hibernate.cfg.xml new file mode 100644 index 0000000..315bcff --- /dev/null +++ b/mail-service/bin/main/META-INF/hibernate.cfg.xml @@ -0,0 +1,13 @@ + + + + + + org.hibernate.dialect.MySQLDialect + + + validate + + \ No newline at end of file diff --git a/mail-service/bin/main/META-INF/persistence.xml b/mail-service/bin/main/META-INF/persistence.xml new file mode 100644 index 0000000..4be4530 --- /dev/null +++ b/mail-service/bin/main/META-INF/persistence.xml @@ -0,0 +1,20 @@ + + + + + org.hibernate.ejb.HibernatePersistence + java:/User + + + + + + \ No newline at end of file diff --git a/mail-service/bin/main/WEB-INF/web.xml b/mail-service/bin/main/WEB-INF/web.xml new file mode 100644 index 0000000..afa4e62 --- /dev/null +++ b/mail-service/bin/main/WEB-INF/web.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/mail-service/bin/main/de/oaa/xxx/mail/Email.class b/mail-service/bin/main/de/oaa/xxx/mail/Email.class new file mode 100644 index 0000000..dcbdb6b Binary files /dev/null and b/mail-service/bin/main/de/oaa/xxx/mail/Email.class differ diff --git a/mail-service/bin/main/de/oaa/xxx/mail/EmailApplication.class b/mail-service/bin/main/de/oaa/xxx/mail/EmailApplication.class new file mode 100644 index 0000000..2e46249 Binary files /dev/null and b/mail-service/bin/main/de/oaa/xxx/mail/EmailApplication.class differ diff --git a/mail-service/bin/main/de/oaa/xxx/mail/EmailSenden.class b/mail-service/bin/main/de/oaa/xxx/mail/EmailSenden.class new file mode 100644 index 0000000..a74cee2 Binary files /dev/null and b/mail-service/bin/main/de/oaa/xxx/mail/EmailSenden.class differ diff --git a/mail-service/bin/main/de/oaa/xxx/mail/RegistrationMailTemplate.html b/mail-service/bin/main/de/oaa/xxx/mail/RegistrationMailTemplate.html new file mode 100644 index 0000000..8669b7e --- /dev/null +++ b/mail-service/bin/main/de/oaa/xxx/mail/RegistrationMailTemplate.html @@ -0,0 +1,6 @@ + +

Moin %USER%

+

Vielen Dank für deine Anmeldung bei XXX-The Game!

+

Klicke hier um deine E-Mail-Adresse zu bestätigen.

+

Und nun viel Spass beim Spiel!

+ \ No newline at end of file diff --git a/mail-service/bin/main/index.html b/mail-service/bin/main/index.html new file mode 100644 index 0000000..f8a3eed --- /dev/null +++ b/mail-service/bin/main/index.html @@ -0,0 +1 @@ +

Was machst du hier?

\ No newline at end of file diff --git a/mail-service/bin/main/log4j2.xml b/mail-service/bin/main/log4j2.xml new file mode 100644 index 0000000..f2e539a --- /dev/null +++ b/mail-service/bin/main/log4j2.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/mail-service/build.gradle b/mail-service/build.gradle new file mode 100644 index 0000000..36c724d --- /dev/null +++ b/mail-service/build.gradle @@ -0,0 +1,38 @@ +plugins { + id 'java' + id 'war' +} + +repositories { + mavenCentral() +} + +sourceSets { + main { + java { + srcDir 'src/main/java' + } + resources { + srcDir 'src/main/webapp' +// srcDir 'src/main/resources' + } + } +} + +dependencies { + compileOnly 'jakarta.platform:jakarta.jakartaee-web-api:9.0.0' + compileOnly 'jakarta.persistence:jakarta.persistence-api:3.1.0' + compileOnly 'jakarta.resource:jakarta.resource-api:2.1.0' + + compileOnly 'org.jboss.ejb3:jboss-ejb3-ext-api:2.3.0.Final' + + compileOnly 'jakarta.mail:jakarta.mail-api:2.1.1' + + compileOnly 'org.apache.logging.log4j:log4j-slf4j-impl:2.20.0' + + testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1' +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/mail-service/build/classes/java/main/de/oaa/xxx/mail/Email.class b/mail-service/build/classes/java/main/de/oaa/xxx/mail/Email.class new file mode 100644 index 0000000..0df881c Binary files /dev/null and b/mail-service/build/classes/java/main/de/oaa/xxx/mail/Email.class differ diff --git a/mail-service/build/classes/java/main/de/oaa/xxx/mail/EmailApplication.class b/mail-service/build/classes/java/main/de/oaa/xxx/mail/EmailApplication.class new file mode 100644 index 0000000..b60e845 Binary files /dev/null and b/mail-service/build/classes/java/main/de/oaa/xxx/mail/EmailApplication.class differ diff --git a/mail-service/build/classes/java/main/de/oaa/xxx/mail/EmailSenden.class b/mail-service/build/classes/java/main/de/oaa/xxx/mail/EmailSenden.class new file mode 100644 index 0000000..fdca51d Binary files /dev/null and b/mail-service/build/classes/java/main/de/oaa/xxx/mail/EmailSenden.class differ diff --git a/mail-service/build/libs/mail-service.war b/mail-service/build/libs/mail-service.war new file mode 100644 index 0000000..25cccaf Binary files /dev/null and b/mail-service/build/libs/mail-service.war differ diff --git a/mail-service/build/resources/main/META-INF/hibernate.cfg.xml b/mail-service/build/resources/main/META-INF/hibernate.cfg.xml new file mode 100644 index 0000000..315bcff --- /dev/null +++ b/mail-service/build/resources/main/META-INF/hibernate.cfg.xml @@ -0,0 +1,13 @@ + + + + + + org.hibernate.dialect.MySQLDialect + + + validate + + \ No newline at end of file diff --git a/mail-service/build/resources/main/META-INF/persistence.xml b/mail-service/build/resources/main/META-INF/persistence.xml new file mode 100644 index 0000000..4be4530 --- /dev/null +++ b/mail-service/build/resources/main/META-INF/persistence.xml @@ -0,0 +1,20 @@ + + + + + org.hibernate.ejb.HibernatePersistence + java:/User + + + + + + \ No newline at end of file diff --git a/mail-service/build/resources/main/WEB-INF/web.xml b/mail-service/build/resources/main/WEB-INF/web.xml new file mode 100644 index 0000000..afa4e62 --- /dev/null +++ b/mail-service/build/resources/main/WEB-INF/web.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/mail-service/build/resources/main/de/oaa/xxx/mail/RegistrationMailTemplate.html b/mail-service/build/resources/main/de/oaa/xxx/mail/RegistrationMailTemplate.html new file mode 100644 index 0000000..8669b7e --- /dev/null +++ b/mail-service/build/resources/main/de/oaa/xxx/mail/RegistrationMailTemplate.html @@ -0,0 +1,6 @@ + +

Moin %USER%

+

Vielen Dank für deine Anmeldung bei XXX-The Game!

+

Klicke hier um deine E-Mail-Adresse zu bestätigen.

+

Und nun viel Spass beim Spiel!

+ \ No newline at end of file diff --git a/mail-service/build/resources/main/index.html b/mail-service/build/resources/main/index.html new file mode 100644 index 0000000..f8a3eed --- /dev/null +++ b/mail-service/build/resources/main/index.html @@ -0,0 +1 @@ +

Was machst du hier?

\ No newline at end of file diff --git a/mail-service/build/resources/main/log4j2.xml b/mail-service/build/resources/main/log4j2.xml new file mode 100644 index 0000000..f2e539a --- /dev/null +++ b/mail-service/build/resources/main/log4j2.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/mail-service/build/tmp/compileJava/previous-compilation-data.bin b/mail-service/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000..c14b2d8 Binary files /dev/null and b/mail-service/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/mail-service/build/tmp/war/MANIFEST.MF b/mail-service/build/tmp/war/MANIFEST.MF new file mode 100644 index 0000000..58630c0 --- /dev/null +++ b/mail-service/build/tmp/war/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/mail-service/src/main/java/de/oaa/xxx/mail/Email.java b/mail-service/src/main/java/de/oaa/xxx/mail/Email.java new file mode 100644 index 0000000..27acfde --- /dev/null +++ b/mail-service/src/main/java/de/oaa/xxx/mail/Email.java @@ -0,0 +1,33 @@ +package de.oaa.xxx.mail; + +public class Email { + + private String emailAdresse; + private String titel; + private String text; + + public String getEmailAdresse() { + return emailAdresse; + } + + public void setEmailAdresse(String emailAdresse) { + this.emailAdresse = emailAdresse; + } + + public String getTitel() { + return titel; + } + + public void setTitel(String titel) { + this.titel = titel; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + +} diff --git a/mail-service/src/main/java/de/oaa/xxx/mail/EmailApplication.java b/mail-service/src/main/java/de/oaa/xxx/mail/EmailApplication.java new file mode 100644 index 0000000..36c34bb --- /dev/null +++ b/mail-service/src/main/java/de/oaa/xxx/mail/EmailApplication.java @@ -0,0 +1,9 @@ +package de.oaa.xxx.mail; + +import jakarta.ws.rs.ApplicationPath; +import jakarta.ws.rs.core.Application; + +@ApplicationPath("/") +public class EmailApplication extends Application{ + +} diff --git a/mail-service/src/main/java/de/oaa/xxx/mail/EmailSenden.java b/mail-service/src/main/java/de/oaa/xxx/mail/EmailSenden.java new file mode 100644 index 0000000..92d4a25 --- /dev/null +++ b/mail-service/src/main/java/de/oaa/xxx/mail/EmailSenden.java @@ -0,0 +1,45 @@ +package de.oaa.xxx.mail; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import jakarta.annotation.Resource; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.mail.Message; +import jakarta.mail.MessagingException; +import jakarta.mail.Transport; +import jakarta.mail.internet.InternetAddress; +import jakarta.mail.internet.MimeMessage; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; + +@ApplicationScoped +@Path("send") +public class EmailSenden { + + @Resource(name = "java:jboss/mail/xxx") + private jakarta.mail.Session session; + + private static final Logger LOGGER = LoggerFactory.getLogger(EmailSenden.class); + + @POST + @Consumes(MediaType.APPLICATION_JSON) + public Response sendEmail(Email email) { + try { + final Message message = new MimeMessage(session); + message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(email.getEmailAdresse())); + message.setSubject(email.getTitel()); + message.setFrom(InternetAddress.parse("noreply@xxx-bdsmgame.de")[0]); + message.setContent(email.getText(), "text/html; charset=utf-8"); + Transport.send(message); + return Response.ok().build(); + } catch (MessagingException e) { + LOGGER.error(e.getLocalizedMessage(), e); + return Response.serverError().build(); + } + } + +} diff --git a/mail-service/src/main/resources/de/oaa/xxx/mail/RegistrationMailTemplate.html b/mail-service/src/main/resources/de/oaa/xxx/mail/RegistrationMailTemplate.html new file mode 100644 index 0000000..8669b7e --- /dev/null +++ b/mail-service/src/main/resources/de/oaa/xxx/mail/RegistrationMailTemplate.html @@ -0,0 +1,6 @@ + +

Moin %USER%

+

Vielen Dank für deine Anmeldung bei XXX-The Game!

+

Klicke hier um deine E-Mail-Adresse zu bestätigen.

+

Und nun viel Spass beim Spiel!

+ \ No newline at end of file diff --git a/mail-service/src/main/resources/log4j2.xml b/mail-service/src/main/resources/log4j2.xml new file mode 100644 index 0000000..f2e539a --- /dev/null +++ b/mail-service/src/main/resources/log4j2.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/mail-service/src/main/webapp/META-INF/hibernate.cfg.xml b/mail-service/src/main/webapp/META-INF/hibernate.cfg.xml new file mode 100644 index 0000000..315bcff --- /dev/null +++ b/mail-service/src/main/webapp/META-INF/hibernate.cfg.xml @@ -0,0 +1,13 @@ + + + + + + org.hibernate.dialect.MySQLDialect + + + validate + + \ No newline at end of file diff --git a/mail-service/src/main/webapp/META-INF/persistence.xml b/mail-service/src/main/webapp/META-INF/persistence.xml new file mode 100644 index 0000000..4be4530 --- /dev/null +++ b/mail-service/src/main/webapp/META-INF/persistence.xml @@ -0,0 +1,20 @@ + + + + + org.hibernate.ejb.HibernatePersistence + java:/User + + + + + + \ No newline at end of file diff --git a/mail-service/src/main/webapp/WEB-INF/web.xml b/mail-service/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..afa4e62 --- /dev/null +++ b/mail-service/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/mail-service/src/main/webapp/index.html b/mail-service/src/main/webapp/index.html new file mode 100644 index 0000000..f8a3eed --- /dev/null +++ b/mail-service/src/main/webapp/index.html @@ -0,0 +1 @@ +

Was machst du hier?

\ No newline at end of file diff --git a/registration-service/.classpath b/registration-service/.classpath new file mode 100644 index 0000000..185a46b --- /dev/null +++ b/registration-service/.classpath @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/registration-service/.project b/registration-service/.project new file mode 100644 index 0000000..4960907 --- /dev/null +++ b/registration-service/.project @@ -0,0 +1,33 @@ + + + registration-service + + + + org.eclipse.jdt.core.javanature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.buildship.core.gradleprojectnature + + + + org.eclipse.jdt.core.javabuilder + + + + org.eclipse.wst.common.project.facet.core.builder + + + + org.eclipse.wst.validation.validationbuilder + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + + diff --git a/registration-service/.settings/org.eclipse.buildship.core.prefs b/registration-service/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..a7b84d9 --- /dev/null +++ b/registration-service/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,2 @@ +connection.project.dir=.. +eclipse.preferences.version=1 diff --git a/registration-service/.settings/org.eclipse.jdt.core.prefs b/registration-service/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..5c96052 --- /dev/null +++ b/registration-service/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,13 @@ +# +#Sat Apr 01 12:17:22 CEST 2023 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.source=17 +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.debug.sourceFile=generate diff --git a/registration-service/.settings/org.eclipse.wst.common.component b/registration-service/.settings/org.eclipse.wst.common.component new file mode 100644 index 0000000..fd98b57 --- /dev/null +++ b/registration-service/.settings/org.eclipse.wst.common.component @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/registration-service/.settings/org.eclipse.wst.common.project.facet.core.xml b/registration-service/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 0000000..2b28d58 --- /dev/null +++ b/registration-service/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/registration-service/bin/main/META-INF/hibernate.cfg.xml b/registration-service/bin/main/META-INF/hibernate.cfg.xml new file mode 100644 index 0000000..315bcff --- /dev/null +++ b/registration-service/bin/main/META-INF/hibernate.cfg.xml @@ -0,0 +1,13 @@ + + + + + + org.hibernate.dialect.MySQLDialect + + + validate + + \ No newline at end of file diff --git a/registration-service/bin/main/META-INF/persistence.xml b/registration-service/bin/main/META-INF/persistence.xml new file mode 100644 index 0000000..30b02af --- /dev/null +++ b/registration-service/bin/main/META-INF/persistence.xml @@ -0,0 +1,20 @@ + + + + + org.hibernate.ejb.HibernatePersistence + java:/Registration + + + + + + \ No newline at end of file diff --git a/registration-service/bin/main/WEB-INF/web.xml b/registration-service/bin/main/WEB-INF/web.xml new file mode 100644 index 0000000..afa4e62 --- /dev/null +++ b/registration-service/bin/main/WEB-INF/web.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/registration-service/bin/main/activation.html b/registration-service/bin/main/activation.html new file mode 100644 index 0000000..0498f4d --- /dev/null +++ b/registration-service/bin/main/activation.html @@ -0,0 +1 @@ +

Registrierung erfolgreich abgeschlossen

\ No newline at end of file diff --git a/registration-service/bin/main/de/oaa/xxx/registration/ActivationResource.class b/registration-service/bin/main/de/oaa/xxx/registration/ActivationResource.class new file mode 100644 index 0000000..92a9710 Binary files /dev/null and b/registration-service/bin/main/de/oaa/xxx/registration/ActivationResource.class differ diff --git a/registration-service/bin/main/de/oaa/xxx/registration/Email.class b/registration-service/bin/main/de/oaa/xxx/registration/Email.class new file mode 100644 index 0000000..9264678 Binary files /dev/null and b/registration-service/bin/main/de/oaa/xxx/registration/Email.class differ diff --git a/registration-service/bin/main/de/oaa/xxx/registration/PingResource.class b/registration-service/bin/main/de/oaa/xxx/registration/PingResource.class new file mode 100644 index 0000000..2b92a3b Binary files /dev/null and b/registration-service/bin/main/de/oaa/xxx/registration/PingResource.class differ diff --git a/registration-service/bin/main/de/oaa/xxx/registration/Registration.class b/registration-service/bin/main/de/oaa/xxx/registration/Registration.class new file mode 100644 index 0000000..e09d933 Binary files /dev/null and b/registration-service/bin/main/de/oaa/xxx/registration/Registration.class differ diff --git a/registration-service/bin/main/de/oaa/xxx/registration/RegistrationApplication.class b/registration-service/bin/main/de/oaa/xxx/registration/RegistrationApplication.class new file mode 100644 index 0000000..0fe41f8 Binary files /dev/null and b/registration-service/bin/main/de/oaa/xxx/registration/RegistrationApplication.class differ diff --git a/registration-service/bin/main/de/oaa/xxx/registration/RegistrationDAO.class b/registration-service/bin/main/de/oaa/xxx/registration/RegistrationDAO.class new file mode 100644 index 0000000..2a3e8a0 Binary files /dev/null and b/registration-service/bin/main/de/oaa/xxx/registration/RegistrationDAO.class differ diff --git a/registration-service/bin/main/de/oaa/xxx/registration/RegistrationEntity.class b/registration-service/bin/main/de/oaa/xxx/registration/RegistrationEntity.class new file mode 100644 index 0000000..df012b4 Binary files /dev/null and b/registration-service/bin/main/de/oaa/xxx/registration/RegistrationEntity.class differ diff --git a/registration-service/bin/main/de/oaa/xxx/registration/RegistrationResource.class b/registration-service/bin/main/de/oaa/xxx/registration/RegistrationResource.class new file mode 100644 index 0000000..1e7da19 Binary files /dev/null and b/registration-service/bin/main/de/oaa/xxx/registration/RegistrationResource.class differ diff --git a/registration-service/bin/main/index.html b/registration-service/bin/main/index.html new file mode 100644 index 0000000..f8a3eed --- /dev/null +++ b/registration-service/bin/main/index.html @@ -0,0 +1 @@ +

Was machst du hier?

\ No newline at end of file diff --git a/registration-service/bin/main/log4j2.xml b/registration-service/bin/main/log4j2.xml new file mode 100644 index 0000000..f2e539a --- /dev/null +++ b/registration-service/bin/main/log4j2.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/registration-service/build.gradle b/registration-service/build.gradle new file mode 100644 index 0000000..a59d389 --- /dev/null +++ b/registration-service/build.gradle @@ -0,0 +1,36 @@ +plugins { + id 'java' + id 'war' +} + +repositories { + mavenCentral() +} + +sourceSets { + main { + java { + srcDir 'src/main/java' + } + resources { + srcDir 'src/main/webapp' +// srcDir 'src/main/resources' + } + } +} + +dependencies { + compileOnly 'jakarta.platform:jakarta.jakartaee-web-api:9.0.0' + compileOnly 'jakarta.persistence:jakarta.persistence-api:3.1.0' + compileOnly 'jakarta.resource:jakarta.resource-api:2.1.0' + + compileOnly 'org.jboss.ejb3:jboss-ejb3-ext-api:2.3.0.Final' + + compileOnly 'org.apache.logging.log4j:log4j-slf4j-impl:2.20.0' + + testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1' +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/registration-service/build/classes/java/main/de/oaa/xxx/registration/ActivationResource.class b/registration-service/build/classes/java/main/de/oaa/xxx/registration/ActivationResource.class new file mode 100644 index 0000000..0fe80e6 Binary files /dev/null and b/registration-service/build/classes/java/main/de/oaa/xxx/registration/ActivationResource.class differ diff --git a/registration-service/build/classes/java/main/de/oaa/xxx/registration/Email.class b/registration-service/build/classes/java/main/de/oaa/xxx/registration/Email.class new file mode 100644 index 0000000..0381ede Binary files /dev/null and b/registration-service/build/classes/java/main/de/oaa/xxx/registration/Email.class differ diff --git a/registration-service/build/classes/java/main/de/oaa/xxx/registration/PingResource.class b/registration-service/build/classes/java/main/de/oaa/xxx/registration/PingResource.class new file mode 100644 index 0000000..4ec790e Binary files /dev/null and b/registration-service/build/classes/java/main/de/oaa/xxx/registration/PingResource.class differ diff --git a/registration-service/build/classes/java/main/de/oaa/xxx/registration/Registration.class b/registration-service/build/classes/java/main/de/oaa/xxx/registration/Registration.class new file mode 100644 index 0000000..8d31286 Binary files /dev/null and b/registration-service/build/classes/java/main/de/oaa/xxx/registration/Registration.class differ diff --git a/registration-service/build/classes/java/main/de/oaa/xxx/registration/RegistrationApplication.class b/registration-service/build/classes/java/main/de/oaa/xxx/registration/RegistrationApplication.class new file mode 100644 index 0000000..7268241 Binary files /dev/null and b/registration-service/build/classes/java/main/de/oaa/xxx/registration/RegistrationApplication.class differ diff --git a/registration-service/build/classes/java/main/de/oaa/xxx/registration/RegistrationDAO.class b/registration-service/build/classes/java/main/de/oaa/xxx/registration/RegistrationDAO.class new file mode 100644 index 0000000..e75021c Binary files /dev/null and b/registration-service/build/classes/java/main/de/oaa/xxx/registration/RegistrationDAO.class differ diff --git a/registration-service/build/classes/java/main/de/oaa/xxx/registration/RegistrationEntity.class b/registration-service/build/classes/java/main/de/oaa/xxx/registration/RegistrationEntity.class new file mode 100644 index 0000000..f7cdbe5 Binary files /dev/null and b/registration-service/build/classes/java/main/de/oaa/xxx/registration/RegistrationEntity.class differ diff --git a/registration-service/build/classes/java/main/de/oaa/xxx/registration/RegistrationResource.class b/registration-service/build/classes/java/main/de/oaa/xxx/registration/RegistrationResource.class new file mode 100644 index 0000000..46d97a8 Binary files /dev/null and b/registration-service/build/classes/java/main/de/oaa/xxx/registration/RegistrationResource.class differ diff --git a/registration-service/build/libs/registration-service.war b/registration-service/build/libs/registration-service.war new file mode 100644 index 0000000..9ec591c Binary files /dev/null and b/registration-service/build/libs/registration-service.war differ diff --git a/registration-service/build/resources/main/META-INF/hibernate.cfg.xml b/registration-service/build/resources/main/META-INF/hibernate.cfg.xml new file mode 100644 index 0000000..315bcff --- /dev/null +++ b/registration-service/build/resources/main/META-INF/hibernate.cfg.xml @@ -0,0 +1,13 @@ + + + + + + org.hibernate.dialect.MySQLDialect + + + validate + + \ No newline at end of file diff --git a/registration-service/build/resources/main/META-INF/persistence.xml b/registration-service/build/resources/main/META-INF/persistence.xml new file mode 100644 index 0000000..30b02af --- /dev/null +++ b/registration-service/build/resources/main/META-INF/persistence.xml @@ -0,0 +1,20 @@ + + + + + org.hibernate.ejb.HibernatePersistence + java:/Registration + + + + + + \ No newline at end of file diff --git a/registration-service/build/resources/main/WEB-INF/web.xml b/registration-service/build/resources/main/WEB-INF/web.xml new file mode 100644 index 0000000..afa4e62 --- /dev/null +++ b/registration-service/build/resources/main/WEB-INF/web.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/registration-service/build/resources/main/activation.html b/registration-service/build/resources/main/activation.html new file mode 100644 index 0000000..0498f4d --- /dev/null +++ b/registration-service/build/resources/main/activation.html @@ -0,0 +1 @@ +

Registrierung erfolgreich abgeschlossen

\ No newline at end of file diff --git a/registration-service/build/resources/main/index.html b/registration-service/build/resources/main/index.html new file mode 100644 index 0000000..f8a3eed --- /dev/null +++ b/registration-service/build/resources/main/index.html @@ -0,0 +1 @@ +

Was machst du hier?

\ No newline at end of file diff --git a/registration-service/build/resources/main/log4j2.xml b/registration-service/build/resources/main/log4j2.xml new file mode 100644 index 0000000..f2e539a --- /dev/null +++ b/registration-service/build/resources/main/log4j2.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/registration-service/build/tmp/compileJava/previous-compilation-data.bin b/registration-service/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000..00efa25 Binary files /dev/null and b/registration-service/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/registration-service/build/tmp/war/MANIFEST.MF b/registration-service/build/tmp/war/MANIFEST.MF new file mode 100644 index 0000000..58630c0 --- /dev/null +++ b/registration-service/build/tmp/war/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/registration-service/src/main/java/de/oaa/xxx/registration/ActivationResource.java b/registration-service/src/main/java/de/oaa/xxx/registration/ActivationResource.java new file mode 100644 index 0000000..6c26234 --- /dev/null +++ b/registration-service/src/main/java/de/oaa/xxx/registration/ActivationResource.java @@ -0,0 +1,40 @@ +package de.oaa.xxx.registration; + +import java.util.UUID; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.client.ClientBuilder; +import jakarta.ws.rs.client.Entity; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.UriInfo; + +@ApplicationScoped +@Path("activation") +public class ActivationResource { + + @Inject private RegistrationDAO registrationDao; + + @GET + @Path("{uuid}") + public Response activate(@PathParam("uuid") String registrationId, @Context UriInfo info) { + RegistrationEntity registration = registrationDao.findById(UUID.fromString(registrationId)); + if (registration != null && !Boolean.TRUE.equals(registration.getActivated())) { + Response response = ClientBuilder.newClient().target("http://localhost:8080/user-service/user").request().post(Entity.entity(registration.toRegistration(), MediaType.APPLICATION_JSON)); + if (200 == response.getStatus()) { + registration.setActivated(Boolean.TRUE); + registrationDao.update(registration); + return Response.seeOther(info.getBaseUriBuilder().path("activation.html").build()).build(); + } else { + return Response.serverError().build(); + } + } else { + return Response.noContent().build(); + } + } +} diff --git a/registration-service/src/main/java/de/oaa/xxx/registration/Email.java b/registration-service/src/main/java/de/oaa/xxx/registration/Email.java new file mode 100644 index 0000000..c0c7554 --- /dev/null +++ b/registration-service/src/main/java/de/oaa/xxx/registration/Email.java @@ -0,0 +1,33 @@ +package de.oaa.xxx.registration; + +public class Email { + + private String emailAdresse; + private String titel; + private String text; + + public String getEmailAdresse() { + return emailAdresse; + } + + public void setEmailAdresse(String emailAdresse) { + this.emailAdresse = emailAdresse; + } + + public String getTitel() { + return titel; + } + + public void setTitel(String titel) { + this.titel = titel; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + +} diff --git a/registration-service/src/main/java/de/oaa/xxx/registration/PingResource.java b/registration-service/src/main/java/de/oaa/xxx/registration/PingResource.java new file mode 100644 index 0000000..98810e4 --- /dev/null +++ b/registration-service/src/main/java/de/oaa/xxx/registration/PingResource.java @@ -0,0 +1,17 @@ +package de.oaa.xxx.registration; + +import org.slf4j.LoggerFactory; + +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.core.Response; + +@Path("ping") +public class PingResource { + + @GET + public Response ping() { + LoggerFactory.getLogger(getClass()).debug("Ping"); + return Response.ok("ping").build(); + } +} diff --git a/registration-service/src/main/java/de/oaa/xxx/registration/Registration.java b/registration-service/src/main/java/de/oaa/xxx/registration/Registration.java new file mode 100644 index 0000000..da7a744 --- /dev/null +++ b/registration-service/src/main/java/de/oaa/xxx/registration/Registration.java @@ -0,0 +1,49 @@ +package de.oaa.xxx.registration; + +import java.util.UUID; + +public class Registration { + + private UUID id; + private String name; + private String email; + private String passwordHash; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPasswordHash() { + return passwordHash; + } + + public void setPasswordHash(String passwordHash) { + this.passwordHash = passwordHash; + } + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + @Override + public String toString() { + return "Registration [id=" + id + ", name=" + name + ", email=" + email + ", passwordHash=" + passwordHash + + "]"; + } +} diff --git a/registration-service/src/main/java/de/oaa/xxx/registration/RegistrationApplication.java b/registration-service/src/main/java/de/oaa/xxx/registration/RegistrationApplication.java new file mode 100644 index 0000000..7d94e04 --- /dev/null +++ b/registration-service/src/main/java/de/oaa/xxx/registration/RegistrationApplication.java @@ -0,0 +1,10 @@ +package de.oaa.xxx.registration; + +import jakarta.ws.rs.ApplicationPath; +import jakarta.ws.rs.core.Application; + +@ApplicationPath("/") +public class RegistrationApplication extends Application { + + +} diff --git a/registration-service/src/main/java/de/oaa/xxx/registration/RegistrationDAO.java b/registration-service/src/main/java/de/oaa/xxx/registration/RegistrationDAO.java new file mode 100644 index 0000000..03ee58f --- /dev/null +++ b/registration-service/src/main/java/de/oaa/xxx/registration/RegistrationDAO.java @@ -0,0 +1,82 @@ +package de.oaa.xxx.registration; + +import java.util.List; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import jakarta.annotation.Resource; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.persistence.TypedQuery; +import jakarta.transaction.HeuristicMixedException; +import jakarta.transaction.HeuristicRollbackException; +import jakarta.transaction.NotSupportedException; +import jakarta.transaction.RollbackException; +import jakarta.transaction.SystemException; +import jakarta.transaction.UserTransaction; + +@ApplicationScoped +public class RegistrationDAO { + + private Logger LOGGER = LoggerFactory.getLogger(getClass()); + + @PersistenceContext(name = "registration") + private EntityManager entityManager; + @Resource + private UserTransaction transaction; + + public List findByEmail(String email) { + TypedQuery query = entityManager + .createQuery("select r from RegistrationEntity r where r.email = :email", RegistrationEntity.class); + query.setParameter("email", email); + return query.getResultList(); + } + + public List findByName(String name) { + TypedQuery query = entityManager + .createQuery("select r from RegistrationEntity r where r.name = :name", RegistrationEntity.class); + query.setParameter("name", name); + return query.getResultList(); + } + + public void update(RegistrationEntity toUpdate) { + try { + transaction.begin(); + entityManager.merge(toUpdate); + transaction.commit(); + } catch (NotSupportedException | SystemException | SecurityException | IllegalStateException | RollbackException + | HeuristicMixedException | HeuristicRollbackException e) { + e.printStackTrace(); + } + } + + public void persist(RegistrationEntity toPersist) { + try { + transaction.begin(); + LOGGER.info("Persisting Entity " + toPersist); + entityManager.persist(toPersist); + transaction.commit(); + } catch (NotSupportedException | SystemException | SecurityException | IllegalStateException | RollbackException + | HeuristicMixedException | HeuristicRollbackException e) { + e.printStackTrace(); + } + } + + public void remove(RegistrationEntity toRemove) { + try { + transaction.begin(); + entityManager.remove(toRemove); + transaction.commit(); + } catch (NotSupportedException | SystemException | SecurityException | IllegalStateException | RollbackException + | HeuristicMixedException | HeuristicRollbackException e) { + e.printStackTrace(); + } + } + + public RegistrationEntity findById(UUID id) { + return entityManager.find(RegistrationEntity.class, id); + } +} diff --git a/registration-service/src/main/java/de/oaa/xxx/registration/RegistrationEntity.java b/registration-service/src/main/java/de/oaa/xxx/registration/RegistrationEntity.java new file mode 100644 index 0000000..9511dec --- /dev/null +++ b/registration-service/src/main/java/de/oaa/xxx/registration/RegistrationEntity.java @@ -0,0 +1,89 @@ +package de.oaa.xxx.registration; + +import java.util.UUID; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; + +@Entity +@Table(name = "registration") +public class RegistrationEntity { + + @Id + @Column + private UUID registrationId; + @Column + private String name; + @Column + private String email; + @Column + private String password; + @Column + private Boolean activated; + + public UUID getRegistrationId() { + return registrationId; + } + + public void setRegistrationId(UUID registrationId) { + this.registrationId = registrationId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + @Override + public String toString() { + return "RegistrationEntity [registrationId=" + registrationId + ", name=" + name + ", email=" + email + "]"; + } + + public Registration toRegistration() { + Registration registration = new Registration(); + registration.setId(registrationId); + registration.setEmail(email); + registration.setName(name); + registration.setPasswordHash(password); + return registration; + } + + public static RegistrationEntity create(Registration registration) { + RegistrationEntity entity = new RegistrationEntity(); + entity.setRegistrationId(UUID.randomUUID()); + entity.setEmail(registration.getEmail()); + entity.setActivated(Boolean.FALSE); + entity.setName(registration.getName()); + entity.setPassword(registration.getPasswordHash()); + return entity; + } + + public Boolean getActivated() { + return activated; + } + + public void setActivated(Boolean activated) { + this.activated = activated; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } +} diff --git a/registration-service/src/main/java/de/oaa/xxx/registration/RegistrationResource.java b/registration-service/src/main/java/de/oaa/xxx/registration/RegistrationResource.java new file mode 100644 index 0000000..6267763 --- /dev/null +++ b/registration-service/src/main/java/de/oaa/xxx/registration/RegistrationResource.java @@ -0,0 +1,93 @@ +package de.oaa.xxx.registration; + +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.client.Client; +import jakarta.ws.rs.client.ClientBuilder; +import jakarta.ws.rs.client.Entity; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; + +@Path("registration") +@ApplicationScoped +public class RegistrationResource { + + private static final Logger LOGGER = LoggerFactory.getLogger(RegistrationResource.class); + + @Inject private RegistrationDAO dao; + + @POST + @Consumes(MediaType.APPLICATION_JSON) + public Response create(Registration registration) { + LOGGER.info("POST " + getClass().getName() + ": " + registration); + if (dao.findByEmail(registration.getEmail()).size() > 0) { + LOGGER.warn("User mit E-Mail " + registration.getEmail() + " bereits vorhanden"); + return Response.status(400).build(); + } + RegistrationEntity entity = RegistrationEntity.create(registration); + dao.persist(entity); + registration.setId(entity.getRegistrationId()); + Email email = new Email(); + email.setTitel("Bitte bestätige deine E-Mail Adresse"); + email.setEmailAdresse(registration.getEmail()); + email.setText(getMailText(registration)); + if (!sendEmail(email)) { + dao.remove(entity); + return Response.serverError().build(); + } + return Response.accepted().build(); + } + + private boolean sendEmail(Email email) { + boolean result = false; + Client client = null; + try { + client = ClientBuilder.newClient(); + Response response = client.target("http://localhost:8080/mail-service/send").request().post(Entity.entity(email, MediaType.APPLICATION_JSON)); + if (200 == response.getStatus()) { + result = true; + } else { + LOGGER.error("E-Mail konnte nicht erzeugt werden...Status: {}", response.getStatus()); + } + } finally { + if (client != null) { + client.close(); + } + } + return result; + } + + @GET + @Produces(MediaType.APPLICATION_JSON) + public Response get(@QueryParam("id") UUID id) { + RegistrationEntity entity = dao.findById(id); + if (entity != null) { + return Response.ok(entity.toRegistration()).build(); + } else { + return Response.noContent().build(); + } + } + + + private String getMailText(Registration registration) { + return """ + +

Moin %s

+

Vielen Dank für deine Anmeldung bei XXX-BDSM Game!

+

Klicke hier um deine E-Mail-Adresse zu bestätigen.

+

Und nun viel Spass beim Spiel!

+ """.formatted(registration.getName(), registration.getId().toString()); + } + +} \ No newline at end of file diff --git a/registration-service/src/main/resources/log4j2.xml b/registration-service/src/main/resources/log4j2.xml new file mode 100644 index 0000000..f2e539a --- /dev/null +++ b/registration-service/src/main/resources/log4j2.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/registration-service/src/main/webapp/META-INF/hibernate.cfg.xml b/registration-service/src/main/webapp/META-INF/hibernate.cfg.xml new file mode 100644 index 0000000..315bcff --- /dev/null +++ b/registration-service/src/main/webapp/META-INF/hibernate.cfg.xml @@ -0,0 +1,13 @@ + + + + + + org.hibernate.dialect.MySQLDialect + + + validate + + \ No newline at end of file diff --git a/registration-service/src/main/webapp/META-INF/persistence.xml b/registration-service/src/main/webapp/META-INF/persistence.xml new file mode 100644 index 0000000..30b02af --- /dev/null +++ b/registration-service/src/main/webapp/META-INF/persistence.xml @@ -0,0 +1,20 @@ + + + + + org.hibernate.ejb.HibernatePersistence + java:/Registration + + + + + + \ No newline at end of file diff --git a/registration-service/src/main/webapp/WEB-INF/web.xml b/registration-service/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..afa4e62 --- /dev/null +++ b/registration-service/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/registration-service/src/main/webapp/activation.html b/registration-service/src/main/webapp/activation.html new file mode 100644 index 0000000..0498f4d --- /dev/null +++ b/registration-service/src/main/webapp/activation.html @@ -0,0 +1 @@ +

Registrierung erfolgreich abgeschlossen

\ No newline at end of file diff --git a/registration-service/src/main/webapp/index.html b/registration-service/src/main/webapp/index.html new file mode 100644 index 0000000..f8a3eed --- /dev/null +++ b/registration-service/src/main/webapp/index.html @@ -0,0 +1 @@ +

Was machst du hier?

\ No newline at end of file diff --git a/rest client.xml b/rest client.xml new file mode 100644 index 0000000..bbe40aa --- /dev/null +++ b/rest client.xml @@ -0,0 +1,6 @@ + +http://localhost:8080idQUERY204data204data405dataapplication/json200b07:Response<xml-fragment/>http://localhost:8080http://localhost/registration-service/registration/324b070d-e9f0-41a2-a226-208203490328No Authorizationidapplication/jsonapplication/octet-stream500data0datatext/html;charset=UTF-8500htmltext/plain;charset=UTF-8202data405datatext/plain;charset=UTF-8500data400datatext/html404html400data400data400data400data400data400data400data0data400data0data400data400data400data0data400data400data0data0data400data<xml-fragment/>http://localhost:8080{ + "name": "hans wurst", + "email": "mario.stoermer@gmail.com", + "passwordHash": "hash" +}http://localhost/registration-service/registrationNo AuthorizationidtokenQUERY200datatext/plain200data415datatext/xml415dataapplication/json200data0data<xml-fragment/>http://localhost:8080http://localhost/user-service/loginNo Authorizationtoken405data0data0data<entry key="token" value="eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJPQUEgR2FtZXMiLCJpYXQiOjE2Nzk4NDA3NjYsImVtYWlsIjoibWFyaW8uc3RvZXJtZXJAZ21haWwuY29tIiwiY2xpZW50IjoiMTI3LjAuMC4xIiwidXNlcklkIjoiOWU5YzI4MmQtNzI5NS00YTA5LWE5ZjUtMDc5NmYxM2JkMmNjIn0.TJY9mB25jcyDIRmdk6VOjAQaiwdGTRBepHFNNzuDaF9Ljx24MCFR29_tDrouTb49fxWLexWcJ_tu29Y4We1q51Xi28mhYoJwO0JMUeIAdmV39n6dmzzwhkdsUyO4dH7gRdlZZMWsi82hdHkF9ILm4hPrRBJ5gZQFwERaN827lJd0nwUw90N9mhgSw9askTlJ6oGd6yM_YU3iue8Y9BjveavXHcXEl8sC_j1CLBTRPUNcpgjAuaIQqQjWuORzNhlYwdnlzEzfyZWSHig3lWRGkTFVPaO5h_JiAF_b0ELz5lA_CQf1GzXwt-gYntgiPRWkDOMBoMFIY43gZ0FRf7DoCw" xmlns="http://eviware.com/soapui/config"/>http://localhost:8080http://localhost/aufgaben-service/aufgabeNo Authorization \ No newline at end of file diff --git a/session-service/.classpath b/session-service/.classpath new file mode 100644 index 0000000..8630bfa --- /dev/null +++ b/session-service/.classpath @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/session-service/.project b/session-service/.project new file mode 100644 index 0000000..e8efef6 --- /dev/null +++ b/session-service/.project @@ -0,0 +1,33 @@ + + + session-service + + + + org.eclipse.jdt.core.javanature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.buildship.core.gradleprojectnature + + + + org.eclipse.jdt.core.javabuilder + + + + org.eclipse.wst.common.project.facet.core.builder + + + + org.eclipse.wst.validation.validationbuilder + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + + diff --git a/session-service/.settings/org.eclipse.buildship.core.prefs b/session-service/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..a7b84d9 --- /dev/null +++ b/session-service/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,2 @@ +connection.project.dir=.. +eclipse.preferences.version=1 diff --git a/session-service/.settings/org.eclipse.jdt.core.prefs b/session-service/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..5c96052 --- /dev/null +++ b/session-service/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,13 @@ +# +#Sat Apr 01 12:17:22 CEST 2023 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.source=17 +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.debug.sourceFile=generate diff --git a/session-service/.settings/org.eclipse.wst.common.component b/session-service/.settings/org.eclipse.wst.common.component new file mode 100644 index 0000000..566a8a1 --- /dev/null +++ b/session-service/.settings/org.eclipse.wst.common.component @@ -0,0 +1,13 @@ + + + + + + + + + + uses + + + diff --git a/session-service/.settings/org.eclipse.wst.common.project.facet.core.xml b/session-service/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 0000000..2b28d58 --- /dev/null +++ b/session-service/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/session-service/bin/main/META-INF/hibernate.cfg.xml b/session-service/bin/main/META-INF/hibernate.cfg.xml new file mode 100644 index 0000000..315bcff --- /dev/null +++ b/session-service/bin/main/META-INF/hibernate.cfg.xml @@ -0,0 +1,13 @@ + + + + + + org.hibernate.dialect.MySQLDialect + + + validate + + \ No newline at end of file diff --git a/session-service/bin/main/META-INF/persistence.xml b/session-service/bin/main/META-INF/persistence.xml new file mode 100644 index 0000000..a25172a --- /dev/null +++ b/session-service/bin/main/META-INF/persistence.xml @@ -0,0 +1,20 @@ + + + + + org.hibernate.ejb.HibernatePersistence + java:/Session + + + + + + \ No newline at end of file diff --git a/session-service/bin/main/WEB-INF/web.xml b/session-service/bin/main/WEB-INF/web.xml new file mode 100644 index 0000000..afa4e62 --- /dev/null +++ b/session-service/bin/main/WEB-INF/web.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/session-service/bin/main/de/oaa/xxx/session/AktiveSperre.class b/session-service/bin/main/de/oaa/xxx/session/AktiveSperre.class new file mode 100644 index 0000000..e50b720 Binary files /dev/null and b/session-service/bin/main/de/oaa/xxx/session/AktiveSperre.class differ diff --git a/session-service/bin/main/de/oaa/xxx/session/AufgabeAnzeige.class b/session-service/bin/main/de/oaa/xxx/session/AufgabeAnzeige.class new file mode 100644 index 0000000..f8ac888 Binary files /dev/null and b/session-service/bin/main/de/oaa/xxx/session/AufgabeAnzeige.class differ diff --git a/session-service/bin/main/de/oaa/xxx/session/AufgabeArt.class b/session-service/bin/main/de/oaa/xxx/session/AufgabeArt.class new file mode 100644 index 0000000..08fd843 Binary files /dev/null and b/session-service/bin/main/de/oaa/xxx/session/AufgabeArt.class differ diff --git a/session-service/bin/main/de/oaa/xxx/session/Callback.class b/session-service/bin/main/de/oaa/xxx/session/Callback.class new file mode 100644 index 0000000..2d8a311 Binary files /dev/null and b/session-service/bin/main/de/oaa/xxx/session/Callback.class differ diff --git a/session-service/bin/main/de/oaa/xxx/session/GeschlechtEnum.class b/session-service/bin/main/de/oaa/xxx/session/GeschlechtEnum.class new file mode 100644 index 0000000..d58183e Binary files /dev/null and b/session-service/bin/main/de/oaa/xxx/session/GeschlechtEnum.class differ diff --git a/session-service/bin/main/de/oaa/xxx/session/Mitspieler.class b/session-service/bin/main/de/oaa/xxx/session/Mitspieler.class new file mode 100644 index 0000000..f2762c1 Binary files /dev/null and b/session-service/bin/main/de/oaa/xxx/session/Mitspieler.class differ diff --git a/session-service/bin/main/de/oaa/xxx/session/RolleEnum.class b/session-service/bin/main/de/oaa/xxx/session/RolleEnum.class new file mode 100644 index 0000000..c2fdd3c Binary files /dev/null and b/session-service/bin/main/de/oaa/xxx/session/RolleEnum.class differ diff --git a/session-service/bin/main/de/oaa/xxx/session/Session.class b/session-service/bin/main/de/oaa/xxx/session/Session.class new file mode 100644 index 0000000..2a08685 Binary files /dev/null and b/session-service/bin/main/de/oaa/xxx/session/Session.class differ diff --git a/session-service/bin/main/de/oaa/xxx/session/SessionDurchfuehren.class b/session-service/bin/main/de/oaa/xxx/session/SessionDurchfuehren.class new file mode 100644 index 0000000..c16d1e6 Binary files /dev/null and b/session-service/bin/main/de/oaa/xxx/session/SessionDurchfuehren.class differ diff --git a/session-service/bin/main/de/oaa/xxx/session/SessionResource.class b/session-service/bin/main/de/oaa/xxx/session/SessionResource.class new file mode 100644 index 0000000..25e997c Binary files /dev/null and b/session-service/bin/main/de/oaa/xxx/session/SessionResource.class differ diff --git a/session-service/bin/main/de/oaa/xxx/session/Werkzeug.class b/session-service/bin/main/de/oaa/xxx/session/Werkzeug.class new file mode 100644 index 0000000..dd97d78 Binary files /dev/null and b/session-service/bin/main/de/oaa/xxx/session/Werkzeug.class differ diff --git a/session-service/bin/main/de/oaa/xxx/session/aufgaben/Aufgabe.class b/session-service/bin/main/de/oaa/xxx/session/aufgaben/Aufgabe.class new file mode 100644 index 0000000..d9a3d35 Binary files /dev/null and b/session-service/bin/main/de/oaa/xxx/session/aufgaben/Aufgabe.class differ diff --git a/session-service/bin/main/de/oaa/xxx/session/aufgaben/AufgabenList.class b/session-service/bin/main/de/oaa/xxx/session/aufgaben/AufgabenList.class new file mode 100644 index 0000000..8c48597 Binary files /dev/null and b/session-service/bin/main/de/oaa/xxx/session/aufgaben/AufgabenList.class differ diff --git a/session-service/bin/main/de/oaa/xxx/session/aufgaben/Sperre.class b/session-service/bin/main/de/oaa/xxx/session/aufgaben/Sperre.class new file mode 100644 index 0000000..68849e1 Binary files /dev/null and b/session-service/bin/main/de/oaa/xxx/session/aufgaben/Sperre.class differ diff --git a/session-service/bin/main/de/oaa/xxx/session/aufgaben/Strafe.class b/session-service/bin/main/de/oaa/xxx/session/aufgaben/Strafe.class new file mode 100644 index 0000000..47508a4 Binary files /dev/null and b/session-service/bin/main/de/oaa/xxx/session/aufgaben/Strafe.class differ diff --git a/session-service/bin/main/de/oaa/xxx/session/entity/AktiveSperreDAO.class b/session-service/bin/main/de/oaa/xxx/session/entity/AktiveSperreDAO.class new file mode 100644 index 0000000..22d8a87 Binary files /dev/null and b/session-service/bin/main/de/oaa/xxx/session/entity/AktiveSperreDAO.class differ diff --git a/session-service/bin/main/de/oaa/xxx/session/entity/AktiveSperreEntity.class b/session-service/bin/main/de/oaa/xxx/session/entity/AktiveSperreEntity.class new file mode 100644 index 0000000..ce26fa2 Binary files /dev/null and b/session-service/bin/main/de/oaa/xxx/session/entity/AktiveSperreEntity.class differ diff --git a/session-service/bin/main/de/oaa/xxx/session/entity/MitspielerDAO.class b/session-service/bin/main/de/oaa/xxx/session/entity/MitspielerDAO.class new file mode 100644 index 0000000..56b5915 Binary files /dev/null and b/session-service/bin/main/de/oaa/xxx/session/entity/MitspielerDAO.class differ diff --git a/session-service/bin/main/de/oaa/xxx/session/entity/MitspielerEntity.class b/session-service/bin/main/de/oaa/xxx/session/entity/MitspielerEntity.class new file mode 100644 index 0000000..ff0c568 Binary files /dev/null and b/session-service/bin/main/de/oaa/xxx/session/entity/MitspielerEntity.class differ diff --git a/session-service/bin/main/de/oaa/xxx/session/entity/SessionDAO.class b/session-service/bin/main/de/oaa/xxx/session/entity/SessionDAO.class new file mode 100644 index 0000000..8eef742 Binary files /dev/null and b/session-service/bin/main/de/oaa/xxx/session/entity/SessionDAO.class differ diff --git a/session-service/bin/main/de/oaa/xxx/session/entity/SessionEntity.class b/session-service/bin/main/de/oaa/xxx/session/entity/SessionEntity.class new file mode 100644 index 0000000..c44e79e Binary files /dev/null and b/session-service/bin/main/de/oaa/xxx/session/entity/SessionEntity.class differ diff --git a/session-service/bin/main/de/oaa/xxx/session/sperre/SperreCallback.class b/session-service/bin/main/de/oaa/xxx/session/sperre/SperreCallback.class new file mode 100644 index 0000000..1c982d5 Binary files /dev/null and b/session-service/bin/main/de/oaa/xxx/session/sperre/SperreCallback.class differ diff --git a/session-service/bin/main/de/oaa/xxx/session/sperre/SperreResource.class b/session-service/bin/main/de/oaa/xxx/session/sperre/SperreResource.class new file mode 100644 index 0000000..d0a1ea0 Binary files /dev/null and b/session-service/bin/main/de/oaa/xxx/session/sperre/SperreResource.class differ diff --git a/session-service/bin/main/de/oaa/xxx/session/sperre/SperreVerarbeiten.class b/session-service/bin/main/de/oaa/xxx/session/sperre/SperreVerarbeiten.class new file mode 100644 index 0000000..790ff9f Binary files /dev/null and b/session-service/bin/main/de/oaa/xxx/session/sperre/SperreVerarbeiten.class differ diff --git a/session-service/bin/main/de/oaa/xxx/session/sperre/SperrenVerlaengernCallback.class b/session-service/bin/main/de/oaa/xxx/session/sperre/SperrenVerlaengernCallback.class new file mode 100644 index 0000000..4984974 Binary files /dev/null and b/session-service/bin/main/de/oaa/xxx/session/sperre/SperrenVerlaengernCallback.class differ diff --git a/session-service/bin/main/index.html b/session-service/bin/main/index.html new file mode 100644 index 0000000..f8a3eed --- /dev/null +++ b/session-service/bin/main/index.html @@ -0,0 +1 @@ +

Was machst du hier?

\ No newline at end of file diff --git a/session-service/bin/main/log4j2.xml b/session-service/bin/main/log4j2.xml new file mode 100644 index 0000000..f2e539a --- /dev/null +++ b/session-service/bin/main/log4j2.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/session-service/build.gradle b/session-service/build.gradle new file mode 100644 index 0000000..30ce816 --- /dev/null +++ b/session-service/build.gradle @@ -0,0 +1,39 @@ +plugins { + id 'java' + id 'war' + id 'eclipse' +} + +repositories { + mavenCentral() +} + +sourceSets { + main { + java { + srcDir 'src/main/java' + } + resources { + srcDir 'src/main/webapp' +// srcDir 'src/main/resources' + } + } +} + +dependencies { + implementation project(':framework') + + compileOnly 'jakarta.platform:jakarta.jakartaee-web-api:9.0.0' + compileOnly 'jakarta.persistence:jakarta.persistence-api:3.1.0' + compileOnly 'jakarta.resource:jakarta.resource-api:2.1.0' + + compileOnly 'org.jboss.ejb3:jboss-ejb3-ext-api:2.3.0.Final' + + compileOnly 'org.apache.logging.log4j:log4j-slf4j-impl:2.20.0' + + testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1' +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/session-service/build/classes/java/main/de/oaa/xxx/session/AktiveSperre.class b/session-service/build/classes/java/main/de/oaa/xxx/session/AktiveSperre.class new file mode 100644 index 0000000..942dba5 Binary files /dev/null and b/session-service/build/classes/java/main/de/oaa/xxx/session/AktiveSperre.class differ diff --git a/session-service/build/classes/java/main/de/oaa/xxx/session/AufgabeAnzeige.class b/session-service/build/classes/java/main/de/oaa/xxx/session/AufgabeAnzeige.class new file mode 100644 index 0000000..7064174 Binary files /dev/null and b/session-service/build/classes/java/main/de/oaa/xxx/session/AufgabeAnzeige.class differ diff --git a/session-service/build/classes/java/main/de/oaa/xxx/session/AufgabeArt.class b/session-service/build/classes/java/main/de/oaa/xxx/session/AufgabeArt.class new file mode 100644 index 0000000..64fb18e Binary files /dev/null and b/session-service/build/classes/java/main/de/oaa/xxx/session/AufgabeArt.class differ diff --git a/session-service/build/classes/java/main/de/oaa/xxx/session/Callback.class b/session-service/build/classes/java/main/de/oaa/xxx/session/Callback.class new file mode 100644 index 0000000..37a2024 Binary files /dev/null and b/session-service/build/classes/java/main/de/oaa/xxx/session/Callback.class differ diff --git a/session-service/build/classes/java/main/de/oaa/xxx/session/GeschlechtEnum.class b/session-service/build/classes/java/main/de/oaa/xxx/session/GeschlechtEnum.class new file mode 100644 index 0000000..a8fc331 Binary files /dev/null and b/session-service/build/classes/java/main/de/oaa/xxx/session/GeschlechtEnum.class differ diff --git a/session-service/build/classes/java/main/de/oaa/xxx/session/Mitspieler.class b/session-service/build/classes/java/main/de/oaa/xxx/session/Mitspieler.class new file mode 100644 index 0000000..2630d87 Binary files /dev/null and b/session-service/build/classes/java/main/de/oaa/xxx/session/Mitspieler.class differ diff --git a/session-service/build/classes/java/main/de/oaa/xxx/session/RolleEnum.class b/session-service/build/classes/java/main/de/oaa/xxx/session/RolleEnum.class new file mode 100644 index 0000000..9187684 Binary files /dev/null and b/session-service/build/classes/java/main/de/oaa/xxx/session/RolleEnum.class differ diff --git a/session-service/build/classes/java/main/de/oaa/xxx/session/Session.class b/session-service/build/classes/java/main/de/oaa/xxx/session/Session.class new file mode 100644 index 0000000..dda1cf9 Binary files /dev/null and b/session-service/build/classes/java/main/de/oaa/xxx/session/Session.class differ diff --git a/session-service/build/classes/java/main/de/oaa/xxx/session/SessionDurchfuehren.class b/session-service/build/classes/java/main/de/oaa/xxx/session/SessionDurchfuehren.class new file mode 100644 index 0000000..3ecaea4 Binary files /dev/null and b/session-service/build/classes/java/main/de/oaa/xxx/session/SessionDurchfuehren.class differ diff --git a/session-service/build/classes/java/main/de/oaa/xxx/session/SessionResource.class b/session-service/build/classes/java/main/de/oaa/xxx/session/SessionResource.class new file mode 100644 index 0000000..2192b21 Binary files /dev/null and b/session-service/build/classes/java/main/de/oaa/xxx/session/SessionResource.class differ diff --git a/session-service/build/classes/java/main/de/oaa/xxx/session/Werkzeug.class b/session-service/build/classes/java/main/de/oaa/xxx/session/Werkzeug.class new file mode 100644 index 0000000..f733d5f Binary files /dev/null and b/session-service/build/classes/java/main/de/oaa/xxx/session/Werkzeug.class differ diff --git a/session-service/build/classes/java/main/de/oaa/xxx/session/aufgaben/Aufgabe.class b/session-service/build/classes/java/main/de/oaa/xxx/session/aufgaben/Aufgabe.class new file mode 100644 index 0000000..12142a4 Binary files /dev/null and b/session-service/build/classes/java/main/de/oaa/xxx/session/aufgaben/Aufgabe.class differ diff --git a/session-service/build/classes/java/main/de/oaa/xxx/session/aufgaben/AufgabenList.class b/session-service/build/classes/java/main/de/oaa/xxx/session/aufgaben/AufgabenList.class new file mode 100644 index 0000000..09deb59 Binary files /dev/null and b/session-service/build/classes/java/main/de/oaa/xxx/session/aufgaben/AufgabenList.class differ diff --git a/session-service/build/classes/java/main/de/oaa/xxx/session/aufgaben/Sperre.class b/session-service/build/classes/java/main/de/oaa/xxx/session/aufgaben/Sperre.class new file mode 100644 index 0000000..8e23567 Binary files /dev/null and b/session-service/build/classes/java/main/de/oaa/xxx/session/aufgaben/Sperre.class differ diff --git a/session-service/build/classes/java/main/de/oaa/xxx/session/aufgaben/Strafe.class b/session-service/build/classes/java/main/de/oaa/xxx/session/aufgaben/Strafe.class new file mode 100644 index 0000000..b755e5e Binary files /dev/null and b/session-service/build/classes/java/main/de/oaa/xxx/session/aufgaben/Strafe.class differ diff --git a/session-service/build/classes/java/main/de/oaa/xxx/session/entity/AktiveSperreDAO.class b/session-service/build/classes/java/main/de/oaa/xxx/session/entity/AktiveSperreDAO.class new file mode 100644 index 0000000..74e41f8 Binary files /dev/null and b/session-service/build/classes/java/main/de/oaa/xxx/session/entity/AktiveSperreDAO.class differ diff --git a/session-service/build/classes/java/main/de/oaa/xxx/session/entity/AktiveSperreEntity.class b/session-service/build/classes/java/main/de/oaa/xxx/session/entity/AktiveSperreEntity.class new file mode 100644 index 0000000..5dd7bb3 Binary files /dev/null and b/session-service/build/classes/java/main/de/oaa/xxx/session/entity/AktiveSperreEntity.class differ diff --git a/session-service/build/classes/java/main/de/oaa/xxx/session/entity/MitspielerDAO.class b/session-service/build/classes/java/main/de/oaa/xxx/session/entity/MitspielerDAO.class new file mode 100644 index 0000000..92a2e54 Binary files /dev/null and b/session-service/build/classes/java/main/de/oaa/xxx/session/entity/MitspielerDAO.class differ diff --git a/session-service/build/classes/java/main/de/oaa/xxx/session/entity/MitspielerEntity.class b/session-service/build/classes/java/main/de/oaa/xxx/session/entity/MitspielerEntity.class new file mode 100644 index 0000000..968a0a2 Binary files /dev/null and b/session-service/build/classes/java/main/de/oaa/xxx/session/entity/MitspielerEntity.class differ diff --git a/session-service/build/classes/java/main/de/oaa/xxx/session/entity/SessionDAO.class b/session-service/build/classes/java/main/de/oaa/xxx/session/entity/SessionDAO.class new file mode 100644 index 0000000..53c5dd1 Binary files /dev/null and b/session-service/build/classes/java/main/de/oaa/xxx/session/entity/SessionDAO.class differ diff --git a/session-service/build/classes/java/main/de/oaa/xxx/session/entity/SessionEntity.class b/session-service/build/classes/java/main/de/oaa/xxx/session/entity/SessionEntity.class new file mode 100644 index 0000000..a010327 Binary files /dev/null and b/session-service/build/classes/java/main/de/oaa/xxx/session/entity/SessionEntity.class differ diff --git a/session-service/build/classes/java/main/de/oaa/xxx/session/sperre/SperreCallback.class b/session-service/build/classes/java/main/de/oaa/xxx/session/sperre/SperreCallback.class new file mode 100644 index 0000000..dd92190 Binary files /dev/null and b/session-service/build/classes/java/main/de/oaa/xxx/session/sperre/SperreCallback.class differ diff --git a/session-service/build/classes/java/main/de/oaa/xxx/session/sperre/SperreResource.class b/session-service/build/classes/java/main/de/oaa/xxx/session/sperre/SperreResource.class new file mode 100644 index 0000000..e0eadaf Binary files /dev/null and b/session-service/build/classes/java/main/de/oaa/xxx/session/sperre/SperreResource.class differ diff --git a/session-service/build/classes/java/main/de/oaa/xxx/session/sperre/SperreVerarbeiten.class b/session-service/build/classes/java/main/de/oaa/xxx/session/sperre/SperreVerarbeiten.class new file mode 100644 index 0000000..205817b Binary files /dev/null and b/session-service/build/classes/java/main/de/oaa/xxx/session/sperre/SperreVerarbeiten.class differ diff --git a/session-service/build/classes/java/main/de/oaa/xxx/session/sperre/SperrenVerlaengernCallback.class b/session-service/build/classes/java/main/de/oaa/xxx/session/sperre/SperrenVerlaengernCallback.class new file mode 100644 index 0000000..5b0247f Binary files /dev/null and b/session-service/build/classes/java/main/de/oaa/xxx/session/sperre/SperrenVerlaengernCallback.class differ diff --git a/session-service/build/libs/session-service.war b/session-service/build/libs/session-service.war new file mode 100644 index 0000000..9af0040 Binary files /dev/null and b/session-service/build/libs/session-service.war differ diff --git a/session-service/build/resources/main/META-INF/hibernate.cfg.xml b/session-service/build/resources/main/META-INF/hibernate.cfg.xml new file mode 100644 index 0000000..315bcff --- /dev/null +++ b/session-service/build/resources/main/META-INF/hibernate.cfg.xml @@ -0,0 +1,13 @@ + + + + + + org.hibernate.dialect.MySQLDialect + + + validate + + \ No newline at end of file diff --git a/session-service/build/resources/main/META-INF/persistence.xml b/session-service/build/resources/main/META-INF/persistence.xml new file mode 100644 index 0000000..a25172a --- /dev/null +++ b/session-service/build/resources/main/META-INF/persistence.xml @@ -0,0 +1,20 @@ + + + + + org.hibernate.ejb.HibernatePersistence + java:/Session + + + + + + \ No newline at end of file diff --git a/session-service/build/resources/main/WEB-INF/web.xml b/session-service/build/resources/main/WEB-INF/web.xml new file mode 100644 index 0000000..afa4e62 --- /dev/null +++ b/session-service/build/resources/main/WEB-INF/web.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/session-service/build/resources/main/index.html b/session-service/build/resources/main/index.html new file mode 100644 index 0000000..f8a3eed --- /dev/null +++ b/session-service/build/resources/main/index.html @@ -0,0 +1 @@ +

Was machst du hier?

\ No newline at end of file diff --git a/session-service/build/resources/main/log4j2.xml b/session-service/build/resources/main/log4j2.xml new file mode 100644 index 0000000..f2e539a --- /dev/null +++ b/session-service/build/resources/main/log4j2.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/session-service/build/tmp/compileJava/previous-compilation-data.bin b/session-service/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000..1fb4f9a Binary files /dev/null and b/session-service/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/session-service/build/tmp/war/MANIFEST.MF b/session-service/build/tmp/war/MANIFEST.MF new file mode 100644 index 0000000..58630c0 --- /dev/null +++ b/session-service/build/tmp/war/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/session-service/src/main/java/de/oaa/xxx/session/AktiveSperre.java b/session-service/src/main/java/de/oaa/xxx/session/AktiveSperre.java new file mode 100644 index 0000000..292f708 --- /dev/null +++ b/session-service/src/main/java/de/oaa/xxx/session/AktiveSperre.java @@ -0,0 +1,72 @@ +package de.oaa.xxx.session; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.UUID; + +public class AktiveSperre { + + private UUID aktiveSperreId; + private Mitspieler mitspieler; + private Integer minuten; + private LocalDateTime startzeit; + private LocalDateTime endzeit; + private List fuer; + private String releaseText; + + public UUID getAktiveSperreId() { + return aktiveSperreId; + } + + public void setAktiveSperreId(UUID aktiveSperreId) { + this.aktiveSperreId = aktiveSperreId; + } + + public Mitspieler getMitspieler() { + return mitspieler; + } + + public void setMitspieler(Mitspieler mitspieler) { + this.mitspieler = mitspieler; + } + + public Integer getMinuten() { + return minuten; + } + + public void setMinuten(Integer minuten) { + this.minuten = minuten; + } + + public LocalDateTime getStartzeit() { + return startzeit; + } + + public void setStartzeit(LocalDateTime startzeit) { + this.startzeit = startzeit; + } + + public LocalDateTime getEndzeit() { + return endzeit; + } + + public void setEndzeit(LocalDateTime endzeit) { + this.endzeit = endzeit; + } + + public List getFuer() { + return fuer; + } + + public void setFuer(List fuer) { + this.fuer = fuer; + } + + public String getReleaseText() { + return releaseText; + } + + public void setReleaseText(String releaseText) { + this.releaseText = releaseText; + } +} diff --git a/session-service/src/main/java/de/oaa/xxx/session/AufgabeAnzeige.java b/session-service/src/main/java/de/oaa/xxx/session/AufgabeAnzeige.java new file mode 100644 index 0000000..4b7b2c2 --- /dev/null +++ b/session-service/src/main/java/de/oaa/xxx/session/AufgabeAnzeige.java @@ -0,0 +1,42 @@ +package de.oaa.xxx.session; + +public class AufgabeAnzeige { + + private String nameAktiverMitspieler; + private String aufgabeText; + private Integer timer; + + private Callback callback; + + public String getNameAktiverMitspieler() { + return nameAktiverMitspieler; + } + + public void setNameAktiverMitspieler(String nameAktiverMitspieler) { + this.nameAktiverMitspieler = nameAktiverMitspieler; + } + + public String getAufgabeText() { + return aufgabeText; + } + + public void setAufgabeText(String aufgabeText) { + this.aufgabeText = aufgabeText; + } + + public Integer getTimer() { + return timer; + } + + public void setTimer(Integer timer) { + this.timer = timer; + } + + public Callback getCallback() { + return callback; + } + + public void setCallback(Callback callback) { + this.callback = callback; + } +} diff --git a/session-service/src/main/java/de/oaa/xxx/session/AufgabeArt.java b/session-service/src/main/java/de/oaa/xxx/session/AufgabeArt.java new file mode 100644 index 0000000..8b23cb0 --- /dev/null +++ b/session-service/src/main/java/de/oaa/xxx/session/AufgabeArt.java @@ -0,0 +1,8 @@ +package de.oaa.xxx.session; + +public enum AufgabeArt { + + AUFGABE, + STRAFE, + SPERRE; +} diff --git a/session-service/src/main/java/de/oaa/xxx/session/Callback.java b/session-service/src/main/java/de/oaa/xxx/session/Callback.java new file mode 100644 index 0000000..89fb175 --- /dev/null +++ b/session-service/src/main/java/de/oaa/xxx/session/Callback.java @@ -0,0 +1,16 @@ +package de.oaa.xxx.session; + +import java.util.UUID; + +public abstract class Callback { + + private UUID sessionId; + + public UUID getSessionId() { + return sessionId; + } + + public void setSessionId(UUID sessionId) { + this.sessionId = sessionId; + } +} diff --git a/session-service/src/main/java/de/oaa/xxx/session/GeschlechtEnum.java b/session-service/src/main/java/de/oaa/xxx/session/GeschlechtEnum.java new file mode 100644 index 0000000..ca158bb --- /dev/null +++ b/session-service/src/main/java/de/oaa/xxx/session/GeschlechtEnum.java @@ -0,0 +1,7 @@ +package de.oaa.xxx.session; + +public enum GeschlechtEnum { + WEIBLICH, + DIVERS, + MAENNLICH; +} diff --git a/session-service/src/main/java/de/oaa/xxx/session/Mitspieler.java b/session-service/src/main/java/de/oaa/xxx/session/Mitspieler.java new file mode 100644 index 0000000..26fc335 --- /dev/null +++ b/session-service/src/main/java/de/oaa/xxx/session/Mitspieler.java @@ -0,0 +1,76 @@ +package de.oaa.xxx.session; + +import java.util.List; +import java.util.UUID; + +public class Mitspieler { + + private UUID id; + private String name; + private GeschlechtEnum geschlecht; + private List spieltMit; + private List rollen; + private List verfuegbareWerkzeuge; + + public List getRollen() { + return rollen; + } + + public void setRollen(List rollen) { + this.rollen = rollen; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public GeschlechtEnum getGeschlecht() { + return geschlecht; + } + + public void setGeschlecht(GeschlechtEnum geschlecht) { + this.geschlecht = geschlecht; + } + + public List getSpieltMit() { + return spieltMit; + } + + public void setSpieltMit(List spieltMit) { + this.spieltMit = spieltMit; + } + + public List getVerfuegbareWerkzeuge() { + return verfuegbareWerkzeuge; + } + + public void setVerfuegbareWerkzeuge(List verfuegbareWerkzeuge) { + this.verfuegbareWerkzeuge = verfuegbareWerkzeuge; + } + + public boolean isVerfuegbar(Werkzeug werkzeug) { + return verfuegbareWerkzeuge.contains(werkzeug); + } + + public boolean isPassenderSpielpartner(Mitspieler other) { + if (!spieltMit.contains(other.getGeschlecht())) { + return false; + } + if (!other.spieltMit.contains(geschlecht)) { + return false; + } + return true; + } + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } +} diff --git a/session-service/src/main/java/de/oaa/xxx/session/RolleEnum.java b/session-service/src/main/java/de/oaa/xxx/session/RolleEnum.java new file mode 100644 index 0000000..14a5c89 --- /dev/null +++ b/session-service/src/main/java/de/oaa/xxx/session/RolleEnum.java @@ -0,0 +1,9 @@ +package de.oaa.xxx.session; + +public enum RolleEnum { + + BESTRAFUNG_AKTIV, + BESTRAFUNG_PASSIV, + AUFGABE_AKTIV, + AUFGABE_PASSIV; +} diff --git a/session-service/src/main/java/de/oaa/xxx/session/Session.java b/session-service/src/main/java/de/oaa/xxx/session/Session.java new file mode 100644 index 0000000..b2cde2d --- /dev/null +++ b/session-service/src/main/java/de/oaa/xxx/session/Session.java @@ -0,0 +1,61 @@ +package de.oaa.xxx.session; + +import java.util.UUID; + +public class Session { + + private UUID sessionId; + private UUID userId; + private Integer wahrscheinlichkeitSperre; + private Integer wahrscheinlichkeitStrafe; + private Integer aufgabenProLevel; + private Double zeitfaktorZeitstrafen; + + public UUID getUserId() { + return userId; + } + + public void setUserId(UUID userId) { + this.userId = userId; + } + + public Integer getWahrscheinlichkeitSperre() { + return wahrscheinlichkeitSperre; + } + + public void setWahrscheinlichkeitSperre(Integer wahrscheinlichkeitSperre) { + this.wahrscheinlichkeitSperre = wahrscheinlichkeitSperre; + } + + public Integer getWahrscheinlichkeitStrafe() { + return wahrscheinlichkeitStrafe; + } + + public void setWahrscheinlichkeitStrafe(Integer wahrscheinlichkeitStrafe) { + this.wahrscheinlichkeitStrafe = wahrscheinlichkeitStrafe; + } + + public Integer getAufgabenProLevel() { + return aufgabenProLevel; + } + + public void setAufgabenProLevel(Integer aufgabenProLevel) { + this.aufgabenProLevel = aufgabenProLevel; + } + + public Double getZeitfaktorZeitstrafen() { + return zeitfaktorZeitstrafen; + } + + public void setZeitfaktorZeitstrafen(Double zeitfaktorZeitstrafen) { + this.zeitfaktorZeitstrafen = zeitfaktorZeitstrafen; + } + + public UUID getSessionId() { + return sessionId; + } + + public void setSessionId(UUID sessionId) { + this.sessionId = sessionId; + } +} diff --git a/session-service/src/main/java/de/oaa/xxx/session/SessionDurchfuehren.java b/session-service/src/main/java/de/oaa/xxx/session/SessionDurchfuehren.java new file mode 100644 index 0000000..b2c83b5 --- /dev/null +++ b/session-service/src/main/java/de/oaa/xxx/session/SessionDurchfuehren.java @@ -0,0 +1,205 @@ +package de.oaa.xxx.session; + +import java.util.List; +import java.util.Random; +import java.util.stream.Collectors; + +import de.oaa.xxx.session.aufgaben.Aufgabe; +import de.oaa.xxx.session.aufgaben.AufgabenList; +import de.oaa.xxx.session.aufgaben.Sperre; +import de.oaa.xxx.session.aufgaben.Strafe; +import de.oaa.xxx.session.entity.SessionEntity; +import de.oaa.xxx.session.sperre.SperreCallback; +import de.oaa.xxx.session.sperre.SperrenVerlaengernCallback; +import jakarta.json.bind.JsonbBuilder; + +public class SessionDurchfuehren { + + private AufgabenList aufgabenList; + private List mitspieler; + private List aktiveSperren; + + private Integer wahrscheinlichkeitSperre; + private Integer wahrscheinlichkeitStrafe; + + private Integer aufgabenProLevel; + private Integer level; + private Integer aufgabenAufAktuellemLevel; + + public SessionDurchfuehren(SessionEntity entity) { + aufgabenList = JsonbBuilder.create().fromJson(entity.getAufgaben(), AufgabenList.class); + entity.getMitspieler().forEach(mitspielerEntity -> mitspieler.add(mitspielerEntity.toMitspieler())); + entity.getAktiveSperren().forEach(sperreEntity -> aktiveSperren.add(sperreEntity.toSperre(mitspieler))); + + wahrscheinlichkeitSperre = entity.getWahrscheinlichkeitSperre(); + wahrscheinlichkeitStrafe = entity.getWahrscheinlichkeitStrafe(); + + aufgabenProLevel = entity.getAufgabenProLevel(); + level = entity.getLevel(); + aufgabenAufAktuellemLevel = entity.getAufgabenAufAktuellemLevel(); + } + + public AufgabeAnzeige getNext() { + checkLevel(); + AufgabeAnzeige anzeige = null; + int nextInt = new Random().nextInt(1, 100); + if (nextInt == 1) { + anzeige = findUltimativeStrafe(); + } else if (nextInt == 2) { + anzeige = findSperreVerlaengern(); + } else if (nextInt > wahrscheinlichkeitSperre + wahrscheinlichkeitStrafe + 2) { + anzeige = findeAufgabe(); + } else if (nextInt > wahrscheinlichkeitSperre + 2) { + anzeige = findeStrafe(); + } else { + anzeige = findeSperre(); + } + if (anzeige == null) { + Mitspieler aktiv = findeMitspielerMitRolle(RolleEnum.AUFGABE_AKTIV); + Mitspieler passiv = findeMitspielerMitRolle(RolleEnum.AUFGABE_PASSIV, aktiv); + String text = "Ups, da ist etwas schief gelaufen. Keine Potentielle Aufgabe gefunden. Entweder seid ihr inzwischen so gut weggesperrt, dass wirklich keine Aufgaben mehr zur Verfügung stehen, oder uns ist ein Fehler unterlaufen. {AKTIV} und {PASSIV} überbücken die Zeit mit ein wenig Petting."; + anzeige = new AufgabeAnzeige(); + anzeige.setNameAktiverMitspieler(aktiv.getName()); + anzeige.setAufgabeText(getAnzeigeText(text, aktiv.getName(), passiv.getName())); + anzeige.setTimer(120); + } + return anzeige; + } + + private void checkLevel() { + if (++aufgabenAufAktuellemLevel >= aufgabenProLevel && level < 5) { + aufgabenAufAktuellemLevel = 0; + level++; + } + } + + private AufgabeAnzeige findUltimativeStrafe() { + Mitspieler aktiv = findeMitspielerMitRolle(RolleEnum.BESTRAFUNG_AKTIV); + if (aktiv != null) { + Mitspieler passiv = findeMitspielerMitRolle(RolleEnum.BESTRAFUNG_PASSIV, aktiv); + if (passiv != null) { + String text = "{AKTIV}, verschnüre {PASSIV} fachmännisch inkl. KG, Plugs, Knebel, Aufgabebinde und was dir sonst einfällt. Nutze die Ruhe für was auch immer du möchtest."; + AufgabeAnzeige anzeige = new AufgabeAnzeige(); + anzeige.setNameAktiverMitspieler(aktiv.getName()); + anzeige.setAufgabeText(getAnzeigeText(text, aktiv.getName(), passiv.getName())); + anzeige.setTimer(new Random().nextInt(1800, 7200)); + return anzeige; + } + } + return findeStrafe(); + } + + private AufgabeAnzeige findSperreVerlaengern() { + if (aktiveSperren != null && !aktiveSperren.isEmpty()) { + AktiveSperre sperre = aktiveSperren.get(new Random().nextInt(aktiveSperren.size())); + Mitspieler passiv = sperre.getMitspieler(); + Mitspieler aktiv = findeMitspielerMitRolle(RolleEnum.BESTRAFUNG_AKTIV, passiv); + if (aktiv != null) { + String text = "{AKTIV}, du entscheidest. Sollen alle bestehnden Zeitstrafen von {PASSIV} verlängert werden...?"; + AufgabeAnzeige anzeige= new AufgabeAnzeige(); + anzeige.setAufgabeText(getAnzeigeText(text, aktiv.getName(), passiv.getName())); + anzeige.setNameAktiverMitspieler(aktiv.getName()); + SperrenVerlaengernCallback callback = new SperrenVerlaengernCallback(); + callback.setFaktor(new Random().nextInt(2, 4)); + callback.setSpielerId(passiv.getId()); + anzeige.setCallback(callback); + return anzeige; + } + } + return findeSperre(); + } + + private AufgabeAnzeige findeAufgabe() { + Mitspieler aktiv = findeMitspielerMitRolle(RolleEnum.AUFGABE_AKTIV); + if (aktiv != null) { + Mitspieler passiv = findeMitspielerMitRolle(RolleEnum.AUFGABE_PASSIV, aktiv); + if (passiv != null) { + List list = aufgabenList.getAufgaben().stream().filter(aufgabe -> aufgabe.isAufgabePassend(level, aktiv, passiv)).collect(Collectors.toList()); + if (list != null && list.size() > 0) { + Aufgabe aufgabe = list.get(new Random().nextInt(list.size())); + AufgabeAnzeige anzeige= new AufgabeAnzeige(); + anzeige.setNameAktiverMitspieler(aktiv.getName()); + anzeige.setAufgabeText(getAnzeigeText(aufgabe.getText(), aktiv.getName(), passiv.getName())); + if (aufgabe.getSekundenVon() != null) { + if (aufgabe.getSekundenBis() != null) { + anzeige.setTimer(new Random().nextInt(aufgabe.getSekundenVon(), aufgabe.getSekundenBis())); + } else { + anzeige.setTimer(aufgabe.getSekundenVon()); + } + } + return anzeige; + } + } + } + return findeStrafe(); + } + + private AufgabeAnzeige findeStrafe() { + Mitspieler aktiv = findeMitspielerMitRolle(RolleEnum.BESTRAFUNG_AKTIV); + if (aktiv != null) { + Mitspieler passiv = findeMitspielerMitRolle(RolleEnum.BESTRAFUNG_PASSIV, aktiv); + if (passiv != null) { + List list = aufgabenList.getStrafen().stream().filter(sperre -> sperre.isAufgabePassend(level, aktiv, passiv)).collect(Collectors.toList()); + if (list != null && list.size() > 0) { + Strafe strafe = list.get(new Random().nextInt(list.size())); + AufgabeAnzeige anzeige= new AufgabeAnzeige(); + anzeige.setNameAktiverMitspieler(aktiv.getName()); + anzeige.setAufgabeText(getAnzeigeText(strafe.getText(), aktiv.getName(), passiv.getName())); + if (strafe.getSekundenVon() != null) { + if (strafe.getSekundenBis() != null) { + anzeige.setTimer(new Random().nextInt(strafe.getSekundenVon(), strafe.getSekundenBis())); + } else { + anzeige.setTimer(strafe.getSekundenVon()); + } + } + return anzeige; + } + } + } + return findeSperre(); + } + + private AufgabeAnzeige findeSperre() { + Mitspieler aktiv = findeMitspielerMitRolle(RolleEnum.BESTRAFUNG_AKTIV); + if (aktiv != null) { + Mitspieler passiv = findeMitspielerMitRolle(RolleEnum.BESTRAFUNG_PASSIV, aktiv); + if (passiv != null) { + List list = aufgabenList.getSperren().stream().filter(sperre -> sperre.isAufgabePassend(passiv)).collect(Collectors.toList()); + if (list != null && list.size() > 0) { + Sperre sperre = list.get(new Random().nextInt(list.size())); + AufgabeAnzeige anzeige= new AufgabeAnzeige(); + anzeige.setNameAktiverMitspieler(aktiv.getName()); + anzeige.setAufgabeText(getAnzeigeText(sperre.getText(), aktiv.getName(), passiv.getName())); + SperreCallback callback = new SperreCallback(); + callback.setSperreId(sperre.getSperreId()); + callback.setSpielerId(passiv.getId()); + callback.setReleaseText(getAnzeigeText(sperre.getReleaseText(), aktiv.getName(), passiv.getName())); + return anzeige; + } + } + } + return null; + } + + private String getAnzeigeText(String textMitPlatzhaltern, String nameAktiv, String namePassiv) { + return textMitPlatzhaltern.replace("{AKTIV}", nameAktiv).replace("{PASSIV}", namePassiv); + } + private Mitspieler findeMitspielerMitRolle(RolleEnum rolle) { + List list = mitspieler.stream().filter(mitspieler -> mitspieler.getRollen().contains(rolle)).toList(); + if (list != null && list.size() > 0) { + return list.get(new Random().nextInt(list.size())); + } + return null; + } + + private Mitspieler findeMitspielerMitRolle(RolleEnum rolle, Mitspieler gengespieler) { + List list = mitspieler.stream(). + filter(mitspieler -> mitspieler != gengespieler). + filter(mitspieler -> mitspieler.isPassenderSpielpartner(gengespieler)). + filter(mitspieler -> mitspieler.getRollen().contains(rolle)).toList(); + if (list != null && list.size() > 0) { + return list.get(new Random().nextInt(list.size())); + } + return null; + } +} diff --git a/session-service/src/main/java/de/oaa/xxx/session/SessionResource.java b/session-service/src/main/java/de/oaa/xxx/session/SessionResource.java new file mode 100644 index 0000000..ca067f6 --- /dev/null +++ b/session-service/src/main/java/de/oaa/xxx/session/SessionResource.java @@ -0,0 +1,243 @@ +package de.oaa.xxx.session; + +import java.time.LocalDateTime; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import de.oaa.xxx.framework.request.RequestChecker; +import de.oaa.xxx.session.aufgaben.AufgabenList; +import de.oaa.xxx.session.entity.MitspielerDAO; +import de.oaa.xxx.session.entity.MitspielerEntity; +import de.oaa.xxx.session.entity.SessionDAO; +import de.oaa.xxx.session.entity.SessionEntity; +import jakarta.annotation.Resource; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.json.bind.JsonbBuilder; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.transaction.SystemException; +import jakarta.transaction.UserTransaction; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.Status; +import jakarta.ws.rs.core.UriInfo; + +@ApplicationScoped +@Path("session") +public class SessionResource { + + + private Logger LOGGER = LoggerFactory.getLogger(getClass()); + + @PersistenceContext(name = "aufgaben") + private EntityManager entityManager; + @Resource + private UserTransaction transaction; + + @GET + @Path("{sessionId}") + @Produces(MediaType.APPLICATION_JSON) + public Response getBySessionId(@PathParam("sessionId") UUID sessionId, @Context HttpServletRequest req) throws IllegalStateException, SecurityException, SystemException { + try { + RequestChecker.checkRequest(req); + transaction.begin(); + SessionEntity entity = new SessionDAO(entityManager).findById(sessionId); + if (entity != null) { + Session session = new Session(); + session.setSessionId(entity.getSessionId()); + session.setUserId(entity.getUserId()); + session.setAufgabenProLevel(entity.getAufgabenAufAktuellemLevel()); + session.setWahrscheinlichkeitSperre(entity.getWahrscheinlichkeitSperre()); + session.setWahrscheinlichkeitStrafe(entity.getWahrscheinlichkeitStrafe()); + session.setZeitfaktorZeitstrafen(entity.getZeitfaktorZeitstrafen()); + transaction.commit(); + return Response.ok(session).build(); + } else { + transaction.rollback(); + return Response.noContent().build(); + } + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } + + @GET + @Produces(MediaType.APPLICATION_JSON) + public Response getByUserId(@QueryParam("userId") UUID userId, @Context HttpServletRequest req) throws IllegalStateException, SecurityException, SystemException { + try { + RequestChecker.checkRequest(req); + transaction.begin(); + SessionEntity entity = new SessionDAO(entityManager).findByUserId(userId); + if (entity != null) { + Session session = new Session(); + session.setSessionId(entity.getSessionId()); + session.setUserId(entity.getUserId()); + session.setAufgabenProLevel(entity.getAufgabenAufAktuellemLevel()); + session.setWahrscheinlichkeitSperre(entity.getWahrscheinlichkeitSperre()); + session.setWahrscheinlichkeitStrafe(entity.getWahrscheinlichkeitStrafe()); + session.setZeitfaktorZeitstrafen(entity.getZeitfaktorZeitstrafen()); + transaction.commit(); + return Response.ok(session).build(); + } else { + transaction.rollback(); + return Response.noContent().build(); + } + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } + + @DELETE + public Response deleteSession(Session session, @Context HttpServletRequest req) throws IllegalStateException, SecurityException, SystemException { + try { + RequestChecker.checkRequest(req); + transaction.begin(); + SessionEntity entity = new SessionDAO(entityManager).findByUserId(session.getSessionId()); + if (entity != null) { + new SessionDAO(entityManager).remove(entity); + return Response.accepted().build(); + } else { + transaction.rollback(); + return Response.noContent().build(); + } + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } + + @POST + @Consumes(MediaType.APPLICATION_JSON) + public Response create(Session session, @Context UriInfo uriInfo, @Context HttpServletRequest req) throws IllegalStateException, SecurityException, SystemException { + try { + UUID userId = RequestChecker.checkRequest(req).getUserId(); + transaction.begin(); + SessionEntity entity = new SessionEntity(); + entity.setSessionId(UUID.randomUUID()); + entity.setUserId(userId); + entity.setAufgabenAufAktuellemLevel(0); + entity.setAufgabenProLevel(session.getAufgabenProLevel() != null ? session.getAufgabenProLevel() : 5); + LocalDateTime now = LocalDateTime.now(); + entity.setLetzteAktivitaet(now); + entity.setStartZeit(now); + entity.setWahrscheinlichkeitSperre(session.getWahrscheinlichkeitSperre() != null ? session.getWahrscheinlichkeitSperre() : 10); + entity.setWahrscheinlichkeitStrafe(session.getWahrscheinlichkeitStrafe() != null ? session.getWahrscheinlichkeitStrafe() : 10); + entity.setZeitfaktorZeitstrafen(session.getZeitfaktorZeitstrafen() != null ? session.getZeitfaktorZeitstrafen() : 1.0); + new SessionDAO(entityManager).persist(entity); + transaction.commit(); + return Response.created(uriInfo.getAbsolutePathBuilder().path(entity.getSessionId().toString()).build()) + .build(); + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } + + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Path("{sessionId}/aufgaben") + public Response setAufgaben(AufgabenList list, @PathParam("sessionId") UUID sessionId, @Context HttpServletRequest req) throws IllegalStateException, SecurityException, SystemException { + try { + RequestChecker.checkRequest(req); + if (list.size() > 1000) { + return Response.status(Status.BAD_REQUEST).build(); + } + String aufgaben = JsonbBuilder.create().toJson(list); + transaction.begin(); + SessionDAO dao = new SessionDAO(entityManager); + SessionEntity session = dao.findById(sessionId); + if (session == null) { + transaction.rollback(); + return Response.status(Status.BAD_REQUEST).build(); + } + session.setAufgaben(aufgaben); + dao.update(session); + transaction.commit(); + return Response.accepted().build(); + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } + + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("{sessionId}/aufgaben/next") + public Response getNextAufgabe(@PathParam("sessionId") UUID sessionId, @Context HttpServletRequest req) throws IllegalStateException, SecurityException, SystemException { + try { + RequestChecker.checkRequest(req); + transaction.begin(); + SessionDAO dao = new SessionDAO(entityManager); + SessionEntity session = dao.findById(sessionId); + if (session == null) { + transaction.rollback(); + return Response.status(Status.BAD_REQUEST).build(); + } + session.setLetzteAktivitaet(LocalDateTime.now()); + AufgabeAnzeige next = new SessionDurchfuehren(session).getNext(); + transaction.commit(); + return Response.ok(next).build(); + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } + + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Path("{sessionId}/mitspieler") + public Response addMitspieler(Mitspieler mitspieler, @PathParam("sessionId") UUID sessionId, @Context HttpServletRequest req) throws IllegalStateException, SecurityException, SystemException { + try { + RequestChecker.checkRequest(req); + if (mitspieler.getName() == null || mitspieler.getGeschlecht() == null || mitspieler.getRollen() == null + || mitspieler.getRollen().isEmpty() || mitspieler.getSpieltMit() == null || mitspieler.getSpieltMit().isEmpty() + || mitspieler.getVerfuegbareWerkzeuge() == null || mitspieler.getVerfuegbareWerkzeuge().isEmpty()) { + return Response.status(Status.BAD_REQUEST).build(); + } + transaction.begin(); + SessionDAO dao = new SessionDAO(entityManager); + SessionEntity session = dao.findById(sessionId); + if (session == null) { + transaction.rollback(); + return Response.status(Status.BAD_REQUEST).build(); + } + + MitspielerEntity entity = new MitspielerEntity(); + entity.setMitspielerId(UUID.randomUUID()); + entity.setGeschlecht(mitspieler.getGeschlecht()); + entity.setName(mitspieler.getName()); + entity.setRollen(mitspieler.getRollen()); + entity.setSpieltMit(mitspieler.getSpieltMit()); + entity.setWerkzeuge(mitspieler.getVerfuegbareWerkzeuge()); + entity.setSession(session); + new MitspielerDAO(entityManager).persist(entity); + transaction.commit(); + return Response.accepted().build(); + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } + +} diff --git a/session-service/src/main/java/de/oaa/xxx/session/Werkzeug.java b/session-service/src/main/java/de/oaa/xxx/session/Werkzeug.java new file mode 100644 index 0000000..67768f8 --- /dev/null +++ b/session-service/src/main/java/de/oaa/xxx/session/Werkzeug.java @@ -0,0 +1,26 @@ +package de.oaa.xxx.session; + +public enum Werkzeug { + + MUND("Mund", "Ob die Person gewillt ist den Mund einzusetzen."), + VAGINA("Vagina", "Ob die Person über eine Vagina verfügt und gewillt ist diese einzusetzen."), + PENIS("Penis", "Ob die Person über einen Penis verfügt und gewillt ist diesen einzusetzen."), + ANUS("Anus", "Ob die Person gewillt ist den Anus einzusetzen."), + UMSCHNALLDILDO("Umschnall-Dildo", "Ob die Person über einen Umschnall-Dildo verfügt und gewillt ist diesen einzusetzen."); + + private String anzeige; + private String beschreibung; + + Werkzeug(String anzeige, String beschreibung) { + this.anzeige = anzeige; + this.beschreibung = beschreibung; + } + + public String beschreibungsText() { + return beschreibung; + } + + public String anzeigeText() { + return anzeige; + } +} diff --git a/session-service/src/main/java/de/oaa/xxx/session/aufgaben/Aufgabe.java b/session-service/src/main/java/de/oaa/xxx/session/aufgaben/Aufgabe.java new file mode 100644 index 0000000..5e7b046 --- /dev/null +++ b/session-service/src/main/java/de/oaa/xxx/session/aufgaben/Aufgabe.java @@ -0,0 +1,115 @@ +package de.oaa.xxx.session.aufgaben; + +import java.util.List; +import java.util.UUID; + +import de.oaa.xxx.session.Mitspieler; +import de.oaa.xxx.session.Werkzeug; + +public class Aufgabe { + + private UUID aufgabeId; + private String kurzText; + private String text; + private Integer level; + private Integer sekundenVon; + private Integer sekundenBis; + private UUID gruppeId; + private List benoetigtAktiv; + private List benoetigtPassiv; + + public UUID getAufgabeId() { + return aufgabeId; + } + + public void setAufgabeId(UUID aufgabeId) { + this.aufgabeId = aufgabeId; + } + + public String getKurzText() { + return kurzText; + } + + public void setKurzText(String kurzText) { + this.kurzText = kurzText; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public Integer getLevel() { + return level; + } + + public void setLevel(Integer level) { + this.level = level; + } + + public Integer getSekundenVon() { + return sekundenVon; + } + + public void setSekundenVon(Integer sekundenVon) { + this.sekundenVon = sekundenVon; + } + + public Integer getSekundenBis() { + return sekundenBis; + } + + public void setSekundenBis(Integer sekundenBis) { + this.sekundenBis = sekundenBis; + } + + public List getBenoetigtAktiv() { + return benoetigtAktiv; + } + + public void setBenoetigtAktiv(List benoetigtAktiv) { + this.benoetigtAktiv = benoetigtAktiv; + } + + public List getBenoetigtPassiv() { + return benoetigtPassiv; + } + + public void setBenoetigtPassiv(List benoetigtPassiv) { + this.benoetigtPassiv = benoetigtPassiv; + } + + public UUID getGruppeId() { + return gruppeId; + } + + public void setGruppeId(UUID gruppeId) { + this.gruppeId = gruppeId; + } + + public boolean isAufgabePassend(int level, Mitspieler aktiv, Mitspieler passiv) { + if (level != this.level && level - 1 != this.level) { + return false; + } + if (benoetigtPassiv != null) { + for (Werkzeug werkzeug : benoetigtPassiv) { + if (!passiv.isVerfuegbar(werkzeug)) { + return false; + } + } + } + if (benoetigtAktiv == null || benoetigtAktiv.isEmpty()) { + return true; + } else { + for (Werkzeug werkzeug : benoetigtAktiv) { + if (aktiv.isVerfuegbar(werkzeug)) { + return true; + } + } + return false; + } + } +} diff --git a/session-service/src/main/java/de/oaa/xxx/session/aufgaben/AufgabenList.java b/session-service/src/main/java/de/oaa/xxx/session/aufgaben/AufgabenList.java new file mode 100644 index 0000000..a74aadd --- /dev/null +++ b/session-service/src/main/java/de/oaa/xxx/session/aufgaben/AufgabenList.java @@ -0,0 +1,48 @@ +package de.oaa.xxx.session.aufgaben; + +import java.util.List; + +public class AufgabenList { + + private List aufgaben; + private List sperren; + private List strafen; + + public List getAufgaben() { + return aufgaben; + } + + public void setAufgaben(List aufgaben) { + this.aufgaben = aufgaben; + } + + public List getSperren() { + return sperren; + } + + public void setSperren(List sperren) { + this.sperren = sperren; + } + + public List getStrafen() { + return strafen; + } + + public void setStrafen(List strafen) { + this.strafen = strafen; + } + + public int size() { + int size = 0; + if (aufgaben != null) { + size += aufgaben.size(); + } + if (sperren != null) { + size += sperren.size(); + } + if (strafen != null) { + size += strafen.size(); + } + return size; + } +} diff --git a/session-service/src/main/java/de/oaa/xxx/session/aufgaben/Sperre.java b/session-service/src/main/java/de/oaa/xxx/session/aufgaben/Sperre.java new file mode 100644 index 0000000..d7a7e06 --- /dev/null +++ b/session-service/src/main/java/de/oaa/xxx/session/aufgaben/Sperre.java @@ -0,0 +1,92 @@ +package de.oaa.xxx.session.aufgaben; + +import java.util.List; +import java.util.UUID; + +import de.oaa.xxx.session.Mitspieler; +import de.oaa.xxx.session.Werkzeug; + +public class Sperre { + + private UUID sperreId; + private String kurzText; + private String text; + private String releaseText; + private UUID gruppeId; + private List sperreFuer; + private Integer minutenVon; + private Integer minutenBis; + + public UUID getSperreId() { + return sperreId; + } + + public void setSperreId(UUID sperreId) { + this.sperreId = sperreId; + } + + public String getKurzText() { + return kurzText; + } + + public void setKurzText(String kurzText) { + this.kurzText = kurzText; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public String getReleaseText() { + return releaseText; + } + + public void setReleaseText(String releaseText) { + this.releaseText = releaseText; + } + + public List getSperreFuer() { + return sperreFuer; + } + + public void setSperreFuer(List sperreFuer) { + this.sperreFuer = sperreFuer; + } + + public Integer getMinutenVon() { + return minutenVon; + } + + public void setMinutenVon(Integer minutenVon) { + this.minutenVon = minutenVon; + } + + public Integer getMinutenBis() { + return minutenBis; + } + + public void setMinutenBis(Integer minutenBis) { + this.minutenBis = minutenBis; + } + + public UUID getGruppeId() { + return gruppeId; + } + + public void setGruppeId(UUID gruppeId) { + this.gruppeId = gruppeId; + } + + public boolean isAufgabePassend(Mitspieler passiv) { + for (Werkzeug werkzeug : sperreFuer) { + if (!passiv.isVerfuegbar(werkzeug)) { + return false; + } + } + return true; + } +} diff --git a/session-service/src/main/java/de/oaa/xxx/session/aufgaben/Strafe.java b/session-service/src/main/java/de/oaa/xxx/session/aufgaben/Strafe.java new file mode 100644 index 0000000..c0925cb --- /dev/null +++ b/session-service/src/main/java/de/oaa/xxx/session/aufgaben/Strafe.java @@ -0,0 +1,115 @@ +package de.oaa.xxx.session.aufgaben; + +import java.util.List; +import java.util.UUID; + +import de.oaa.xxx.session.Mitspieler; +import de.oaa.xxx.session.Werkzeug; + +public class Strafe { + + private UUID strafeId; + private Integer level; + private String text; + private String kurzText; + private Integer sekundenVon; + private Integer sekundenBis; + private UUID gruppeId; + private List benoetigtAktiv; + private List benoetigtPassiv; + + public UUID getStrafeId() { + return strafeId; + } + + public void setStrafeId(UUID strafeId) { + this.strafeId = strafeId; + } + + public Integer getLevel() { + return level; + } + + public void setLevel(Integer level) { + this.level = level; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public Integer getSekundenVon() { + return sekundenVon; + } + + public void setSekundenVon(Integer sekundenVon) { + this.sekundenVon = sekundenVon; + } + + public Integer getSekundenBis() { + return sekundenBis; + } + + public void setSekundenBis(Integer sekundenBis) { + this.sekundenBis = sekundenBis; + } + + public List getBenoetigtAktiv() { + return benoetigtAktiv; + } + + public void setBenoetigtAktiv(List benoetigtAktiv) { + this.benoetigtAktiv = benoetigtAktiv; + } + + public List getBenoetigtPassiv() { + return benoetigtPassiv; + } + + public void setBenoetigtPassiv(List benoetigtPassiv) { + this.benoetigtPassiv = benoetigtPassiv; + } + + public UUID getGruppeId() { + return gruppeId; + } + + public void setGruppeId(UUID gruppeId) { + this.gruppeId = gruppeId; + } + + public String getKurzText() { + return kurzText; + } + + public void setKurzText(String kurzText) { + this.kurzText = kurzText; + } + + public boolean isAufgabePassend(int level, Mitspieler aktiv, Mitspieler passiv) { + if (level != this.level && level - 1 != this.level) { + return false; + } + if (benoetigtPassiv != null) { + for (Werkzeug werkzeug : benoetigtPassiv) { + if (!passiv.isVerfuegbar(werkzeug)) { + return false; + } + } + } + if (benoetigtAktiv == null || benoetigtAktiv.isEmpty()) { + return true; + } else { + for (Werkzeug werkzeug : benoetigtAktiv) { + if (aktiv.isVerfuegbar(werkzeug)) { + return true; + } + } + return false; + } + } +} diff --git a/session-service/src/main/java/de/oaa/xxx/session/entity/AktiveSperreDAO.java b/session-service/src/main/java/de/oaa/xxx/session/entity/AktiveSperreDAO.java new file mode 100644 index 0000000..dbf6e6b --- /dev/null +++ b/session-service/src/main/java/de/oaa/xxx/session/entity/AktiveSperreDAO.java @@ -0,0 +1,36 @@ +package de.oaa.xxx.session.entity; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.UUID; + +import de.oaa.xxx.framework.AbstractDAO; +import jakarta.persistence.EntityManager; +import jakarta.persistence.TypedQuery; + +public class AktiveSperreDAO extends AbstractDAO{ + + public AktiveSperreDAO(EntityManager entityManager) { + super(AktiveSperreEntity.class, entityManager); + } + + public List findAbgelaufene(UUID sessionId) { + TypedQuery query = getEntityManager().createQuery(""" + select a from AktiveSperreEntity a join a.session s + where a.endzeit < :now + and s.sessionId = :sessionId + """, AktiveSperreEntity.class); + query.setParameter("now", LocalDateTime.now()); + query.setParameter("sessionId", sessionId); + return query.getResultList(); + } + + public List findAktiveLocks(UUID spielerId) { + TypedQuery query = getEntityManager().createQuery(""" + select a from AktiveSperreEntity a join a.mitspieler m + where m.mitspielerId = :mitspielerId + """, AktiveSperreEntity.class); + query.setParameter("mitspielerId", spielerId); + return query.getResultList(); + } +} diff --git a/session-service/src/main/java/de/oaa/xxx/session/entity/AktiveSperreEntity.java b/session-service/src/main/java/de/oaa/xxx/session/entity/AktiveSperreEntity.java new file mode 100644 index 0000000..b9d9852 --- /dev/null +++ b/session-service/src/main/java/de/oaa/xxx/session/entity/AktiveSperreEntity.java @@ -0,0 +1,127 @@ +package de.oaa.xxx.session.entity; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +import de.oaa.xxx.framework.XXXEntity; +import de.oaa.xxx.session.AktiveSperre; +import de.oaa.xxx.session.Mitspieler; +import de.oaa.xxx.session.Werkzeug; +import jakarta.persistence.Column; +import jakarta.persistence.ElementCollection; +import jakarta.persistence.Entity; +import jakarta.persistence.Enumerated; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; + +@Entity +@Table(name = "aktiveSperre") +public class AktiveSperreEntity implements XXXEntity { + + @Id + @Column + private UUID aktiveSperreId; + @ManyToOne + @JoinColumn(name = "mitspielerId", nullable = false) + private MitspielerEntity mitspieler; + @Column + private Integer minuten; + @Column + private LocalDateTime startzeit; + @Column + private LocalDateTime endzeit; + @Column + @Enumerated + @ElementCollection(targetClass = Werkzeug.class) + private List fuer; + @Column + private String releaseText; + @ManyToOne + @JoinColumn(name = "sessionId", nullable = false) + private SessionEntity session; + + public UUID getAktiveSperreId() { + return aktiveSperreId; + } + + public void setAktiveSperreId(UUID aktiveSperreId) { + this.aktiveSperreId = aktiveSperreId; + } + + public MitspielerEntity getMitspieler() { + return mitspieler; + } + + public void setMitspieler(MitspielerEntity mitspieler) { + this.mitspieler = mitspieler; + } + + public Integer getMinuten() { + return minuten; + } + + public void setMinuten(Integer minuten) { + this.minuten = minuten; + } + + public LocalDateTime getStartzeit() { + return startzeit; + } + + public void setStartzeit(LocalDateTime startzeit) { + this.startzeit = startzeit; + } + + public LocalDateTime getEndzeit() { + return endzeit; + } + + public void setEndzeit(LocalDateTime endzeit) { + this.endzeit = endzeit; + } + + public List getFuer() { + return fuer; + } + + public void setFuer(List fuer) { + this.fuer = fuer; + } + + public String getReleaseText() { + return releaseText; + } + + public void setReleaseText(String releaseText) { + this.releaseText = releaseText; + } + + public SessionEntity getSession() { + return session; + } + + public void setSession(SessionEntity session) { + this.session = session; + } + + public AktiveSperre toSperre(List mitspielerList) { + AktiveSperre sperre = new AktiveSperre(); + sperre.setAktiveSperreId(aktiveSperreId); + sperre.setEndzeit(endzeit); + sperre.setFuer(fuer); + sperre.setMinuten(minuten); + sperre.setMitspieler(getMitspieler(mitspielerList, mitspieler.getMitspielerId())); + sperre.setReleaseText(releaseText); + sperre.setStartzeit(startzeit); + return sperre; + } + + private Mitspieler getMitspieler(List mitspielerList, UUID id) { + Optional first = mitspielerList.stream().filter(mit -> mit.getId().equals(id)).findFirst(); + return first.isPresent() ? first.get() : null; + } +} diff --git a/session-service/src/main/java/de/oaa/xxx/session/entity/MitspielerDAO.java b/session-service/src/main/java/de/oaa/xxx/session/entity/MitspielerDAO.java new file mode 100644 index 0000000..fc6d2f6 --- /dev/null +++ b/session-service/src/main/java/de/oaa/xxx/session/entity/MitspielerDAO.java @@ -0,0 +1,11 @@ +package de.oaa.xxx.session.entity; + +import de.oaa.xxx.framework.AbstractDAO; +import jakarta.persistence.EntityManager; + +public class MitspielerDAO extends AbstractDAO { + + public MitspielerDAO(EntityManager entityManager) { + super(MitspielerEntity.class, entityManager); + } +} diff --git a/session-service/src/main/java/de/oaa/xxx/session/entity/MitspielerEntity.java b/session-service/src/main/java/de/oaa/xxx/session/entity/MitspielerEntity.java new file mode 100644 index 0000000..4cb56c4 --- /dev/null +++ b/session-service/src/main/java/de/oaa/xxx/session/entity/MitspielerEntity.java @@ -0,0 +1,124 @@ +package de.oaa.xxx.session.entity; + +import java.util.List; +import java.util.UUID; + +import de.oaa.xxx.framework.XXXEntity; +import de.oaa.xxx.session.GeschlechtEnum; +import de.oaa.xxx.session.Mitspieler; +import de.oaa.xxx.session.RolleEnum; +import de.oaa.xxx.session.Werkzeug; +import jakarta.persistence.Column; +import jakarta.persistence.ElementCollection; +import jakarta.persistence.Entity; +import jakarta.persistence.Enumerated; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; + +@Entity +@Table(name = "mitspieler") +public class MitspielerEntity implements XXXEntity { + + @Id + @Column + private UUID mitspielerId; + @Column + private String name; + @Column + private GeschlechtEnum geschlecht; + @Column + @Enumerated + @ElementCollection(targetClass = Werkzeug.class) + private List werkzeuge; + @Column + @Enumerated + @ElementCollection(targetClass = GeschlechtEnum.class) + private List spieltMit; + @Column + @Enumerated + @ElementCollection(targetClass = RolleEnum.class) + private List rollen; + @ManyToOne + @JoinColumn(name = "sessionId", nullable = false) + private SessionEntity session; + @OneToMany(mappedBy = "mitspieler") + private List aktiveSperren; + + public UUID getMitspielerId() { + return mitspielerId; + } + + public void setMitspielerId(UUID mitspielerId) { + this.mitspielerId = mitspielerId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public GeschlechtEnum getGeschlecht() { + return geschlecht; + } + + public void setGeschlecht(GeschlechtEnum geschlecht) { + this.geschlecht = geschlecht; + } + + public List getWerkzeuge() { + return werkzeuge; + } + + public void setWerkzeuge(List werkzeuge) { + this.werkzeuge = werkzeuge; + } + + public List getSpieltMit() { + return spieltMit; + } + + public void setSpieltMit(List spieltMit) { + this.spieltMit = spieltMit; + } + + public List getRollen() { + return rollen; + } + + public void setRollen(List rollen) { + this.rollen = rollen; + } + + public SessionEntity getSession() { + return session; + } + + public void setSession(SessionEntity session) { + this.session = session; + } + + public List getAktiveSperren() { + return aktiveSperren; + } + + public void setAktiveSperren(List aktiveSperren) { + this.aktiveSperren = aktiveSperren; + } + + public Mitspieler toMitspieler() { + Mitspieler mitspieler = new Mitspieler(); + mitspieler.setGeschlecht(geschlecht); + mitspieler.setId(mitspielerId); + mitspieler.setName(name); + mitspieler.setRollen(rollen); + mitspieler.setSpieltMit(spieltMit); + mitspieler.setVerfuegbareWerkzeuge(werkzeuge); + return mitspieler; + } +} diff --git a/session-service/src/main/java/de/oaa/xxx/session/entity/SessionDAO.java b/session-service/src/main/java/de/oaa/xxx/session/entity/SessionDAO.java new file mode 100644 index 0000000..bbc360a --- /dev/null +++ b/session-service/src/main/java/de/oaa/xxx/session/entity/SessionDAO.java @@ -0,0 +1,20 @@ +package de.oaa.xxx.session.entity; + +import java.util.UUID; + +import de.oaa.xxx.framework.AbstractDAO; +import jakarta.persistence.EntityManager; +import jakarta.persistence.TypedQuery; + +public class SessionDAO extends AbstractDAO { + + public SessionDAO(EntityManager entityManager) { + super(SessionEntity.class, entityManager); + } + + public SessionEntity findByUserId(UUID userId) { + TypedQuery query = getEntityManager().createQuery("select s from SessionEntity s where s.userId = :userId", SessionEntity.class); + query.setParameter("userId", userId); + return query.getSingleResult(); + } +} diff --git a/session-service/src/main/java/de/oaa/xxx/session/entity/SessionEntity.java b/session-service/src/main/java/de/oaa/xxx/session/entity/SessionEntity.java new file mode 100644 index 0000000..36cd5fe --- /dev/null +++ b/session-service/src/main/java/de/oaa/xxx/session/entity/SessionEntity.java @@ -0,0 +1,156 @@ +package de.oaa.xxx.session.entity; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.UUID; + +import de.oaa.xxx.framework.XXXEntity; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; +import jakarta.persistence.Temporal; +import jakarta.persistence.TemporalType; + +@Entity +@Table(name = "session") +public class SessionEntity implements XXXEntity { + + @Id + @Column + private UUID sessionId; + @Column(unique = true) + private UUID userId; + @Column + @Temporal(TemporalType.TIMESTAMP) + private LocalDateTime startZeit; + @Column + @Temporal(TemporalType.TIMESTAMP) + private LocalDateTime letzteAktivitaet; + @Column + @OneToMany(mappedBy = "session") + private List mitspieler; + @Column + @OneToMany(mappedBy = "session") + private List aktiveSperren; + @Column + private Integer wahrscheinlichkeitSperre; + @Column + private Integer wahrscheinlichkeitStrafe; + @Column + private Integer aufgabenProLevel; + @Column + private Integer level; + @Column + private Integer aufgabenAufAktuellemLevel; + @Column + private String aufgaben; + @Column + private Double zeitfaktorZeitstrafen; + + public UUID getSessionId() { + return sessionId; + } + + public void setSessionId(UUID sessionId) { + this.sessionId = sessionId; + } + + public UUID getUserId() { + return userId; + } + + public void setUserId(UUID userId) { + this.userId = userId; + } + + public LocalDateTime getStartZeit() { + return startZeit; + } + + public void setStartZeit(LocalDateTime startZeit) { + this.startZeit = startZeit; + } + + public LocalDateTime getLetzteAktivitaet() { + return letzteAktivitaet; + } + + public void setLetzteAktivitaet(LocalDateTime letzteAktivitaet) { + this.letzteAktivitaet = letzteAktivitaet; + } + + public List getMitspieler() { + return mitspieler; + } + + public void setMitspieler(List mitspieler) { + this.mitspieler = mitspieler; + } + + public Integer getWahrscheinlichkeitSperre() { + return wahrscheinlichkeitSperre; + } + + public void setWahrscheinlichkeitSperre(Integer wahrscheinlichkeitSperre) { + this.wahrscheinlichkeitSperre = wahrscheinlichkeitSperre; + } + + public Integer getWahrscheinlichkeitStrafe() { + return wahrscheinlichkeitStrafe; + } + + public void setWahrscheinlichkeitStrafe(Integer wahrscheinlichkeitStrafe) { + this.wahrscheinlichkeitStrafe = wahrscheinlichkeitStrafe; + } + + public Integer getAufgabenProLevel() { + return aufgabenProLevel; + } + + public void setAufgabenProLevel(Integer aufgabenProLevel) { + this.aufgabenProLevel = aufgabenProLevel; + } + + public Integer getLevel() { + return level; + } + + public void setLevel(Integer level) { + this.level = level; + } + + public Integer getAufgabenAufAktuellemLevel() { + return aufgabenAufAktuellemLevel; + } + + public void setAufgabenAufAktuellemLevel(Integer aufgabenAufAktuellemLevel) { + this.aufgabenAufAktuellemLevel = aufgabenAufAktuellemLevel; + } + + public String getAufgaben() { + return aufgaben; + } + + public void setAufgaben(String aufgaben) { + this.aufgaben = aufgaben; + } + + public Double getZeitfaktorZeitstrafen() { + return zeitfaktorZeitstrafen; + } + + public void setZeitfaktorZeitstrafen(Double zeitfaktorZeitstrafen) { + this.zeitfaktorZeitstrafen = zeitfaktorZeitstrafen; + } + + public List getAktiveSperren() { + return aktiveSperren; + } + + public void setAktiveSperren(List aktiveSperren) { + this.aktiveSperren = aktiveSperren; + } + +} diff --git a/session-service/src/main/java/de/oaa/xxx/session/sperre/SperreCallback.java b/session-service/src/main/java/de/oaa/xxx/session/sperre/SperreCallback.java new file mode 100644 index 0000000..241747a --- /dev/null +++ b/session-service/src/main/java/de/oaa/xxx/session/sperre/SperreCallback.java @@ -0,0 +1,32 @@ +package de.oaa.xxx.session.sperre; + +import java.util.UUID; + +import de.oaa.xxx.session.Callback; + +public class SperreCallback extends Callback { + + private UUID sperreId; + private UUID spielerId; + private String releaseText; + + public UUID getSperreId() { + return sperreId; + } + public void setSperreId(UUID sperreId) { + this.sperreId = sperreId; + } + public UUID getSpielerId() { + return spielerId; + } + public void setSpielerId(UUID spielerId) { + this.spielerId = spielerId; + } + public String getReleaseText() { + return releaseText; + } + public void setReleaseText(String releaseText) { + this.releaseText = releaseText; + } + +} diff --git a/session-service/src/main/java/de/oaa/xxx/session/sperre/SperreResource.java b/session-service/src/main/java/de/oaa/xxx/session/sperre/SperreResource.java new file mode 100644 index 0000000..72f0b20 --- /dev/null +++ b/session-service/src/main/java/de/oaa/xxx/session/sperre/SperreResource.java @@ -0,0 +1,104 @@ +package de.oaa.xxx.session.sperre; + +import java.util.List; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import de.oaa.xxx.session.entity.AktiveSperreDAO; +import de.oaa.xxx.session.entity.AktiveSperreEntity; +import de.oaa.xxx.session.entity.MitspielerDAO; +import de.oaa.xxx.session.entity.SessionDAO; +import jakarta.annotation.Resource; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.transaction.SystemException; +import jakarta.transaction.UserTransaction; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.Status; + +@ApplicationScoped +@Path("sperre") +public class SperreResource { + + private Logger LOGGER = LoggerFactory.getLogger(getClass()); + + @PersistenceContext(name = "aufgaben") + private EntityManager entityManager; + @Resource + private UserTransaction transaction; + + @POST + @Consumes(MediaType.APPLICATION_JSON) + public Response sperren(SperreCallback callback) throws IllegalStateException, SecurityException, SystemException { + try { + transaction.begin(); + new SperreVerarbeiten().sperreAnwenden(callback, new SessionDAO(entityManager), new MitspielerDAO(entityManager), new AktiveSperreDAO(entityManager)); + transaction.commit(); + return Response.status(jakarta.ws.rs.core.Response.Status.CREATED).build(); + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } + + @GET + @Path("abgelaufene") + @Produces(MediaType.TEXT_PLAIN) + public Response getAbgelaufeneSperren(@QueryParam("sessionId") UUID sessionId) throws IllegalStateException, SecurityException, SystemException { + try { + if (sessionId == null) { + return Response.status(Status.BAD_REQUEST).build(); + } + transaction.begin(); + List abgelaufene = new AktiveSperreDAO(entityManager).findAbgelaufene(sessionId); + StringBuilder builder = new StringBuilder(); + SperreVerarbeiten verarbeitun = new SperreVerarbeiten(); + if (abgelaufene != null && !abgelaufene.isEmpty()) { + for (AktiveSperreEntity abgelaufen: abgelaufene) { + builder.append(verarbeitun.sperreAufheben(abgelaufen, + new AktiveSperreDAO(entityManager), new MitspielerDAO(entityManager))); + builder.append(";"); + } + } + transaction.commit(); + return Response.ok(builder.toString()).build(); + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } + + @POST + @Path("verlaengern") + @Consumes(MediaType.APPLICATION_JSON) + public Response aktiveVerlaengern(SperrenVerlaengernCallback callback) throws IllegalStateException, SecurityException, SystemException { + try { + if (callback == null || callback.getSpielerId() == null || callback.getFaktor() == null) { + return Response.status(Status.BAD_REQUEST).build(); + } + transaction.begin(); + AktiveSperreDAO aktiveSperreDAO = new AktiveSperreDAO(entityManager); + List aktiveLocks = aktiveSperreDAO.findAktiveLocks(callback.getSpielerId()); + SperreVerarbeiten verarbeiten = new SperreVerarbeiten(); + aktiveLocks.forEach(lock -> verarbeiten.SperreVerlaengern(lock, callback.getFaktor(), aktiveSperreDAO)); + transaction.commit(); + return Response.accepted().build(); + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + transaction.rollback(); + return Response.serverError().build(); + } + } +} diff --git a/session-service/src/main/java/de/oaa/xxx/session/sperre/SperreVerarbeiten.java b/session-service/src/main/java/de/oaa/xxx/session/sperre/SperreVerarbeiten.java new file mode 100644 index 0000000..a6b2905 --- /dev/null +++ b/session-service/src/main/java/de/oaa/xxx/session/sperre/SperreVerarbeiten.java @@ -0,0 +1,83 @@ +package de.oaa.xxx.session.sperre; + +import java.time.LocalDateTime; +import java.util.Optional; +import java.util.Random; +import java.util.UUID; + +import de.oaa.xxx.session.aufgaben.AufgabenList; +import de.oaa.xxx.session.aufgaben.Sperre; +import de.oaa.xxx.session.entity.AktiveSperreDAO; +import de.oaa.xxx.session.entity.AktiveSperreEntity; +import de.oaa.xxx.session.entity.MitspielerDAO; +import de.oaa.xxx.session.entity.MitspielerEntity; +import de.oaa.xxx.session.entity.SessionDAO; +import de.oaa.xxx.session.entity.SessionEntity; +import jakarta.json.bind.JsonbBuilder; + +public class SperreVerarbeiten { + + public void sperreAnwenden(SperreCallback callback, SessionDAO sessionDao, MitspielerDAO mitspielerDAO, AktiveSperreDAO sperreDao) { + SessionEntity session = sessionDao.findById(callback.getSessionId()); + MitspielerEntity mitspieler = mitspielerDAO.findById(callback.getSpielerId()); + if (session != null) { + AufgabenList aufgaben = JsonbBuilder.create().fromJson(session.getAufgaben(), AufgabenList.class); + Optional first = aufgaben.getSperren().stream().filter(sperre -> sperre.getSperreId().equals(callback.getSperreId())).findFirst(); + if (first.isPresent()) { + Sperre sperre = first.get(); + AktiveSperreEntity aktiv = new AktiveSperreEntity(); + fill(callback, session, mitspieler, sperre, aktiv); + sperreDao.persist(aktiv); + sperre.getSperreFuer().forEach(mitspieler.getWerkzeuge()::remove); + mitspielerDAO.update(mitspieler); + } + } + } + + public String sperreAufheben(AktiveSperreEntity aufzuheben, AktiveSperreDAO sperreDAO, MitspielerDAO mitspielerDAO) { + MitspielerEntity mitspieler = aufzuheben.getMitspieler(); + aufzuheben.getFuer().forEach(mitspieler.getWerkzeuge()::add); + mitspielerDAO.update(mitspieler); + String releaseText = aufzuheben.getReleaseText(); + sperreDAO.remove(aufzuheben); + return releaseText; + } + + public void SperreVerlaengern(AktiveSperreEntity verlaengern, Integer faktor, AktiveSperreDAO dao) { + Integer neueDauer = verlaengern.getMinuten() * faktor; + verlaengern.setEndzeit(verlaengern.getStartzeit().plusMinutes(neueDauer)); + verlaengern.setMinuten(neueDauer); + dao.update(verlaengern); + } + + private void fill(SperreCallback callback, SessionEntity session, MitspielerEntity mitspieler, Sperre sperre, + AktiveSperreEntity aktiv) { + aktiv.setAktiveSperreId(UUID.randomUUID()); + LocalDateTime now = LocalDateTime.now(); + Integer minuten = berechneDauer(session, sperre); + aktiv.setStartzeit(now); + aktiv.setEndzeit(now.plusMinutes(minuten)); + aktiv.setMinuten(minuten); + aktiv.setMitspieler(mitspieler); + aktiv.setFuer(sperre.getSperreFuer()); + aktiv.setReleaseText(callback.getReleaseText()); + } + + private Integer berechneDauer(SessionEntity session, Sperre sperre) { + Integer minuten = 30; + if (sperre.getMinutenVon() != null) { + if (sperre.getMinutenBis() != null) { + minuten = new Random().nextInt(sperre.getMinutenVon(), sperre.getMinutenBis()); + } else { + minuten = sperre.getMinutenVon(); + } + } + if (session.getZeitfaktorZeitstrafen() != null) { + minuten = (int) (minuten * session.getZeitfaktorZeitstrafen()); + } + if (minuten == 0) { + minuten = 1; + } + return minuten; + } +} diff --git a/session-service/src/main/java/de/oaa/xxx/session/sperre/SperrenVerlaengernCallback.java b/session-service/src/main/java/de/oaa/xxx/session/sperre/SperrenVerlaengernCallback.java new file mode 100644 index 0000000..595c61b --- /dev/null +++ b/session-service/src/main/java/de/oaa/xxx/session/sperre/SperrenVerlaengernCallback.java @@ -0,0 +1,27 @@ +package de.oaa.xxx.session.sperre; + +import java.util.UUID; + +import de.oaa.xxx.session.Callback; + +public class SperrenVerlaengernCallback extends Callback { + + private UUID spielerId; + private Integer faktor; + + public UUID getSpielerId() { + return spielerId; + } + + public void setSpielerId(UUID spielerId) { + this.spielerId = spielerId; + } + + public Integer getFaktor() { + return faktor; + } + + public void setFaktor(Integer faktor) { + this.faktor = faktor; + } +} diff --git a/session-service/src/main/resources/log4j2.xml b/session-service/src/main/resources/log4j2.xml new file mode 100644 index 0000000..f2e539a --- /dev/null +++ b/session-service/src/main/resources/log4j2.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/session-service/src/main/webapp/META-INF/hibernate.cfg.xml b/session-service/src/main/webapp/META-INF/hibernate.cfg.xml new file mode 100644 index 0000000..315bcff --- /dev/null +++ b/session-service/src/main/webapp/META-INF/hibernate.cfg.xml @@ -0,0 +1,13 @@ + + + + + + org.hibernate.dialect.MySQLDialect + + + validate + + \ No newline at end of file diff --git a/session-service/src/main/webapp/META-INF/persistence.xml b/session-service/src/main/webapp/META-INF/persistence.xml new file mode 100644 index 0000000..a25172a --- /dev/null +++ b/session-service/src/main/webapp/META-INF/persistence.xml @@ -0,0 +1,20 @@ + + + + + org.hibernate.ejb.HibernatePersistence + java:/Session + + + + + + \ No newline at end of file diff --git a/session-service/src/main/webapp/WEB-INF/web.xml b/session-service/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..afa4e62 --- /dev/null +++ b/session-service/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/session-service/src/main/webapp/index.html b/session-service/src/main/webapp/index.html new file mode 100644 index 0000000..f8a3eed --- /dev/null +++ b/session-service/src/main/webapp/index.html @@ -0,0 +1 @@ +

Was machst du hier?

\ No newline at end of file diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..8402dd1 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,18 @@ +/* + * This file was generated by the Gradle 'init' task. + * + * The settings file is used to specify which projects to include in your build. + * + * Detailed information about configuring a multi-project build in Gradle can be found + * in the user manual at https://docs.gradle.org/7.4.2/userguide/multi_project_builds.html + */ + +rootProject.name = 'xxx-server' + +include('framework') +include('user-service') +include('registration-service') +include('mail-service') +include('aufgaben-service') +include('session-service') +include('localdeploy') \ No newline at end of file diff --git a/user-service/.classpath b/user-service/.classpath new file mode 100644 index 0000000..23b00f3 --- /dev/null +++ b/user-service/.classpath @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/user-service/.project b/user-service/.project new file mode 100644 index 0000000..f7277f6 --- /dev/null +++ b/user-service/.project @@ -0,0 +1,33 @@ + + + user-service + + + + org.eclipse.jdt.core.javanature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.buildship.core.gradleprojectnature + + + + org.eclipse.jdt.core.javabuilder + + + + org.eclipse.wst.common.project.facet.core.builder + + + + org.eclipse.wst.validation.validationbuilder + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + + diff --git a/user-service/.settings/org.eclipse.buildship.core.prefs b/user-service/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..a7b84d9 --- /dev/null +++ b/user-service/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,2 @@ +connection.project.dir=.. +eclipse.preferences.version=1 diff --git a/user-service/.settings/org.eclipse.jdt.core.prefs b/user-service/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..eeb3e3b --- /dev/null +++ b/user-service/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,13 @@ +# +#Sat Apr 01 12:17:23 CEST 2023 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.source=17 +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.debug.sourceFile=generate diff --git a/user-service/.settings/org.eclipse.wst.common.component b/user-service/.settings/org.eclipse.wst.common.component new file mode 100644 index 0000000..3fe5e0e --- /dev/null +++ b/user-service/.settings/org.eclipse.wst.common.component @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/user-service/.settings/org.eclipse.wst.common.project.facet.core.xml b/user-service/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 0000000..2b28d58 --- /dev/null +++ b/user-service/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/user-service/bin/main/META-INF/hibernate.cfg.xml b/user-service/bin/main/META-INF/hibernate.cfg.xml new file mode 100644 index 0000000..315bcff --- /dev/null +++ b/user-service/bin/main/META-INF/hibernate.cfg.xml @@ -0,0 +1,13 @@ + + + + + + org.hibernate.dialect.MySQLDialect + + + validate + + \ No newline at end of file diff --git a/user-service/bin/main/META-INF/persistence.xml b/user-service/bin/main/META-INF/persistence.xml new file mode 100644 index 0000000..0e5baf6 --- /dev/null +++ b/user-service/bin/main/META-INF/persistence.xml @@ -0,0 +1,20 @@ + + + + + org.hibernate.ejb.HibernatePersistence + java:/User + + + + + + \ No newline at end of file diff --git a/user-service/bin/main/WEB-INF/web.xml b/user-service/bin/main/WEB-INF/web.xml new file mode 100644 index 0000000..afa4e62 --- /dev/null +++ b/user-service/bin/main/WEB-INF/web.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/user-service/bin/main/de/oaa/xxx/user/LoginService.class b/user-service/bin/main/de/oaa/xxx/user/LoginService.class new file mode 100644 index 0000000..256000b Binary files /dev/null and b/user-service/bin/main/de/oaa/xxx/user/LoginService.class differ diff --git a/user-service/bin/main/de/oaa/xxx/user/Registration.class b/user-service/bin/main/de/oaa/xxx/user/Registration.class new file mode 100644 index 0000000..8697262 Binary files /dev/null and b/user-service/bin/main/de/oaa/xxx/user/Registration.class differ diff --git a/user-service/bin/main/de/oaa/xxx/user/User.class b/user-service/bin/main/de/oaa/xxx/user/User.class new file mode 100644 index 0000000..63a7816 Binary files /dev/null and b/user-service/bin/main/de/oaa/xxx/user/User.class differ diff --git a/user-service/bin/main/de/oaa/xxx/user/UserApplication.class b/user-service/bin/main/de/oaa/xxx/user/UserApplication.class new file mode 100644 index 0000000..def7ee5 Binary files /dev/null and b/user-service/bin/main/de/oaa/xxx/user/UserApplication.class differ diff --git a/user-service/bin/main/de/oaa/xxx/user/UserDAO.class b/user-service/bin/main/de/oaa/xxx/user/UserDAO.class new file mode 100644 index 0000000..f5f6148 Binary files /dev/null and b/user-service/bin/main/de/oaa/xxx/user/UserDAO.class differ diff --git a/user-service/bin/main/de/oaa/xxx/user/UserEntity.class b/user-service/bin/main/de/oaa/xxx/user/UserEntity.class new file mode 100644 index 0000000..7162383 Binary files /dev/null and b/user-service/bin/main/de/oaa/xxx/user/UserEntity.class differ diff --git a/user-service/bin/main/de/oaa/xxx/user/UserResource.class b/user-service/bin/main/de/oaa/xxx/user/UserResource.class new file mode 100644 index 0000000..f082d18 Binary files /dev/null and b/user-service/bin/main/de/oaa/xxx/user/UserResource.class differ diff --git a/user-service/bin/main/index.html b/user-service/bin/main/index.html new file mode 100644 index 0000000..f8a3eed --- /dev/null +++ b/user-service/bin/main/index.html @@ -0,0 +1 @@ +

Was machst du hier?

\ No newline at end of file diff --git a/user-service/bin/main/log4j2.xml b/user-service/bin/main/log4j2.xml new file mode 100644 index 0000000..f2e539a --- /dev/null +++ b/user-service/bin/main/log4j2.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/user-service/bin/main/xxx.jks b/user-service/bin/main/xxx.jks new file mode 100644 index 0000000..2d75a54 Binary files /dev/null and b/user-service/bin/main/xxx.jks differ diff --git a/user-service/build.gradle b/user-service/build.gradle new file mode 100644 index 0000000..6e9ea1d --- /dev/null +++ b/user-service/build.gradle @@ -0,0 +1,40 @@ +plugins { + id 'java' + id 'war' +} + +repositories { + mavenCentral() +} + +sourceSets { + main { + java { + srcDir 'src/main/java' + } + resources { + srcDir 'src/main/webapp' +// srcDir 'src/main/resources' + } + } +} + +dependencies { + compileOnly 'jakarta.platform:jakarta.jakartaee-web-api:9.0.0' + compileOnly 'jakarta.persistence:jakarta.persistence-api:3.1.0' + compileOnly 'jakarta.resource:jakarta.resource-api:2.1.0' + + compileOnly 'org.jboss.ejb3:jboss-ejb3-ext-api:2.3.0.Final' + + implementation 'io.jsonwebtoken:jjwt-api:0.11.5' + implementation 'io.jsonwebtoken:jjwt-impl:0.11.5' + implementation 'io.jsonwebtoken:jjwt-gson:0.11.5' + + compileOnly 'org.apache.logging.log4j:log4j-slf4j-impl:2.20.0' + + testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1' +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/user-service/build/classes/java/main/de/oaa/xxx/user/LoginService.class b/user-service/build/classes/java/main/de/oaa/xxx/user/LoginService.class new file mode 100644 index 0000000..4bd8a1f Binary files /dev/null and b/user-service/build/classes/java/main/de/oaa/xxx/user/LoginService.class differ diff --git a/user-service/build/classes/java/main/de/oaa/xxx/user/Registration.class b/user-service/build/classes/java/main/de/oaa/xxx/user/Registration.class new file mode 100644 index 0000000..21584be Binary files /dev/null and b/user-service/build/classes/java/main/de/oaa/xxx/user/Registration.class differ diff --git a/user-service/build/classes/java/main/de/oaa/xxx/user/User.class b/user-service/build/classes/java/main/de/oaa/xxx/user/User.class new file mode 100644 index 0000000..d15d2e8 Binary files /dev/null and b/user-service/build/classes/java/main/de/oaa/xxx/user/User.class differ diff --git a/user-service/build/classes/java/main/de/oaa/xxx/user/UserApplication.class b/user-service/build/classes/java/main/de/oaa/xxx/user/UserApplication.class new file mode 100644 index 0000000..bda6780 Binary files /dev/null and b/user-service/build/classes/java/main/de/oaa/xxx/user/UserApplication.class differ diff --git a/user-service/build/classes/java/main/de/oaa/xxx/user/UserDAO.class b/user-service/build/classes/java/main/de/oaa/xxx/user/UserDAO.class new file mode 100644 index 0000000..75cbb3e Binary files /dev/null and b/user-service/build/classes/java/main/de/oaa/xxx/user/UserDAO.class differ diff --git a/user-service/build/classes/java/main/de/oaa/xxx/user/UserEntity.class b/user-service/build/classes/java/main/de/oaa/xxx/user/UserEntity.class new file mode 100644 index 0000000..2f5b5ac Binary files /dev/null and b/user-service/build/classes/java/main/de/oaa/xxx/user/UserEntity.class differ diff --git a/user-service/build/classes/java/main/de/oaa/xxx/user/UserResource.class b/user-service/build/classes/java/main/de/oaa/xxx/user/UserResource.class new file mode 100644 index 0000000..078ae2b Binary files /dev/null and b/user-service/build/classes/java/main/de/oaa/xxx/user/UserResource.class differ diff --git a/user-service/build/libs/user-service.war b/user-service/build/libs/user-service.war new file mode 100644 index 0000000..df112c4 Binary files /dev/null and b/user-service/build/libs/user-service.war differ diff --git a/user-service/build/resources/main/META-INF/hibernate.cfg.xml b/user-service/build/resources/main/META-INF/hibernate.cfg.xml new file mode 100644 index 0000000..315bcff --- /dev/null +++ b/user-service/build/resources/main/META-INF/hibernate.cfg.xml @@ -0,0 +1,13 @@ + + + + + + org.hibernate.dialect.MySQLDialect + + + validate + + \ No newline at end of file diff --git a/user-service/build/resources/main/META-INF/persistence.xml b/user-service/build/resources/main/META-INF/persistence.xml new file mode 100644 index 0000000..0e5baf6 --- /dev/null +++ b/user-service/build/resources/main/META-INF/persistence.xml @@ -0,0 +1,20 @@ + + + + + org.hibernate.ejb.HibernatePersistence + java:/User + + + + + + \ No newline at end of file diff --git a/user-service/build/resources/main/WEB-INF/web.xml b/user-service/build/resources/main/WEB-INF/web.xml new file mode 100644 index 0000000..afa4e62 --- /dev/null +++ b/user-service/build/resources/main/WEB-INF/web.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/user-service/build/resources/main/index.html b/user-service/build/resources/main/index.html new file mode 100644 index 0000000..f8a3eed --- /dev/null +++ b/user-service/build/resources/main/index.html @@ -0,0 +1 @@ +

Was machst du hier?

\ No newline at end of file diff --git a/user-service/build/resources/main/log4j2.xml b/user-service/build/resources/main/log4j2.xml new file mode 100644 index 0000000..f2e539a --- /dev/null +++ b/user-service/build/resources/main/log4j2.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/user-service/build/resources/main/xxx.jks b/user-service/build/resources/main/xxx.jks new file mode 100644 index 0000000..2d75a54 Binary files /dev/null and b/user-service/build/resources/main/xxx.jks differ diff --git a/user-service/build/tmp/compileJava/previous-compilation-data.bin b/user-service/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000..1444533 Binary files /dev/null and b/user-service/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/user-service/build/tmp/war/MANIFEST.MF b/user-service/build/tmp/war/MANIFEST.MF new file mode 100644 index 0000000..58630c0 --- /dev/null +++ b/user-service/build/tmp/war/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/user-service/src/main/java/de/oaa/xxx/user/LoginService.java b/user-service/src/main/java/de/oaa/xxx/user/LoginService.java new file mode 100644 index 0000000..0fb0859 --- /dev/null +++ b/user-service/src/main/java/de/oaa/xxx/user/LoginService.java @@ -0,0 +1,113 @@ +package de.oaa.xxx.user; + +import java.io.IOException; +import java.security.Key; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.UnrecoverableKeyException; +import java.security.cert.CertificateException; +import java.util.Base64; +import java.util.Date; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jws; +import io.jsonwebtoken.JwtBuilder; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.Status; +import jakarta.ws.rs.core.UriInfo; + +@ApplicationScoped +@Path("login") +public class LoginService { + + private String keyPass = "XUR!Rv&f$j3UsqD&"; + private String alias = "xxx"; + private Logger LOGGER = LoggerFactory.getLogger(getClass()); + + @Inject private UserDAO dao; + + @GET + @Produces(MediaType.TEXT_PLAIN) + public Response login(@QueryParam("email") String email, @QueryParam("hash") String hash, @Context HttpServletRequest req) throws NoSuchAlgorithmException, CertificateException, IOException, KeyStoreException, UnrecoverableKeyException { + UserEntity user = dao.login(email, hash); + if (user != null) { + LOGGER.info("User erolgreich angemeldet: " + email); + KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); + keystore.load(getClass().getClassLoader().getResourceAsStream("/xxx.jks"), keyPass.toCharArray()); + Key key = keystore.getKey(alias, keyPass.toCharArray()); + JwtBuilder builder = Jwts.builder() + .setIssuer("OAA Games") + .setIssuedAt(new Date()) + .claim("email", email) + .claim("client", req.getRemoteAddr()) + .claim("userId", user.getUserId()) + .signWith(key, SignatureAlgorithm.RS256); + String token = builder.compact(); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("Erstellter token: {}", token); + } + return Response.ok(token).build(); + } else { + return Response.noContent().build(); + } + } + + @POST + @Consumes(MediaType.APPLICATION_JSON) + public Response checkToken(@QueryParam("token") String token, @Context HttpServletRequest req, @Context UriInfo urlInfo) throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException, UnrecoverableKeyException { + KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); + keystore.load(getClass().getClassLoader().getResourceAsStream("/xxx.jks"), keyPass.toCharArray()); + Key key = keystore.getKey(alias, keyPass.toCharArray()); + + Jws claimsJws = Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token); + String client = claimsJws.getBody().get("client").toString(); + UUID fromString = UUID.fromString(claimsJws.getBody().get("userId").toString()); + UserEntity user = dao.findById(fromString); + if (user != null && user.getEmail().equals(claimsJws.getBody().get("email").toString()) && req.getRemoteAddr().equals(client)) { + return Response.created(urlInfo.getAbsolutePathBuilder().path(user.getUserId().toString()).build()).build(); + } else { + return Response.status(Status.BAD_REQUEST).build(); + } + } + + @GET + @Path("{userId}") + @Produces(MediaType.APPLICATION_JSON) + public Response get(@PathParam("userId") String userId) { + UserEntity entity = dao.findById(UUID.fromString(userId)); + if (entity != null) { + return Response.ok(entity.toUser()).build(); + } else { + return Response.noContent().build(); + } + } + + @GET + @Path("publickey") + @Produces(MediaType.TEXT_PLAIN) + public Response getPK() throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException { + KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); + keystore.load(getClass().getClassLoader().getResourceAsStream("/xxx.jks"), keyPass.toCharArray()); + String string = Base64.getEncoder().encodeToString(keystore.getCertificate(alias).getPublicKey().getEncoded()); + return Response.ok(string).build(); + } +} diff --git a/user-service/src/main/java/de/oaa/xxx/user/Registration.java b/user-service/src/main/java/de/oaa/xxx/user/Registration.java new file mode 100644 index 0000000..81a2e60 --- /dev/null +++ b/user-service/src/main/java/de/oaa/xxx/user/Registration.java @@ -0,0 +1,50 @@ +package de.oaa.xxx.user; + +import java.util.UUID; + +public class Registration { + + private UUID id; + private String name; + private String email; + private String passwordHash; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPasswordHash() { + return passwordHash; + } + + public void setPasswordHash(String passwordHash) { + this.passwordHash = passwordHash; + } + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + @Override + public String toString() { + return "Registration [id=" + id + ", name=" + name + ", email=" + email + ", passwordHash=" + passwordHash + + "]"; + } + +} diff --git a/user-service/src/main/java/de/oaa/xxx/user/User.java b/user-service/src/main/java/de/oaa/xxx/user/User.java new file mode 100644 index 0000000..863b2a6 --- /dev/null +++ b/user-service/src/main/java/de/oaa/xxx/user/User.java @@ -0,0 +1,43 @@ +package de.oaa.xxx.user; + +import java.util.UUID; + +public class User { + + private UUID userId; + private String name; + private String email; + private String password; + + public UUID getUserId() { + return userId; + } + + public void setUserId(UUID userId) { + this.userId = userId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } +} diff --git a/user-service/src/main/java/de/oaa/xxx/user/UserApplication.java b/user-service/src/main/java/de/oaa/xxx/user/UserApplication.java new file mode 100644 index 0000000..d5279b7 --- /dev/null +++ b/user-service/src/main/java/de/oaa/xxx/user/UserApplication.java @@ -0,0 +1,9 @@ +package de.oaa.xxx.user; + +import jakarta.ws.rs.ApplicationPath; +import jakarta.ws.rs.core.Application; + +@ApplicationPath("/") +public class UserApplication extends Application { + +} diff --git a/user-service/src/main/java/de/oaa/xxx/user/UserDAO.java b/user-service/src/main/java/de/oaa/xxx/user/UserDAO.java new file mode 100644 index 0000000..85aeefa --- /dev/null +++ b/user-service/src/main/java/de/oaa/xxx/user/UserDAO.java @@ -0,0 +1,74 @@ +package de.oaa.xxx.user; + +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import jakarta.annotation.Resource; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.persistence.TypedQuery; +import jakarta.transaction.UserTransaction; + +@ApplicationScoped +public class UserDAO { + + private Logger LOGGER = LoggerFactory.getLogger(getClass()); + + @PersistenceContext(name = "user") + private EntityManager entityManager; + @Resource + private UserTransaction transaction; + + public void update(UserEntity toUpdate) { + try { + transaction.begin(); + entityManager.merge(toUpdate); + transaction.commit(); + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + } + } + + public void persist(UserEntity toPersist) { + try { + transaction.begin(); + LOGGER.info("Persisting Entity " + toPersist); + entityManager.persist(toPersist); + transaction.commit(); + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + } + } + + public void remove(UserEntity toRemove) { + try { + transaction.begin(); + entityManager.remove(toRemove); + transaction.commit(); + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + } + } + + public UserEntity findById(UUID id) { + return entityManager.find(UserEntity.class, id); + } + + public UserEntity login(String email, String password) { + try { + transaction.begin(); + TypedQuery query = entityManager.createQuery("select u from UserEntity u where u.email = :email and u.password = :password", UserEntity.class); + query.setParameter("email", email); + query.setParameter("password", password); + UserEntity result = query.getSingleResult(); + transaction.commit(); + return result; + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + return null; + } + } +} \ No newline at end of file diff --git a/user-service/src/main/java/de/oaa/xxx/user/UserEntity.java b/user-service/src/main/java/de/oaa/xxx/user/UserEntity.java new file mode 100644 index 0000000..17b4d69 --- /dev/null +++ b/user-service/src/main/java/de/oaa/xxx/user/UserEntity.java @@ -0,0 +1,62 @@ +package de.oaa.xxx.user; + +import java.util.UUID; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; + +@Entity +@Table(name = "user") +public class UserEntity { + @Id + @Column + private UUID userId; + @Column + private String name; + @Column + private String email; + @Column + private String password; + + public UUID getUserId() { + return userId; + } + + public void setUserId(UUID userId) { + this.userId = userId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public User toUser() { + User user = new User(); + user.setEmail(email); + user.setName(name); + user.setUserId(userId); + return user; + } +} diff --git a/user-service/src/main/java/de/oaa/xxx/user/UserResource.java b/user-service/src/main/java/de/oaa/xxx/user/UserResource.java new file mode 100644 index 0000000..5d5cddb --- /dev/null +++ b/user-service/src/main/java/de/oaa/xxx/user/UserResource.java @@ -0,0 +1,38 @@ +package de.oaa.xxx.user; + +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.core.Response; + +@ApplicationScoped +@Path("user") +public class UserResource { + + @Inject private UserDAO dao; + + private static final Logger LOGGER = LoggerFactory.getLogger(UserResource.class); + + @POST + public Response userAnlegen(Registration registration) { + try { + UserEntity entity = new UserEntity(); + entity.setUserId(UUID.randomUUID()); + entity.setEmail(registration.getEmail()); + entity.setName(registration.getName()); + entity.setPassword(registration.getPasswordHash()); + dao.persist(entity); + return Response.ok().build(); + } catch (Exception exception) { + LOGGER.error(exception.getMessage(), exception); + return Response.serverError().build(); + } + + } +} diff --git a/user-service/src/main/resources/log4j2.xml b/user-service/src/main/resources/log4j2.xml new file mode 100644 index 0000000..f2e539a --- /dev/null +++ b/user-service/src/main/resources/log4j2.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/user-service/src/main/webapp/META-INF/hibernate.cfg.xml b/user-service/src/main/webapp/META-INF/hibernate.cfg.xml new file mode 100644 index 0000000..315bcff --- /dev/null +++ b/user-service/src/main/webapp/META-INF/hibernate.cfg.xml @@ -0,0 +1,13 @@ + + + + + + org.hibernate.dialect.MySQLDialect + + + validate + + \ No newline at end of file diff --git a/user-service/src/main/webapp/META-INF/persistence.xml b/user-service/src/main/webapp/META-INF/persistence.xml new file mode 100644 index 0000000..0e5baf6 --- /dev/null +++ b/user-service/src/main/webapp/META-INF/persistence.xml @@ -0,0 +1,20 @@ + + + + + org.hibernate.ejb.HibernatePersistence + java:/User + + + + + + \ No newline at end of file diff --git a/user-service/src/main/webapp/WEB-INF/web.xml b/user-service/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..afa4e62 --- /dev/null +++ b/user-service/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/user-service/src/main/webapp/index.html b/user-service/src/main/webapp/index.html new file mode 100644 index 0000000..f8a3eed --- /dev/null +++ b/user-service/src/main/webapp/index.html @@ -0,0 +1 @@ +

Was machst du hier?

\ No newline at end of file diff --git a/user-service/src/main/webapp/xxx.jks b/user-service/src/main/webapp/xxx.jks new file mode 100644 index 0000000..2d75a54 Binary files /dev/null and b/user-service/src/main/webapp/xxx.jks differ diff --git a/xxx-login-module/.classpath b/xxx-login-module/.classpath new file mode 100644 index 0000000..b647cb9 --- /dev/null +++ b/xxx-login-module/.classpath @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/xxx-login-module/.project b/xxx-login-module/.project new file mode 100644 index 0000000..2cfb79d --- /dev/null +++ b/xxx-login-module/.project @@ -0,0 +1,23 @@ + + + xxx-login-module + Project xxx-login-module created by Buildship. + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.buildship.core.gradleprojectnature + + diff --git a/xxx-login-module/.settings/org.eclipse.buildship.core.prefs b/xxx-login-module/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..a7b84d9 --- /dev/null +++ b/xxx-login-module/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,2 @@ +connection.project.dir=.. +eclipse.preferences.version=1 diff --git a/xxx-login-module/bin/main/de/oaa/xxx/login/XXXLoginModule.class b/xxx-login-module/bin/main/de/oaa/xxx/login/XXXLoginModule.class new file mode 100644 index 0000000..ab9591b Binary files /dev/null and b/xxx-login-module/bin/main/de/oaa/xxx/login/XXXLoginModule.class differ diff --git a/xxx-login-module/build.gradle b/xxx-login-module/build.gradle new file mode 100644 index 0000000..5df49a8 --- /dev/null +++ b/xxx-login-module/build.gradle @@ -0,0 +1,28 @@ +plugins { + id 'java' +} + +repositories { + mavenCentral() +} + +dependencies { + compileOnly 'org.wildfly:wildfly-client-all:27.0.1.Final' + + compileOnly 'jakarta.platform:jakarta.jakartaee-web-api:9.0.0' + compileOnly 'jakarta.persistence:jakarta.persistence-api:3.1.0' + compileOnly 'jakarta.resource:jakarta.resource-api:2.1.0' + + compileOnly 'org.jboss.ejb3:jboss-ejb3-ext-api:2.3.0.Final' + + compileOnly 'org.apache.kafka:kafka-clients:3.2.2' + compileOnly 'org.apache.logging.log4j:log4j-slf4j-impl:2.19.0' + + compileOnly 'fish.payara.cloud.connectors.kafka:kafka-jca-api:1.0.0' + + testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1' +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/xxx-login-module/src/main/java/de/oaa/xxx/login/XXXLoginModule.java b/xxx-login-module/src/main/java/de/oaa/xxx/login/XXXLoginModule.java new file mode 100644 index 0000000..c2f8319 --- /dev/null +++ b/xxx-login-module/src/main/java/de/oaa/xxx/login/XXXLoginModule.java @@ -0,0 +1,47 @@ +package de.oaa.xxx.login; + +import java.util.Map; + +import javax.security.auth.Subject; +import javax.security.auth.callback.CallbackHandler; +import javax.security.auth.callback.NameCallback; +import javax.security.auth.login.LoginException; +import javax.security.auth.spi.LoginModule; + +import org.jgroups.util.NameCache; + +public class XXXLoginModule implements LoginModule { + + @Override + public void initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, + Map options) { + // TODO Auto-generated method stub + + } + + @Override + public boolean login() throws LoginException { + NameCallback + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean commit() throws LoginException { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean abort() throws LoginException { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean logout() throws LoginException { + // TODO Auto-generated method stub + return false; + } + +}