fixing Web-App

This commit is contained in:
2025-09-27 01:00:34 +02:00
parent 6a40375e3f
commit 7f64167983
23 changed files with 126 additions and 252 deletions
-1
View File
@@ -9,7 +9,6 @@ plugins {
} }
subprojects { subprojects {
// Wende gemeinsame Einstellungen an // Wende gemeinsame Einstellungen an
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach { tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
compilerOptions { compilerOptions {
+15 -29
View File
@@ -18,7 +18,6 @@ group = "at.mocode.clients"
version = "1.0.0" version = "1.0.0"
kotlin { kotlin {
val enableWasm = providers.gradleProperty("enableWasm").orNull == "true" val enableWasm = providers.gradleProperty("enableWasm").orNull == "true"
jvmToolchain(21) jvmToolchain(21)
@@ -33,21 +32,6 @@ kotlin {
js(IR) { js(IR) {
outputModuleName = "web-app" outputModuleName = "web-app"
browser { browser {
webpackTask {
mainOutputFileName = "web-app.js"
output.libraryTarget = "commonjs2"
}
// Development Server konfigurieren
runTask {
mainOutputFileName.set("web-app.js")
}
// Browser-Tests komplett deaktivieren (Configuration Cache kompatibel)
testTask {
enabled = false
}
commonWebpackConfig { commonWebpackConfig {
cssSupport { enabled = true } cssSupport { enabled = true }
// Webpack-Mode abhängig von Build-Typ // Webpack-Mode abhängig von Build-Typ
@@ -56,7 +40,18 @@ kotlin {
else else
KotlinWebpackConfig.Mode.DEVELOPMENT KotlinWebpackConfig.Mode.DEVELOPMENT
} }
webpackTask {
mainOutputFileName = "web-app.js"
output.libraryTarget = "commonjs2"
}
// Development Server konfigurieren
runTask {
mainOutputFileName.set("web-app.js")
}
// Browser-Tests komplett deaktivieren (Configuration Cache kompatibel)
testTask {
enabled = false
}
} }
binaries.executable() binaries.executable()
} }
@@ -72,21 +67,17 @@ kotlin {
applyDefaultHierarchyTemplate() applyDefaultHierarchyTemplate()
sourceSets { sourceSets {
commonMain.dependencies { commonMain.dependencies {
// Feature modules // Feature modules
implementation(project(":clients:ping-feature")) implementation(project(":clients:ping-feature"))
// Shared modules // Shared modules
implementation(project(":clients:shared:common-ui")) implementation(project(":clients:shared:common-ui"))
implementation(project(":clients:shared:navigation")) implementation(project(":clients:shared:navigation"))
// Compose dependencies // Compose dependencies
implementation(compose.runtime) implementation(compose.runtime)
implementation(compose.foundation) implementation(compose.foundation)
implementation(compose.material3) implementation(compose.material3)
implementation(compose.ui) implementation(compose.ui)
// ViewModel lifecycle // ViewModel lifecycle
implementation(libs.androidx.lifecycle.viewmodelCompose) implementation(libs.androidx.lifecycle.viewmodelCompose)
} }
@@ -95,19 +86,14 @@ kotlin {
implementation(libs.kotlinx.coroutines.swing) implementation(libs.kotlinx.coroutines.swing)
implementation(libs.kotlinx.coroutines.core) implementation(libs.kotlinx.coroutines.core)
} }
jsMain.dependencies { jsMain.dependencies {
implementation(npm("html-webpack-plugin", "5.6.4")) implementation(npm("html-webpack-plugin", "5.6.4"))
} }
if (enableWasm) { if (enableWasm) {
val wasmJsMain by getting { wasmJsMain.dependencies {
dependencies { implementation(npm("html-webpack-plugin", "5.6.4"))
implementation(npm("html-webpack-plugin", "5.6.4"))
}
} }
} }
commonTest.dependencies { commonTest.dependencies {
implementation(libs.kotlin.test) implementation(libs.kotlin.test)
} }
@@ -124,7 +110,6 @@ tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
} }
} }
// Configure duplicate handling strategy for distribution tasks // Configure duplicate handling strategy for distribution tasks
tasks.withType<Tar> { tasks.withType<Tar> {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE duplicatesStrategy = DuplicatesStrategy.EXCLUDE
@@ -138,6 +123,7 @@ tasks.withType<Zip> {
tasks.withType<Copy> { tasks.withType<Copy> {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE duplicatesStrategy = DuplicatesStrategy.EXCLUDE
} }
tasks.withType<Sync> { tasks.withType<Sync> {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE duplicatesStrategy = DuplicatesStrategy.EXCLUDE
} }
+33 -40
View File
@@ -15,7 +15,11 @@ version = "1.0.0"
kotlin { kotlin {
val enableWasm = providers.gradleProperty("enableWasm").orNull == "true" val enableWasm = providers.gradleProperty("enableWasm").orNull == "true"
jvmToolchain(21)
jvm() jvm()
js { js {
browser { browser {
testTask { testTask {
@@ -31,50 +35,39 @@ kotlin {
} }
} }
jvmToolchain(21)
sourceSets { sourceSets {
commonMain { commonMain.dependencies {
dependencies { // Contract from backend
// Contract from backend implementation(projects.services.ping.pingApi)
implementation(projects.services.ping.pingApi) // UI Kit
implementation(project(":clients:shared:common-ui"))
// UI Kit // Compose dependencies
implementation(project(":clients:shared:common-ui")) implementation(compose.runtime)
implementation(compose.foundation)
// Compose dependencies implementation(compose.material3)
implementation(compose.runtime) implementation(compose.ui)
implementation(compose.foundation) // Ktor client for HTTP calls
implementation(compose.material3) implementation(libs.ktor.client.core)
implementation(compose.ui) implementation(libs.ktor.client.contentNegotiation)
implementation(libs.ktor.client.serialization.kotlinx.json)
// Ktor client for HTTP calls // Coroutines and serialization
implementation(libs.ktor.client.core) implementation(libs.kotlinx.coroutines.core)
implementation(libs.ktor.client.contentNegotiation) implementation(libs.kotlinx.serialization.json)
implementation(libs.ktor.client.serialization.kotlinx.json) // ViewModel lifecycle
implementation(libs.androidx.lifecycle.viewmodelCompose)
// Coroutines and serialization
implementation(libs.kotlinx.coroutines.core)
implementation(libs.kotlinx.serialization.json)
// ViewModel lifecycle
implementation(libs.androidx.lifecycle.viewmodelCompose)
}
} }
commonTest {
dependencies { commonTest.dependencies {
implementation(libs.kotlin.test) implementation(libs.kotlin.test)
}
} }
jvmMain {
dependencies { jvmMain.dependencies {
implementation(libs.ktor.client.cio) implementation(libs.ktor.client.cio)
}
} }
jsMain {
dependencies { jsMain.dependencies {
implementation(libs.ktor.client.js) implementation(libs.ktor.client.js)
}
} }
} }
} }
+12 -14
View File
@@ -13,7 +13,11 @@ version = "1.0.0"
kotlin { kotlin {
val enableWasm = providers.gradleProperty("enableWasm").orNull == "true" val enableWasm = providers.gradleProperty("enableWasm").orNull == "true"
jvmToolchain(21)
jvm() jvm()
js { js {
browser { browser {
testTask { testTask {
@@ -29,22 +33,16 @@ kotlin {
} }
} }
jvmToolchain(21)
sourceSets { sourceSets {
commonMain { commonMain.dependencies {
dependencies { implementation(compose.runtime)
implementation(compose.runtime) implementation(compose.foundation)
implementation(compose.foundation) implementation(compose.material3)
implementation(compose.material3) implementation(compose.ui)
implementation(compose.ui) implementation(compose.components.resources)
implementation(compose.components.resources)
}
} }
commonTest { commonTest.dependencies {
dependencies { implementation(libs.kotlin.test)
implementation(libs.kotlin.test)
}
} }
} }
} }
+9 -10
View File
@@ -11,10 +11,15 @@ version = "1.0.0"
kotlin { kotlin {
val enableWasm = providers.gradleProperty("enableWasm").orNull == "true" val enableWasm = providers.gradleProperty("enableWasm").orNull == "true"
jvmToolchain(21)
jvm() jvm()
js { js {
browser() browser()
} }
if (enableWasm) { if (enableWasm) {
@OptIn(org.jetbrains.kotlin.gradle.ExperimentalWasmDsl::class) @OptIn(org.jetbrains.kotlin.gradle.ExperimentalWasmDsl::class)
wasmJs { wasmJs {
@@ -22,18 +27,12 @@ kotlin {
} }
} }
jvmToolchain(21)
sourceSets { sourceSets {
commonMain { commonMain.dependencies {
dependencies { // No specific dependencies needed for navigation routes
// No specific dependencies needed for navigation routes
}
} }
commonTest { commonTest.dependencies {
dependencies { implementation(libs.kotlin.test)
implementation(libs.kotlin.test)
}
} }
} }
} }
+25 -35
View File
@@ -1,10 +1,11 @@
// Core domain objects of the Shared kernel
plugins { plugins {
alias(libs.plugins.kotlinMultiplatform) alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.kotlinSerialization) alias(libs.plugins.kotlinSerialization)
} }
kotlin { kotlin {
jvmToolchain(21)
jvm { jvm {
compilerOptions { compilerOptions {
freeCompilerArgs.add("-opt-in=kotlin.time.ExperimentalTime") freeCompilerArgs.add("-opt-in=kotlin.time.ExperimentalTime")
@@ -16,51 +17,40 @@ kotlin {
} }
sourceSets { sourceSets {
val commonMain by getting { commonMain.dependencies {
dependencies { // Core dependencies (that aren't included in platform-dependencies)
// Core dependencies (that aren't included in platform-dependencies) api(libs.uuid)
api(libs.uuid) // Serialization and date-time for commonMain
// Serialization and date-time for commonMain api(libs.kotlinx.serialization.json)
api(libs.kotlinx.serialization.json) api(libs.kotlinx.datetime)
api(libs.kotlinx.datetime)
}
} }
val commonTest by getting { commonTest.dependencies {
dependencies { implementation(libs.kotlin.test)
implementation(libs.kotlin.test)
}
} }
val jsMain by getting { jsMain.dependencies {
dependencies { api(libs.kotlinx.coroutines.core)
api(libs.kotlinx.coroutines.core)
}
} }
val jsTest by getting { jsTest.dependencies {
dependencies { implementation(libs.kotlin.test)
implementation(libs.kotlin.test)
}
} }
val jvmMain by getting { jvmMain.dependencies {
dependencies { // Fachliches Domain-Modul: keine technischen Abhängigkeiten hier hinterlegen.
// Fachliches Domain-Modul: keine technischen Abhängigkeiten hier hinterlegen. // Falls in Zukunft JVM-spezifische, fachlich neutrale Ergänzungen nötig sind,
// Falls in Zukunft JVM-spezifische, fachlich neutrale Ergänzungen nötig sind, // bitte bewusst und minimal hinzugen.
// bitte bewusst und minimal hinzufügen.
}
} }
val jvmTest by getting { jvmTest.dependencies {
dependencies { // implementation(kotlin("test-junit5"))
// implementation(kotlin("test-junit5")) implementation(libs.junit.jupiter.api)
implementation(libs.junit.jupiter.api) implementation(libs.mockk)
implementation(libs.mockk) implementation(projects.platform.platformTesting)
implementation(projects.platform.platformTesting) implementation(libs.bundles.testing.jvm)
implementation(libs.bundles.testing.jvm)
}
} }
} }
} }
+32 -46
View File
@@ -5,6 +5,8 @@ plugins {
} }
kotlin { kotlin {
jvmToolchain(21)
// Target platforms // Target platforms
jvm { jvm {
compilerOptions { compilerOptions {
@@ -17,57 +19,41 @@ kotlin {
} }
sourceSets { sourceSets {
val commonMain by getting { commonMain.dependencies {
dependencies { // Dependency on core-domain module to use its types
// Dependency on core-domain module to use its types api(projects.core.coreDomain)
api(projects.core.coreDomain) // Async support (available for all platforms)
api(libs.kotlinx.coroutines.core)
// Async support (available for all platforms) // Utilities (multiplatform compatible)
api(libs.kotlinx.coroutines.core) api(libs.bignum)
// Utilities (multiplatform compatible)
api(libs.bignum)
}
} }
val commonTest by getting { commonTest.dependencies {
dependencies { implementation(libs.kotlin.test)
implementation(libs.kotlin.test)
}
} }
val jvmMain by getting { jvmMain.dependencies {
dependencies { // JVM-specific dependencies - access to central catalog
// JVM-specific dependencies - access to central catalog api(projects.platform.platformDependencies)
api(projects.platform.platformDependencies) // Database Management (JVM-specific)
api(libs.bundles.exposed)
// Database Management (JVM-specific) api(libs.bundles.flyway)
api(libs.bundles.exposed) api(libs.hikari.cp)
api(libs.bundles.flyway) // Service Discovery (JVM-specific)
api(libs.hikari.cp) api(libs.spring.cloud.starter.consul.discovery)
// Logging (JVM-specific)
// Service Discovery (JVM-specific) api(libs.kotlin.logging.jvm)
api(libs.spring.cloud.starter.consul.discovery) // Jakarta Annotation API
api(libs.jakarta.annotation.api)
// Logging (JVM-specific) // JSON Processing
api(libs.kotlin.logging.jvm) api(libs.jackson.module.kotlin)
api(libs.jackson.datatype.jsr310)
// Jakarta Annotation API
api(libs.jakarta.annotation.api)
// JSON Processing
api(libs.jackson.module.kotlin)
api(libs.jackson.datatype.jsr310)
}
} }
jvmTest.dependencies {
val jvmTest by getting { // Testing (JVM-specific)
dependencies { implementation(projects.platform.platformTesting)
// Testing (JVM-specific) implementation(libs.bundles.testing.jvm)
implementation(projects.platform.platformTesting) runtimeOnly(libs.postgresql.driver)
implementation(libs.bundles.testing.jvm)
runtimeOnly(libs.postgresql.driver)
}
} }
} }
} }
@@ -28,24 +28,18 @@ java {
dependencies { dependencies {
// Stellt sicher, dass alle Versionen aus der zentralen BOM kommen. // Stellt sicher, dass alle Versionen aus der zentralen BOM kommen.
implementation(platform(projects.platform.platformBom)) implementation(platform(projects.platform.platformBom))
// Stellt gemeinsame Abhängigkeiten wie Coroutines und Logging bereit. // Stellt gemeinsame Abhängigkeiten wie Coroutines und Logging bereit.
implementation(projects.platform.platformDependencies) implementation(projects.platform.platformDependencies)
// Stellt Domänenobjekte und technische Utilities bereit. // Stellt Domänenobjekte und technische Utilities bereit.
implementation(projects.core.coreUtils) implementation(projects.core.coreUtils)
// Spring Security für OAuth2-Client-Funktionalität und JWT-Verarbeitung. // Spring Security für OAuth2-Client-Funktionalität und JWT-Verarbeitung.
implementation(libs.spring.boot.starter.oauth2.client) implementation(libs.spring.boot.starter.oauth2.client)
implementation(libs.spring.boot.starter.security) implementation(libs.spring.boot.starter.security)
implementation(libs.spring.security.oauth2.jose) implementation(libs.spring.security.oauth2.jose)
// Bibliothek zur einfachen Handhabung von JWTs. // Bibliothek zur einfachen Handhabung von JWTs.
implementation(libs.auth0.java.jwt) implementation(libs.auth0.java.jwt)
// JSON-Serialization für konsistente API-Datenverarbeitung. // JSON-Serialization für konsistente API-Datenverarbeitung.
implementation(libs.kotlinx.serialization.json) implementation(libs.kotlinx.serialization.json)
// Stellt alle Test-Abhängigkeiten gebündelt bereit. // Stellt alle Test-Abhängigkeiten gebündelt bereit.
testImplementation(projects.platform.platformTesting) testImplementation(projects.platform.platformTesting)
} }
@@ -23,39 +23,28 @@ springBoot {
dependencies { dependencies {
// Stellt sicher, dass alle Versionen aus der zentralen BOM kommen. // Stellt sicher, dass alle Versionen aus der zentralen BOM kommen.
implementation(platform(projects.platform.platformBom)) implementation(platform(projects.platform.platformBom))
// Stellt gemeinsame Abhängigkeiten bereit. // Stellt gemeinsame Abhängigkeiten bereit.
implementation(projects.platform.platformDependencies) implementation(projects.platform.platformDependencies)
// Nutzt die Client-Logik für die Kommunikation mit Keycloak. // Nutzt die Client-Logik für die Kommunikation mit Keycloak.
implementation(projects.infrastructure.auth.authClient) implementation(projects.infrastructure.auth.authClient)
// Spring Boot Starter für einen Web-Service. // Spring Boot Starter für einen Web-Service.
// OPTIMIERUNG: Verwendung des `spring-boot-essentials`-Bundles. // OPTIMIERUNG: Verwendung des `spring-boot-essentials`-Bundles.
implementation(libs.bundles.spring.boot.essentials) implementation(libs.bundles.spring.boot.essentials)
// Spring Security für die Absicherung des Servers. // Spring Security für die Absicherung des Servers.
implementation(libs.spring.boot.starter.security) implementation(libs.spring.boot.starter.security)
implementation(libs.spring.boot.starter.oauth2.resource.server) implementation(libs.spring.boot.starter.oauth2.resource.server)
// Keycloak Admin Client zur Verwaltung von Benutzern und Realms. // Keycloak Admin Client zur Verwaltung von Benutzern und Realms.
implementation(libs.keycloak.admin.client) implementation(libs.keycloak.admin.client)
// API-Dokumentation mit OpenAPI/Swagger. // API-Dokumentation mit OpenAPI/Swagger.
implementation(libs.springdoc.openapi.starter.webmvc.ui) implementation(libs.springdoc.openapi.starter.webmvc.ui)
// Monitoring und Metriken für Production-Readiness. // Monitoring und Metriken für Production-Readiness.
implementation(libs.bundles.monitoring.client) implementation(libs.bundles.monitoring.client)
// JSON-Serialization für API-Responses. // JSON-Serialization für API-Responses.
implementation(libs.kotlinx.serialization.json) implementation(libs.kotlinx.serialization.json)
// Stellt alle Test-Abhängigkeiten gebündelt bereit. // Stellt alle Test-Abhängigkeiten gebündelt bereit.
testImplementation(projects.platform.platformTesting) testImplementation(projects.platform.platformTesting)
// Testcontainers für Integration Tests // Testcontainers für Integration Tests
testImplementation(libs.bundles.testcontainers) testImplementation(libs.bundles.testcontainers)
// SLF4J provider for tests // SLF4J provider for tests
testImplementation(libs.logback.classic) testImplementation(libs.logback.classic)
testImplementation(libs.logback.core) testImplementation(libs.logback.core)
-1
View File
@@ -27,7 +27,6 @@ dependencies {
api(platform(projects.platform.platformBom)) api(platform(projects.platform.platformBom))
// Stellt gemeinsame Abhängigkeiten wie Logging bereit und exportiert sie für Konsumenten der API. // Stellt gemeinsame Abhängigkeiten wie Logging bereit und exportiert sie für Konsumenten der API.
api(projects.platform.platformDependencies) api(projects.platform.platformDependencies)
// Stellt Test-Abhängigkeiten bereit. // Stellt Test-Abhängigkeiten bereit.
testImplementation(projects.platform.platformTesting) testImplementation(projects.platform.platformTesting)
} }
-3
View File
@@ -26,14 +26,11 @@ java {
dependencies { dependencies {
// Stellt sicher, dass alle Versionen aus der zentralen BOM kommen. // Stellt sicher, dass alle Versionen aus der zentralen BOM kommen.
api(platform(projects.platform.platformBom)) api(platform(projects.platform.platformBom))
// Implementiert die provider-agnostische Caching-API. // Implementiert die provider-agnostische Caching-API.
implementation(projects.infrastructure.cache.cacheApi) implementation(projects.infrastructure.cache.cacheApi)
// OPTIMIERUNG: Verwendung des `redis-cache`-Bundles aus libs.versions.toml. // OPTIMIERUNG: Verwendung des `redis-cache`-Bundles aus libs.versions.toml.
// Dieses Bundle enthält Spring Data Redis, Lettuce und Jackson-Module. // Dieses Bundle enthält Spring Data Redis, Lettuce und Jackson-Module.
implementation(libs.bundles.redis.cache) implementation(libs.bundles.redis.cache)
// Stellt alle Test-Abhängigkeiten gebündelt bereit. // Stellt alle Test-Abhängigkeiten gebündelt bereit.
testImplementation(projects.platform.platformTesting) testImplementation(projects.platform.platformTesting)
testImplementation(libs.bundles.testing.jvm) testImplementation(libs.bundles.testing.jvm)
@@ -27,17 +27,14 @@ dependencies {
// === Core Dependencies === // === Core Dependencies ===
// Stellt sicher, dass alle Versionen aus der zentralen BOM kommen // Stellt sicher, dass alle Versionen aus der zentralen BOM kommen
implementation(platform(projects.platform.platformBom)) implementation(platform(projects.platform.platformBom))
// Abhängigkeit zu den Core-Modulen, um auf Domänenobjekte (Events) // Abhängigkeit zu den Core-Modulen, um auf Domänenobjekte (Events)
// und technische Hilfsklassen zugreifen zu können // und technische Hilfsklassen zugreifen zu können
api(projects.core.coreDomain) api(projects.core.coreDomain)
implementation(projects.core.coreUtils) implementation(projects.core.coreUtils)
// === Test Dependencies === // === Test Dependencies ===
// Stellt alle Test-Abhängigkeiten gebündelt bereit // Stellt alle Test-Abhängigkeiten gebündelt bereit
testImplementation(projects.platform.platformTesting) testImplementation(projects.platform.platformTesting)
testImplementation(libs.bundles.testing.jvm) testImplementation(libs.bundles.testing.jvm)
// Für erweiterte Test-Unterstützung bei API-Tests // Für erweiterte Test-Unterstützung bei API-Tests
testImplementation(libs.kotlinx.coroutines.test) testImplementation(libs.kotlinx.coroutines.test)
} }
@@ -46,7 +43,6 @@ dependencies {
// Optimiert die Test-Ausführung // Optimiert die Test-Ausführung
tasks.test { tasks.test {
useJUnitPlatform() useJUnitPlatform()
// Parallelisierung für bessere Performance // Parallelisierung für bessere Performance
maxParallelForks = (Runtime.getRuntime().availableProcessors() / 2).coerceAtLeast(1) maxParallelForks = (Runtime.getRuntime().availableProcessors() / 2).coerceAtLeast(1)
} }
@@ -20,31 +20,24 @@ dependencies {
// === Core Dependencies === // === Core Dependencies ===
// Stellt sicher, dass alle Versionen aus der zentralen BOM kommen // Stellt sicher, dass alle Versionen aus der zentralen BOM kommen
implementation(platform(projects.platform.platformBom)) implementation(platform(projects.platform.platformBom))
// Implementiert die provider-agnostische Event-Store-API // Implementiert die provider-agnostische Event-Store-API
api(projects.infrastructure.eventStore.eventStoreApi) api(projects.infrastructure.eventStore.eventStoreApi)
// Benötigt Zugriff auf Core-Module für Domänen-Events und Utilities // Benötigt Zugriff auf Core-Module für Domänen-Events und Utilities
implementation(projects.core.coreDomain) implementation(projects.core.coreDomain)
implementation(projects.core.coreUtils) implementation(projects.core.coreUtils)
// === Redis & Spring Dependencies === // === Redis & Spring Dependencies ===
// OPTIMIERUNG: Wiederverwendung des `redis-cache`-Bundles, da es die // OPTIMIERUNG: Wiederverwendung des `redis-cache`-Bundles, da es die
// gleichen Technologien (Spring Data Redis, Lettuce, Jackson) verwendet // gleichen Technologien (Spring Data Redis, Lettuce, Jackson) verwendet
implementation(libs.bundles.redis.cache) implementation(libs.bundles.redis.cache)
// Stellt Jakarta Annotations bereit (z. B. @PostConstruct), die von Spring verwendet werden // Stellt Jakarta Annotations bereit (z. B. @PostConstruct), die von Spring verwendet werden
implementation(libs.jakarta.annotation.api) implementation(libs.jakarta.annotation.api)
// Für Kotlin-spezifische Coroutines-Integration mit Spring // Für Kotlin-spezifische Coroutines-Integration mit Spring
implementation(libs.kotlinx.coroutines.reactor) implementation(libs.kotlinx.coroutines.reactor)
// === Test Dependencies === // === Test Dependencies ===
// Fügt JUnit, Mockk, AssertJ etc. für die Tests hinzu // Fügt JUnit, Mockk, AssertJ etc. für die Tests hinzu
testImplementation(projects.platform.platformTesting) testImplementation(projects.platform.platformTesting)
testImplementation(libs.bundles.testing.jvm) testImplementation(libs.bundles.testing.jvm)
testImplementation(libs.bundles.testcontainers) testImplementation(libs.bundles.testcontainers)
// Zusätzliche Test-Dependencies für erweiterte Event-Store-Tests // Zusätzliche Test-Dependencies für erweiterte Event-Store-Tests
testImplementation(libs.kotlinx.serialization.json) testImplementation(libs.kotlinx.serialization.json)
testImplementation(libs.reactor.test) testImplementation(libs.reactor.test)
@@ -65,10 +58,8 @@ tasks.jar {
// Optimiert die Test-Ausführung // Optimiert die Test-Ausführung
tasks.test { tasks.test {
useJUnitPlatform() useJUnitPlatform()
// Verbesserte Test-Performance für Testcontainer // Verbesserte Test-Performance für Testcontainer
systemProperty("testcontainers.reuse.enable", "true") systemProperty("testcontainers.reuse.enable", "true")
// Parallelisierung für bessere Performance // Parallelisierung für bessere Performance
maxParallelForks = (Runtime.getRuntime().availableProcessors() / 2).coerceAtLeast(1) maxParallelForks = (Runtime.getRuntime().availableProcessors() / 2).coerceAtLeast(1)
} }
-6
View File
@@ -31,7 +31,6 @@ dependencies {
implementation(projects.core.coreUtils) implementation(projects.core.coreUtils)
// Stellt gemeinsame Abhängigkeiten bereit. // Stellt gemeinsame Abhängigkeiten bereit.
implementation(projects.platform.platformDependencies) implementation(projects.platform.platformDependencies)
// Stellt die Spring Cloud Gateway und Consul Discovery Abhängigkeiten bereit // Stellt die Spring Cloud Gateway und Consul Discovery Abhängigkeiten bereit
implementation(libs.bundles.spring.cloud.gateway) implementation(libs.bundles.spring.cloud.gateway)
// Circuit Breaker (Resilience4j) für Gateway Filter - optimiert mit libs reference // Circuit Breaker (Resilience4j) für Gateway Filter - optimiert mit libs reference
@@ -44,21 +43,17 @@ dependencies {
implementation(libs.spring.boot.starter.webflux) implementation(libs.spring.boot.starter.webflux)
// Spring Security (WebFlux) benötigt für SecurityWebFilterChain-Konfiguration // Spring Security (WebFlux) benötigt für SecurityWebFilterChain-Konfiguration
implementation(libs.spring.boot.starter.security) implementation(libs.spring.boot.starter.security)
// Bindet die wiederverwendbare Logik zur JWT-Validierung ein. // Bindet die wiederverwendbare Logik zur JWT-Validierung ein.
implementation(projects.infrastructure.auth.authClient) implementation(projects.infrastructure.auth.authClient)
// Bindet die wiederverwendbare Logik für Metriken und Tracing ein. // Bindet die wiederverwendbare Logik für Metriken und Tracing ein.
implementation(projects.infrastructure.monitoring.monitoringClient) implementation(projects.infrastructure.monitoring.monitoringClient)
// Explizite Actuator-Abhängigkeit für Health Indicators (benötigt für GatewayHealthIndicator) // Explizite Actuator-Abhängigkeit für Health Indicators (benötigt für GatewayHealthIndicator)
// Obwohl bereits im monitoring-client Bundle, wird durch 'implementation' nicht transitiv verfügbar // Obwohl bereits im monitoring-client Bundle, wird durch 'implementation' nicht transitiv verfügbar
implementation(libs.spring.boot.starter.actuator) implementation(libs.spring.boot.starter.actuator)
// Logback-Abhängigkeiten - Versionen werden von Spring Boot BOM verwaltet // Logback-Abhängigkeiten - Versionen werden von Spring Boot BOM verwaltet
implementation("ch.qos.logback:logback-classic") implementation("ch.qos.logback:logback-classic")
implementation("ch.qos.logback:logback-core") implementation("ch.qos.logback:logback-core")
implementation("org.slf4j:slf4j-api") implementation("org.slf4j:slf4j-api")
// Stellt alle Test-Abhängigkeiten gebündelt bereit. // Stellt alle Test-Abhängigkeiten gebündelt bereit.
testImplementation(projects.platform.platformTesting) testImplementation(projects.platform.platformTesting)
testImplementation(libs.bundles.testing.jvm) testImplementation(libs.bundles.testing.jvm)
@@ -67,7 +62,6 @@ dependencies {
testImplementation("ch.qos.logback:logback-core") testImplementation("ch.qos.logback:logback-core")
testImplementation("org.slf4j:slf4j-api") testImplementation("org.slf4j:slf4j-api")
// Redundante Security-Abhängigkeit im Testkontext entfernt (bereits durch platform-testing abgedeckt) // Redundante Security-Abhängigkeit im Testkontext entfernt (bereits durch platform-testing abgedeckt)
} }
tasks.test { tasks.test {
@@ -28,10 +28,8 @@ dependencies {
implementation(projects.platform.platformDependencies) implementation(projects.platform.platformDependencies)
// Baut auf der zentralen Kafka-Konfiguration auf und erbt deren Abhängigkeiten. // Baut auf der zentralen Kafka-Konfiguration auf und erbt deren Abhängigkeiten.
implementation(projects.infrastructure.messaging.messagingConfig) implementation(projects.infrastructure.messaging.messagingConfig)
// Fügt die reaktive Kafka-Implementierung hinzu (Project Reactor). // Fügt die reaktive Kafka-Implementierung hinzu (Project Reactor).
implementation(libs.reactor.kafka) implementation(libs.reactor.kafka)
// Stellt alle Test-Abhängigkeiten gebündelt bereit. // Stellt alle Test-Abhängigkeiten gebündelt bereit.
testImplementation(projects.platform.platformTesting) testImplementation(projects.platform.platformTesting)
} }
@@ -26,12 +26,10 @@ dependencies {
api(platform(projects.platform.platformBom)) api(platform(projects.platform.platformBom))
// Stellt gemeinsame Abhängigkeiten bereit. // Stellt gemeinsame Abhängigkeiten bereit.
api(projects.platform.platformDependencies) api(projects.platform.platformDependencies)
// OPTIMIERUNG: Verwendung des `kafka-config`-Bundles. // OPTIMIERUNG: Verwendung des `kafka-config`-Bundles.
// `api` wird verwendet, damit der `messaging-client` diese Konfigurationen // `api` wird verwendet, damit der `messaging-client` diese Konfigurationen
// und Abhängigkeiten (wie Jackson) direkt nutzen kann. // und Abhängigkeiten (wie Jackson) direkt nutzen kann.
api(libs.bundles.kafka.config) api(libs.bundles.kafka.config)
// Stellt alle Test-Abhängigkeiten gebündelt bereit. // Stellt alle Test-Abhängigkeiten gebündelt bereit.
testImplementation(projects.platform.platformTesting) testImplementation(projects.platform.platformTesting)
} }
@@ -7,16 +7,12 @@ plugins {
alias(libs.plugins.spring.dependencyManagement) alias(libs.plugins.spring.dependencyManagement)
} }
dependencies { dependencies {
// Stellt sicher, dass alle Versionen aus der zentralen BOM kommen. // Stellt sicher, dass alle Versionen aus der zentralen BOM kommen.
implementation(platform(projects.platform.platformBom)) implementation(platform(projects.platform.platformBom))
// Stellt gemeinsame Abhängigkeiten bereit. // Stellt gemeinsame Abhängigkeiten bereit.
implementation(projects.platform.platformDependencies) implementation(projects.platform.platformDependencies)
// OPTIMIERUNG: Verwendung des `monitoring-client`-Bundles. // OPTIMIERUNG: Verwendung des `monitoring-client`-Bundles.
// Es enthält Spring Boot Actuator, Micrometer Prometheus und Zipkin Tracing. // Es enthält Spring Boot Actuator, Micrometer Prometheus und Zipkin Tracing.
implementation(libs.bundles.monitoring.client) implementation(libs.bundles.monitoring.client)
} }
@@ -17,16 +17,13 @@ dependencies {
implementation(platform(projects.platform.platformBom)) implementation(platform(projects.platform.platformBom))
// Stellt gemeinsame Abhängigkeiten bereit. // Stellt gemeinsame Abhängigkeiten bereit.
implementation(projects.platform.platformDependencies) implementation(projects.platform.platformDependencies)
// Spring Boot Starter für einen einfachen Web-Service. // Spring Boot Starter für einen einfachen Web-Service.
implementation(libs.spring.boot.starter.web) implementation(libs.spring.boot.starter.web)
implementation(libs.spring.boot.starter.actuator) implementation(libs.spring.boot.starter.actuator)
// Abhängigkeiten für den Zipkin-Server (UI ist via zipkin-lens bereits enthalten). // Abhängigkeiten für den Zipkin-Server (UI ist via zipkin-lens bereits enthalten).
implementation(libs.zipkin.server) implementation(libs.zipkin.server)
// Prometheus client für Zipkin Metriken // Prometheus client für Zipkin Metriken
implementation(libs.micrometer.prometheus) implementation(libs.micrometer.prometheus)
// Stellt alle Test-Abhängigkeiten gebündelt bereit. // Stellt alle Test-Abhängigkeiten gebündelt bereit.
testImplementation(projects.platform.platformTesting) testImplementation(projects.platform.platformTesting)
testImplementation(libs.logback.classic) // SLF4J provider for tests testImplementation(libs.logback.classic) // SLF4J provider for tests
-6
View File
@@ -19,7 +19,6 @@ dependencies {
api(platform(libs.spring.cloud.dependencies)) // NEU: Spring Cloud BOM hinzugefügt api(platform(libs.spring.cloud.dependencies)) // NEU: Spring Cloud BOM hinzugefügt
api(platform(libs.kotlin.bom)) api(platform(libs.kotlin.bom))
api(platform(libs.kotlinx.coroutines.bom)) api(platform(libs.kotlinx.coroutines.bom))
// `constraints` erzwingt spezifische Versionen für einzelne Bibliotheken. // `constraints` erzwingt spezifische Versionen für einzelne Bibliotheken.
// Alle Versionen werden sicher aus `libs.versions.toml` bezogen. // Alle Versionen werden sicher aus `libs.versions.toml` bezogen.
constraints { constraints {
@@ -35,11 +34,9 @@ dependencies {
api(libs.jakarta.annotation.api) api(libs.jakarta.annotation.api)
api(libs.auth0.java.jwt) api(libs.auth0.java.jwt)
api(libs.logback.classic) api(libs.logback.classic)
// --- Spring & SpringDoc --- // --- Spring & SpringDoc ---
api(libs.springdoc.openapi.starter.common) api(libs.springdoc.openapi.starter.common)
api(libs.springdoc.openapi.starter.webmvc.ui) api(libs.springdoc.openapi.starter.webmvc.ui)
// --- Database & Persistence --- // --- Database & Persistence ---
api(libs.bundles.exposed) api(libs.bundles.exposed)
api(libs.bundles.flyway) api(libs.bundles.flyway)
@@ -47,15 +44,12 @@ dependencies {
api(libs.hikari.cp) api(libs.hikari.cp)
api(libs.h2.driver) api(libs.h2.driver)
api(libs.lettuce.core) api(libs.lettuce.core)
// --- Kotlinx Libraries --- // --- Kotlinx Libraries ---
api(libs.kotlinx.serialization.json) api(libs.kotlinx.serialization.json)
api(libs.kotlinx.datetime) api(libs.kotlinx.datetime)
// --- Jackson Modules --- // --- Jackson Modules ---
api(libs.jackson.module.kotlin) api(libs.jackson.module.kotlin)
api(libs.jackson.datatype.jsr310) api(libs.jackson.datatype.jsr310)
// --- Testcontainers --- // --- Testcontainers ---
api(libs.bundles.testcontainers) api(libs.bundles.testcontainers)
} }
@@ -8,7 +8,6 @@ plugins {
dependencies { dependencies {
// Importiert die zentrale BOM, um konsistente Versionen zu gewährleisten. // Importiert die zentrale BOM, um konsistente Versionen zu gewährleisten.
api(platform(projects.platform.platformBom)) api(platform(projects.platform.platformBom))
// Stellt die wichtigsten Kotlin(x)-Bibliotheken via `api` bereit, // Stellt die wichtigsten Kotlin(x)-Bibliotheken via `api` bereit,
// damit jedes Modul, das von `platform-dependencies` abhängt, diese automatisch erhält. // damit jedes Modul, das von `platform-dependencies` abhängt, diese automatisch erhält.
api(libs.kotlinx.coroutines.core) api(libs.kotlinx.coroutines.core)
@@ -7,15 +7,12 @@ plugins {
dependencies { dependencies {
// Importiert die zentrale BOM für konsistente Versionen. // Importiert die zentrale BOM für konsistente Versionen.
api(platform(projects.platform.platformBom)) api(platform(projects.platform.platformBom))
// Diese Bundles sind in `libs.versions.toml` definiert. // Diese Bundles sind in `libs.versions.toml` definiert.
api(libs.bundles.testing.jvm) api(libs.bundles.testing.jvm)
api(libs.bundles.testcontainers) api(libs.bundles.testcontainers)
// Macht Kafka- und Reactor-Test-Bibliotheken verfügbar // Macht Kafka- und Reactor-Test-Bibliotheken verfügbar
api(libs.testcontainers.kafka) api(libs.testcontainers.kafka)
api(libs.reactor.test) api(libs.reactor.test)
// Stellt Spring Boot Test-Abhängigkeiten und die H2-Datenbank für Tests bereit. // Stellt Spring Boot Test-Abhängigkeiten und die H2-Datenbank für Tests bereit.
api(libs.spring.boot.starter.test) api(libs.spring.boot.starter.test)
api(libs.h2.driver) api(libs.h2.driver)
@@ -4,7 +4,6 @@ plugins {
alias(libs.plugins.kotlin.serialization) alias(libs.plugins.kotlin.serialization)
alias(libs.plugins.ktor) alias(libs.plugins.ktor)
application application
// KORREKTUR 1: Dieses Plugin hinzufügen, um die Spring-BOM zu aktivieren. // KORREKTUR 1: Dieses Plugin hinzufügen, um die Spring-BOM zu aktivieren.
alias(libs.plugins.spring.dependencyManagement) alias(libs.plugins.spring.dependencyManagement)
} }
@@ -16,18 +15,15 @@ application {
dependencies { dependencies {
// KORREKTUR 2: Die Spring-Boot-BOM hier explizit als Plattform deklarieren. // KORREKTUR 2: Die Spring-Boot-BOM hier explizit als Plattform deklarieren.
api(platform(libs.spring.boot.dependencies)) api(platform(libs.spring.boot.dependencies))
// Bestehende Abhängigkeiten // Bestehende Abhängigkeiten
implementation(projects.platform.platformDependencies) implementation(projects.platform.platformDependencies)
implementation(projects.events.eventsDomain) implementation(projects.events.eventsDomain)
implementation(projects.events.eventsApplication) implementation(projects.events.eventsApplication)
implementation(projects.core.coreDomain) implementation(projects.core.coreDomain)
implementation(projects.core.coreUtils) implementation(projects.core.coreUtils)
// Spring dependencies (jetzt mit korrekter Version aus der BOM) // Spring dependencies (jetzt mit korrekter Version aus der BOM)
implementation(libs.spring.web) implementation(libs.spring.web)
implementation(libs.springdoc.openapi.starter.common) implementation(libs.springdoc.openapi.starter.common)
// Ktor Server // Ktor Server
implementation(libs.ktor.server.core) implementation(libs.ktor.server.core)
implementation(libs.ktor.server.netty) implementation(libs.ktor.server.netty)
@@ -33,51 +33,39 @@ dependencies {
implementation(platform(projects.platform.platformBom)) implementation(platform(projects.platform.platformBom))
// Provide common Kotlin dependencies (coroutines, serialization, logging) // Provide common Kotlin dependencies (coroutines, serialization, logging)
implementation(projects.platform.platformDependencies) implementation(projects.platform.platformDependencies)
// Contract module for type-safe DTOs and API interface // Contract module for type-safe DTOs and API interface
implementation(projects.services.ping.pingApi) implementation(projects.services.ping.pingApi)
// Monitoring client: tracing + zipkin + defaults // Monitoring client: tracing + zipkin + defaults
implementation(projects.infrastructure.monitoring.monitoringClient) implementation(projects.infrastructure.monitoring.monitoringClient)
// === Core Spring Boot Dependencies === // === Core Spring Boot Dependencies ===
// Web starter for REST endpoints // Web starter for REST endpoints
implementation(libs.spring.boot.starter.web) implementation(libs.spring.boot.starter.web)
// Jackson Kotlin module for data classes and Kotlin features // Jackson Kotlin module for data classes and Kotlin features
implementation(libs.jackson.module.kotlin) implementation(libs.jackson.module.kotlin)
// Kotlin reflection for Spring Boot Kotlin serialization // Kotlin reflection for Spring Boot Kotlin serialization
implementation("org.jetbrains.kotlin:kotlin-reflect") implementation("org.jetbrains.kotlin:kotlin-reflect")
// Validation for request/response validation // Validation for request/response validation
implementation(libs.spring.boot.starter.validation) implementation(libs.spring.boot.starter.validation)
// Actuator for health checks and metrics // Actuator for health checks and metrics
implementation(libs.spring.boot.starter.actuator) implementation(libs.spring.boot.starter.actuator)
// === Service Discovery === // === Service Discovery ===
// Spring Cloud Consul for service registration and discovery // Spring Cloud Consul for service registration and discovery
implementation(libs.spring.cloud.starter.consul.discovery) implementation(libs.spring.cloud.starter.consul.discovery)
// === Caching === // === Caching ===
// Caffeine cache for Spring Cloud LoadBalancer (resolves production cache warning) // Caffeine cache for Spring Cloud LoadBalancer (resolves production cache warning)
implementation("com.github.ben-manes.caffeine:caffeine") implementation("com.github.ben-manes.caffeine:caffeine")
implementation("org.springframework:spring-context-support") implementation("org.springframework:spring-context-support")
// === Resilience & Fault Tolerance === // === Resilience & Fault Tolerance ===
// Resilience4j Circuit Breaker for fault tolerance // Resilience4j Circuit Breaker for fault tolerance
implementation(libs.resilience4j.spring.boot3) implementation(libs.resilience4j.spring.boot3)
implementation(libs.resilience4j.reactor) implementation(libs.resilience4j.reactor)
implementation(libs.spring.boot.starter.aop) implementation(libs.spring.boot.starter.aop)
// === Monitoring & Metrics === // === Monitoring & Metrics ===
// Micrometer for metrics collection and Prometheus integration // Micrometer for metrics collection and Prometheus integration
implementation(libs.micrometer.prometheus) implementation(libs.micrometer.prometheus)
// === Documentation === // === Documentation ===
// OpenAPI 3 documentation generation // OpenAPI 3 documentation generation
implementation(libs.springdoc.openapi.starter.webmvc.ui) implementation(libs.springdoc.openapi.starter.webmvc.ui)
// === Testing Dependencies === // === Testing Dependencies ===
// Platform testing utilities // Platform testing utilities
testImplementation(projects.platform.platformTesting) testImplementation(projects.platform.platformTesting)