diff --git a/core/core-domain/build.gradle.kts b/core/core-domain/build.gradle.kts index abb21029..dd2a5bd0 100644 --- a/core/core-domain/build.gradle.kts +++ b/core/core-domain/build.gradle.kts @@ -1,15 +1,15 @@ plugins { // Definiert dieses Modul als ein Standard Kotlin/JVM-Modul. -// kotlin("jvm") + alias(libs.plugins.kotlin.jvm) // Aktiviert das Kotlinx Serialization Plugin, da unsere DTOs und Enums // als @Serializable markiert sind. - alias(libs.plugins.kotlin.jvm) alias(libs.plugins.kotlin.serialization) } dependencies { - // Stellt sicher, dass dieses Modul Zugriff auf die im zentralen Katalog - // definierten Bibliotheken hat. + // Stellt sicher, dass dieses Modul die zentralen Versionen aus unserem BOM (Bill of Materials) + // im platform-Modul respektiert. `api` wird verwendet, damit abhängige Module + // diese Platform-Definitionen ebenfalls "erben". api(projects.platform.platformDependencies) // --- Kern-Abhängigkeiten für das Domänen-Modell --- @@ -26,7 +26,7 @@ dependencies { // Stellt moderne Datums- und Zeit-Typen wie `Instant` und `LocalDate` bereit. api(libs.kotlinx.datetime) - // --- Test-Abhängigkeiten --- + // --- Testing --- // Stellt die notwendigen Bibliotheken für das Schreiben von Tests bereit. // `testImplementation` sorgt dafür, dass diese Bibliotheken nicht Teil // des finalen produktiven Codes werden. diff --git a/core/core-utils/build.gradle.kts b/core/core-utils/build.gradle.kts index 501297be..b966f049 100644 --- a/core/core-utils/build.gradle.kts +++ b/core/core-utils/build.gradle.kts @@ -1,9 +1,14 @@ plugins { + // Wendet das Kotlin JVM Plugin über den zentralen Alias an. alias(libs.plugins.kotlin.jvm) } dependencies { + // Stellt sicher, dass dieses Modul die zentralen Versionen aus unserem BOM respektiert. api(projects.platform.platformDependencies) + + // Stellt die reinen Domänen-Klassen und -Interfaces aus dem `core-domain`-Modul bereit. + // `api` ist hier zwingend, da `core-utils` eine Implementierung von `core-domain` ist. api(projects.core.coreDomain) // --- Coroutines & Asynchronität --- @@ -13,7 +18,8 @@ dependencies { api(libs.exposed.core) api(libs.exposed.dao) api(libs.exposed.jdbc) - api(libs.exposed.kotlin.datetime) + api(libs.exposed.kotlin.datetime) // exposed-kotlin-datetime -> exposed.kotlin.datetime + // KORREKTUR: Der Alias `hikari-cp` wird zu `hikariCp` umgewandelt. api(libs.hikari.cp) api(libs.flyway.core) api(libs.flyway.postgresql) @@ -22,7 +28,7 @@ dependencies { api(libs.consul.client) // --- Utilities --- - // KORREKTUR: Fehlende Abhängigkeit für den BigDecimalSerializer hinzugefügt. + // Stellt die BigDecimal-Implementierung für den Serializer bereit. api(libs.bignum) // --- Testing --- diff --git a/core/core-utils/src/main/kotlin/at/mocode/core/utils/discovery/ServiceRegistration.kt b/core/core-utils/src/main/kotlin/at/mocode/core/utils/discovery/ServiceRegistration.kt index 416a8424..a6d00432 100644 --- a/core/core-utils/src/main/kotlin/at/mocode/core/utils/discovery/ServiceRegistration.kt +++ b/core/core-utils/src/main/kotlin/at/mocode/core/utils/discovery/ServiceRegistration.kt @@ -1,8 +1,10 @@ package at.mocode.core.utils.discovery -import at.mocode.core.utils.config.AppConfig // AppConfig ist jetzt eine Klasse +import at.mocode.core.utils.config.AppConfig import com.orbitz.consul.Consul import com.orbitz.consul.model.agent.ImmutableRegistration +// KORREKTUR: Expliziter Import für die `Registration`-Klasse, die den `RegCheck` enthält. +import com.orbitz.consul.model.agent.Registration import java.net.InetAddress import java.util.* @@ -64,7 +66,8 @@ class ServiceRegistrar(private val appConfig: AppConfig) { val serviceId = "$serviceName-${UUID.randomUUID()}" val hostAddress = InetAddress.getLocalHost().hostAddress - val healthCheck = ImmutableRegistration.RegCheck.http( + // KORREKTUR: Der Aufruf erfolgt über die `Registration`-Klasse, nicht `ImmutableRegistration`. + val healthCheck = Registration.RegCheck.http( "http://$hostAddress:$servicePort/health", // Standard-Health-Check-Pfad 10L, // Intervall in Sekunden 5L // Timeout in Sekunden diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8508685b..d0d0c7a5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,44 +1,44 @@ -# This file defines all dependencies for the Meldestelle_Pro project. -# It allows for centralized version management and ensures consistency across all modules. -# Last updated: 2025-07-29 +# This file is the SINGLE SOURCE OF TRUTH for all project dependencies. +# It allows for centralized version management and ensures consistency. +# Last updated: 2025-07-30 [versions] # --- Kotlin Ecosystem --- -# Defines the primary Kotlin version for the compiler and all related plugins. kotlin = "2.2.0" kotlinxCoroutines = "1.9.1" kotlinxSerialization = "1.7.1" kotlinxDatetime = "0.6.0" -# --- Database & Persistence --- -exposed = "0.51.1" -postgresql = "42.7.3" -h2 = "2.2.224" -hikari = "5.1.0" -flyway = "10.15.2" - -# --- Service Discovery --- -consulClient = "1.5.3" -micrometer = "1.12.2" - -# --- Utilities --- -uuid = "0.8.4" -bignum = "0.3.9" - +# --- Spring Ecosystem --- springBoot = "3.2.5" springDependencyManagement = "1.1.5" springdoc = "2.5.0" -# --- Compose (UI) --- +# --- Compose UI --- composeMultiplatform = "1.6.10" # --- Ktor (API Layer & Client) --- -ktor = "3.0.0-beta-2" # Stable release for Ktor 3 -ktor-openapi = "2.1.4" +ktor = "3.0.0-beta-2" + +# --- Database & Persistence --- +exposed = "0.51.1" +postgresql = "42.7.3" +hikari = "5.1.0" +h2 = "2.2.224" +flyway = "10.15.2" + +# --- Service Discovery & Monitoring --- +consulClient = "1.5.3" +micrometer = "1.12.2" # --- Testing --- junitJupiter = "5.10.2" +# --- Utilities --- +uuid = "0.8.4" +bignum = "0.3.9" +logback = "1.5.6" + [libraries] # --- Kotlin & Coroutines --- kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } @@ -54,70 +54,62 @@ ktor-server-netty = { module = "io.ktor:ktor-server-netty-jvm", version.ref = "k ktor-server-contentNegotiation = { module = "io.ktor:ktor-server-content-negotiation-jvm", version.ref = "ktor" } ktor-server-serialization-kotlinx-json = { module = "io.ktor:ktor-serialization-kotlinx-json-jvm", version.ref = "ktor" } ktor-server-statusPages = { module = "io.ktor:ktor-server-status-pages-jvm", version.ref = "ktor" } -ktor-server-tests = { module = "io.ktor:ktor-server-tests-jvm", version.ref = "ktor" } ktor-server-auth = { module = "io.ktor:ktor-server-auth-jvm", version.ref = "ktor" } ktor-server-authJwt = { module = "io.ktor:ktor-server-auth-jwt-jvm", version.ref = "ktor" } -ktor-server-openapi = { module = "io.ktor:ktor-server-openapi", version.ref = "ktor" } -ktor-server-swagger = { module = "io.ktor:ktor-server-swagger", version.ref = "ktor" } ktor-server-cors = { module = "io.ktor:ktor-server-cors-jvm", version.ref = "ktor" } ktor-server-callLogging = { module = "io.ktor:ktor-server-call-logging-jvm", version.ref = "ktor" } ktor-server-defaultHeaders = { module = "io.ktor:ktor-server-default-headers-jvm", version.ref = "ktor" } ktor-server-rateLimit = { module = "io.ktor:ktor-server-rate-limit-jvm", version.ref = "ktor" } ktor-server-metrics-micrometer = { module = "io.ktor:ktor-server-metrics-micrometer-jvm", version.ref = "ktor" } +ktor-server-openapi = { module = "io.ktor:ktor-server-openapi", version.ref = "ktor" } +ktor-server-swagger = { module = "io.ktor:ktor-server-swagger", version.ref = "ktor" } +ktor-server-tests = { module = "io.ktor:ktor-server-tests-jvm", version.ref = "ktor" } # --- Ktor Client --- ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" } ktor-client-cio = { module = "io.ktor:ktor-client-cio-jvm", version.ref = "ktor" } ktor-client-js = { module = "io.ktor:ktor-client-js", version.ref = "ktor" } ktor-client-contentNegotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktor" } -ktor-client-serialization-kotlinx-json = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktor" } # Eindeutiger Alias +ktor-client-serialization-kotlinx-json = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktor" } -# --- Spring Boot Starters --- +# --- Spring Boot --- spring-boot-starter-web = { module = "org.springframework.boot:spring-boot-starter-web" } spring-boot-starter-validation = { module = "org.springframework.boot:spring-boot-starter-validation" } spring-boot-starter-actuator = { module = "org.springframework.boot:spring-boot-starter-actuator" } -spring-boot-starter-test = { module = "org.springframework.boot:spring-boot-starter-test" } spring-boot-starter-data-jpa = { module = "org.springframework.boot:spring-boot-starter-data-jpa" } -# Spring Web als eigenständige Abhängigkeit +spring-boot-starter-test = { module = "org.springframework.boot:spring-boot-starter-test" } spring-web = { module = "org.springframework:spring-web" } - -# --- SpringDoc (OpenAPI) --- -# springdoc-openapi-starter-webmvc-ui = { module = "org.springdoc:springdoc-openapi-starter-webmvc-ui", version.ref = "springdoc" } springdoc-openapi-starter-common = { module = "org.springdoc:springdoc-openapi-starter-common", version.ref = "springdoc" } - -# --- Datenbank-Treiber --- -postgresql-driver = { module = "org.postgresql:postgresql", version.ref = "postgresql" } -h2-driver = { module = "com.h2database:h2", version.ref = "h2" } +springdoc-openapi-starter-webmvc-ui = { module = "org.springdoc:springdoc-openapi-starter-webmvc-ui", version.ref = "springdoc" } # --- Database & Persistence --- exposed-core = { module = "org.jetbrains.exposed:exposed-core", version.ref = "exposed" } exposed-dao = { module = "org.jetbrains.exposed:exposed-dao", version.ref = "exposed" } exposed-jdbc = { module = "org.jetbrains.exposed:exposed-jdbc", version.ref = "exposed" } exposed-kotlin-datetime = { module = "org.jetbrains.exposed:exposed-kotlin-datetime", version.ref = "exposed" } +postgresql-driver = { module = "org.postgresql:postgresql", version.ref = "postgresql" } hikari-cp = { module = "com.zaxxer:HikariCP", version.ref = "hikari" } +h2-driver = { module = "com.h2database:h2", version.ref = "h2" } flyway-core = { module = "org.flywaydb:flyway-core", version.ref = "flyway" } flyway-postgresql = { module = "org.flywaydb:flyway-database-postgresql", version.ref = "flyway" } -# --- Service Discovery --- +# --- Service Discovery & Monitoring --- consul-client = { module = "com.orbitz.consul:consul-client", version.ref = "consulClient" } - -# --- Monitoring --- -micrometer-prometheus = { group = "io.micrometer", name = "micrometer-registry-prometheus", version.ref = "micrometer" } +micrometer-prometheus = { module = "io.micrometer:micrometer-registry-prometheus", version.ref = "micrometer" } # --- Utilities --- uuid = { module = "com.benasher44:uuid", version.ref = "uuid" } bignum = { module = "com.ionspin.kotlin:bignum", version.ref = "bignum" } +logback-classic = { module = "ch.qos.logback:logback-classic", version.ref = "logback" } -# --- Compose --- +# --- Compose UI --- compose-runtime = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "composeMultiplatform" } compose-foundation = { module = "org.jetbrains.compose.foundation:foundation", version.ref = "composeMultiplatform" } compose-material3 = { module = "org.jetbrains.compose.material3:material3", version.ref = "composeMultiplatform" } compose-ui = { module = "org.jetbrains.compose.ui:ui", version.ref = "composeMultiplatform" } compose-components-resources = { module = "org.jetbrains.compose.components:components-resources", version.ref = "composeMultiplatform" } compose-materialIconsExtended = { module = "org.jetbrains.compose.material:material-icons-extended", version.ref = "composeMultiplatform" } -# NEU: Die Bibliothek für Compose for Web (HTML) compose-html-core = { module = "org.jetbrains.compose.html:html-core", version.ref = "composeMultiplatform" } -# NEU: Die Bibliothek für die Desktop-Plattform compose-desktop-currentOs = { module = "org.jetbrains.compose.desktop:desktop", version.ref = "composeMultiplatform" } # --- Testing (JUnit 5) --- @@ -125,7 +117,6 @@ junit-jupiter-api = { module = "org.junit.jupiter:junit-jupiter-api", version.re junit-jupiter-engine = { module = "org.junit.jupiter:junit-jupiter-engine", version.ref = "junitJupiter" } [plugins] -# KORREKTUR: Wir stellen sicher, dass ALLE Plugins, die wir verwenden, hier definiert sind. kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }