diff --git a/JunieBerichte/Gradle Kotlin DSL Primer.pdf b/JunieBerichte/Gradle Kotlin DSL Primer.pdf new file mode 100644 index 00000000..0f89331d Binary files /dev/null and b/JunieBerichte/Gradle Kotlin DSL Primer.pdf differ diff --git a/JunieBerichte/What's new in Kotlin 2.3.0 _ Kotlin Documentation.pdf b/JunieBerichte/What's new in Kotlin 2.3.0 _ Kotlin Documentation.pdf new file mode 100644 index 00000000..292e289e Binary files /dev/null and b/JunieBerichte/What's new in Kotlin 2.3.0 _ Kotlin Documentation.pdf differ diff --git a/backend/infrastructure/gateway/build.gradle.kts b/backend/infrastructure/gateway/build.gradle.kts index f2c86b4d..8a3f8d80 100644 --- a/backend/infrastructure/gateway/build.gradle.kts +++ b/backend/infrastructure/gateway/build.gradle.kts @@ -7,7 +7,6 @@ plugins { alias(libs.plugins.kotlinSpring) alias(libs.plugins.kotlinJpa) alias(libs.plugins.spring.boot) - alias(libs.plugins.spring.dependencyManagement) } // Konfiguriert die Hauptklasse für das ausführbare JAR @@ -16,6 +15,7 @@ springBoot { } dependencies { + // Wiederherstellung des Standardzustands: Das Gateway verwendet das reparierte lokale BOM. implementation(platform(projects.platform.platformBom)) // === Core Dependencies === @@ -24,20 +24,16 @@ dependencies { implementation(projects.backend.infrastructure.monitoring.monitoringClient) // === GATEWAY-SPEZIFISCHE ABHÄNGIGKEITEN === - // KORREKTUR: Explizite Deklaration von WebFlux, da es in Spring Boot 4.x - // anscheinend nicht mehr vollständig transitiv vom Gateway-Starter eingebunden wird. - implementation(libs.spring.boot.starter.webflux) + // Die WebFlux-Abhängigkeit wird jetzt korrekt durch das BOM bereitgestellt. + // implementation(libs.spring.boot.starter.webflux) // Kern-Gateway inkl. Security, Actuator, CircuitBreaker, Discovery implementation(libs.bundles.gateway.core) // Ergänzende Observability (Logging, Jackson) implementation(libs.bundles.gateway.observability) // Redis-Unterstützung für verteiltes Rate Limiting (RequestRateLimiter) - // Umgestellt auf das spezifische Gateway-Redis-Bundle (einfach, leicht zu konfigurieren) implementation(libs.bundles.gateway.redis) - // Hinweis: Der Gateway benötigt keinen Datenbanktreiber → entfernt - // === Test Dependencies === testImplementation(projects.platform.platformTesting) testImplementation(libs.bundles.testing.jvm) diff --git a/backend/infrastructure/gateway/src/main/kotlin/at/mocode/infrastructure/gateway/error/ProblemDetailsExceptionHandler.kt b/backend/infrastructure/gateway/src/main/kotlin/at/mocode/infrastructure/gateway/error/ProblemDetailsExceptionHandler.kt index 61d881d3..10e00410 100644 --- a/backend/infrastructure/gateway/src/main/kotlin/at/mocode/infrastructure/gateway/error/ProblemDetailsExceptionHandler.kt +++ b/backend/infrastructure/gateway/src/main/kotlin/at/mocode/infrastructure/gateway/error/ProblemDetailsExceptionHandler.kt @@ -2,7 +2,7 @@ package at.mocode.infrastructure.gateway.error import com.fasterxml.jackson.databind.ObjectMapper import org.slf4j.LoggerFactory -import org.springframework.boot.web.reactive.error.ErrorWebExceptionHandler +import org.springframework.boot.webflux.error.ErrorWebExceptionHandler import org.springframework.http.HttpStatus import org.springframework.http.MediaType import org.springframework.stereotype.Component diff --git a/backend/infrastructure/gateway/src/main/kotlin/at/mocode/infrastructure/gateway/health/GatewayHealthIndicator.kt b/backend/infrastructure/gateway/src/main/kotlin/at/mocode/infrastructure/gateway/health/GatewayHealthIndicator.kt index 8bdbef8a..8ce6c554 100644 --- a/backend/infrastructure/gateway/src/main/kotlin/at/mocode/infrastructure/gateway/health/GatewayHealthIndicator.kt +++ b/backend/infrastructure/gateway/src/main/kotlin/at/mocode/infrastructure/gateway/health/GatewayHealthIndicator.kt @@ -42,6 +42,8 @@ class GatewayHealthIndicator( private val HEALTH_CHECK_TIMEOUT = Duration.ofSeconds(5) } + // KORREKTUR für Spring Boot 4: Die `health()`-Methode und ihr Rückgabetyp `Mono` + // erlauben keine Null-Werte mehr. Die Fragezeichen (?) wurden entfernt. override fun health(): Mono { val builder = Health.up() val details = mutableMapOf() diff --git a/backend/infrastructure/gateway/src/main/kotlin/at/mocode/infrastructure/gateway/metrics/GatewayMetricsConfig.kt b/backend/infrastructure/gateway/src/main/kotlin/at/mocode/infrastructure/gateway/metrics/GatewayMetricsConfig.kt index cd23d72d..41243e89 100644 --- a/backend/infrastructure/gateway/src/main/kotlin/at/mocode/infrastructure/gateway/metrics/GatewayMetricsConfig.kt +++ b/backend/infrastructure/gateway/src/main/kotlin/at/mocode/infrastructure/gateway/metrics/GatewayMetricsConfig.kt @@ -4,7 +4,7 @@ import io.micrometer.core.instrument.Counter import io.micrometer.core.instrument.MeterRegistry import io.micrometer.core.instrument.Timer import io.micrometer.core.instrument.config.MeterFilter -import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer +import org.springframework.boot.micrometer.metrics.autoconfigure.MeterRegistryCustomizer import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import org.springframework.web.server.ServerWebExchange diff --git a/backend/services/ping/ping-service/build.gradle.kts b/backend/services/ping/ping-service/build.gradle.kts index 27fd7cc5..d1e1465c 100644 --- a/backend/services/ping/ping-service/build.gradle.kts +++ b/backend/services/ping/ping-service/build.gradle.kts @@ -5,7 +5,8 @@ plugins { alias(libs.plugins.kotlinSpring) alias(libs.plugins.kotlinJpa) alias(libs.plugins.spring.boot) - alias(libs.plugins.spring.dependencyManagement) + // FINALE BEREINIGUNG: Das `dependencyManagement`-Plugin wird entfernt. + // alias(libs.plugins.spring.dependencyManagement) } // Configure the main class for the executable JAR @@ -14,10 +15,8 @@ springBoot { } dependencies { - // ULTIMATIVER TEST: Wir umgehen unser lokales BOM und importieren das offizielle Spring Boot BOM direkt. - // Wenn dies funktioniert, liegt der Fehler im Aufbau von `:platform:platform-bom`. - implementation(platform(libs.spring.boot.dependencies)) - // implementation(platform(projects.platform.platformBom)) + // Die `platform`-Deklaration ist der einzig korrekte Weg. + implementation(platform(projects.platform.platformBom)) // Platform und Core Dependencies implementation(projects.platform.platformDependencies) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index bc858e2d..f7cb6cb9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -160,6 +160,9 @@ spring-security-oauth2-jose = { module = "org.springframework.security:spring-se spring-web = { module = "org.springframework:spring-web" } springdoc-openapi-starter-common = { module = "org.springdoc:springdoc-openapi-starter-common", version.ref = "springdoc" } springdoc-openapi-starter-webmvc-ui = { module = "org.springdoc:springdoc-openapi-starter-webmvc-ui", version.ref = "springdoc" } +# KORREKTUR: WebFlux-Variante von SpringDoc hinzugefügt. +springdoc-openapi-starter-webflux-ui = { module = "org.springdoc:springdoc-openapi-starter-webflux-ui", version.ref = "springdoc" } + # --- Spring Cloud --- spring-cloud-starter-gateway-server-webflux = { module = "org.springframework.cloud:spring-cloud-starter-gateway-server-webflux" } diff --git a/platform/platform-bom/build.gradle.kts b/platform/platform-bom/build.gradle.kts index 56c5b73e..fdcddc09 100644 --- a/platform/platform-bom/build.gradle.kts +++ b/platform/platform-bom/build.gradle.kts @@ -40,9 +40,11 @@ dependencies { api(libs.logback.classic) // --- Spring & SpringDoc --- api(libs.springdoc.openapi.starter.common) - api(libs.springdoc.openapi.starter.webmvc.ui) + // KORREKTUR: `webmvc`-Starter durch `webflux`-Starter ersetzt, um Konflikt zu beheben. + api(libs.springdoc.openapi.starter.webflux.ui) // --- Database & Persistence --- - api(libs.bundles.exposed) + // CHIRURGISCHER EINGRIFF: `exposed`-Bundle entfernt, um Kotlin-Versionskonflikt zu beheben. + // api(libs.bundles.exposed) api(libs.bundles.flyway) api(libs.postgresql.driver) api(libs.hikari.cp) diff --git a/settings.gradle.kts b/settings.gradle.kts index d05243a9..4dc2573b 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -56,6 +56,10 @@ include(":backend:infrastructure:monitoring:monitoring-client") include(":backend:infrastructure:monitoring:monitoring-server") // === BACKEND - SERVICES === +// --- ENTRIES (Nennungen) --- +include(":backend:services:entries:entries-api") +include(":backend:services:entries:entries-service") + // --- EVENTS (Event Management) --- // include(":backend:services:events:events-api") // include(":backend:services:events:events-common") @@ -63,16 +67,6 @@ include(":backend:infrastructure:monitoring:monitoring-server") // include(":backend:services:events:events-infrastructure") // include(":backend:services:events:events-service") -// --- ENTRIES (Nennungen) --- -include(":backend:services:entries:entries-api") -include(":backend:services:entries:entries-service") - -// --- RESULTS (Ergebnisse) --- -include(":backend:services:results:results-service") - -// --- SCHEDULING (Zeitplan/Abteilungen) --- -include(":backend:services:scheduling:scheduling-service") - // --- HORSES (Horse Management) --- // include(":backend:services:horses:horses-api") // include(":backend:services:horses:horses-common") @@ -106,6 +100,12 @@ include(":backend:services:registry:registry-api") include(":backend:services:registry:registry-domain") include(":backend:services:registry:registry-service") +// --- RESULTS (Ergebnisse) --- +include(":backend:services:results:results-service") + +// --- SCHEDULING (Zeitplan/Abteilungen) --- +include(":backend:services:scheduling:scheduling-service") + // ========================================================================== // CORE // ==========================================================================