diff --git a/build.gradle.kts b/build.gradle.kts index 5b2e5140..bf83d447 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -101,15 +101,15 @@ plugins { base } -allprojects { - group = "at.mocode.meldestelle" - version = "0.1.0-SNAPSHOT" - - repositories { - mavenCentral() - google() // Wichtig für Compose-Abhängigkeiten - } -} +//allprojects { +// group = "at.mocode.meldestelle" +// version = "0.1.0-SNAPSHOT" +// +// repositories { +// mavenCentral() +// google() // Wichtig für Compose-Abhängigkeiten +// } +//} subprojects { // Konfigurationen, die für alle Untermodule gelten. diff --git a/core/core-domain/build.gradle.kts b/core/core-domain/build.gradle.kts index dd2a5bd0..edfd636a 100644 --- a/core/core-domain/build.gradle.kts +++ b/core/core-domain/build.gradle.kts @@ -1,34 +1,30 @@ plugins { - // Definiert dieses Modul als ein Standard Kotlin/JVM-Modul. - alias(libs.plugins.kotlin.jvm) - // Aktiviert das Kotlinx Serialization Plugin, da unsere DTOs und Enums - // als @Serializable markiert sind. + // KORREKTUR: Von JVM zu Multiplattform wechseln + alias(libs.plugins.kotlin.multiplatform) alias(libs.plugins.kotlin.serialization) } -dependencies { - // 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) +// KORREKTUR: Diesen Block hinzufügen, um die Ziele zu definieren +kotlin { + jvm() + js(IR) { + browser() + } - // --- Kern-Abhängigkeiten für das Domänen-Modell --- - // Diese Bibliotheken definieren die grundlegenden Datentypen unseres Modells. - // Wir verwenden `api` anstelle von `implementation`, damit Services, die - // `core-domain` einbinden, diese Typen ebenfalls direkt nutzen können. - - // Stellt den `Uuid`-Typ für unsere eindeutigen IDs bereit. - api(libs.uuid) - - // Stellt die `kotlinx.serialization`-Engine bereit, insbesondere für JSON. - api(libs.kotlinx.serialization.json) - - // Stellt moderne Datums- und Zeit-Typen wie `Instant` und `LocalDate` bereit. - api(libs.kotlinx.datetime) - - // --- 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. - testImplementation(projects.platform.platformTesting) + sourceSets { + val commonMain by getting { + dependencies { + // Die Abhängigkeiten kommen hier rein + api(projects.platform.platformDependencies) + api(libs.uuid) + api(libs.kotlinx.serialization.json) + api(libs.kotlinx.datetime) + } + } + val commonTest by getting { + dependencies { + implementation(projects.platform.platformTesting) + } + } + } } diff --git a/core/core-utils/build.gradle.kts b/core/core-utils/build.gradle.kts index b966f049..5c325eab 100644 --- a/core/core-utils/build.gradle.kts +++ b/core/core-utils/build.gradle.kts @@ -1,36 +1,41 @@ plugins { - // Wendet das Kotlin JVM Plugin über den zentralen Alias an. - alias(libs.plugins.kotlin.jvm) + // KORREKTUR: Von JVM zu Multiplattform wechseln + alias(libs.plugins.kotlin.multiplatform) } -dependencies { - // Stellt sicher, dass dieses Modul die zentralen Versionen aus unserem BOM respektiert. - api(projects.platform.platformDependencies) +kotlin { + jvm() + js(IR) { + browser() + } - // 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 --- - api(libs.kotlinx.coroutines.core) - - // --- Datenbank-Management --- - api(libs.exposed.core) - api(libs.exposed.dao) - api(libs.exposed.jdbc) - 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) - - // --- Service Discovery --- - api(libs.consul.client) - - // --- Utilities --- - // Stellt die BigDecimal-Implementierung für den Serializer bereit. - api(libs.bignum) - - // --- Testing --- - testImplementation(projects.platform.platformTesting) + sourceSets { + val commonMain by getting { + dependencies { + // Diese sind plattformunabhängig und können geteilt werden + api(projects.platform.platformDependencies) + api(projects.core.coreDomain) + api(libs.kotlinx.coroutines.core) + api(libs.bignum) + } + } + val jvmMain by getting { + dependencies { + // DIESE SIND NUR FÜR DIE JVM! + api(libs.exposed.core) + api(libs.exposed.dao) + api(libs.exposed.jdbc) + api(libs.exposed.kotlin.datetime) + api(libs.hikari.cp) + api(libs.flyway.core) + api(libs.flyway.postgresql) + api(libs.consul.client) + } + } + val commonTest by getting { + dependencies { + implementation(projects.platform.platformTesting) + } + } + } } 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 a6d00432..432aabde 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 @@ -21,12 +21,13 @@ class ServiceRegistration internal constructor( fun register() { if (isRegistered) return try { + // Der `register`-Aufruf ist korrekt, da das `registration`-Objekt + // bereits außerhalb vollständig und korrekt gebaut wurde. consul.agentClient().register(registration) isRegistered = true println("Service '${registration.name()}' mit ID '${registration.id()}' erfolgreich bei Consul registriert.") } catch (e: Exception) { println("FEHLER: Service-Registrierung bei Consul fehlgeschlagen: ${e.message}") - // Fehler weiterwerfen, um den Anwendungsstart zu stoppen throw IllegalStateException("Could not register service with Consul", e) } } @@ -34,6 +35,7 @@ class ServiceRegistration internal constructor( fun deregister() { if (!isRegistered) return try { + // Der `deregister`-Aufruf ist korrekt. Er erwartet die Service-ID als einfachen String. consul.agentClient().deregister(registration.id()) isRegistered = false println("Service '${registration.name()}' mit ID '${registration.id()}' erfolgreich bei Consul deregistriert.") @@ -66,7 +68,8 @@ class ServiceRegistrar(private val appConfig: AppConfig) { val serviceId = "$serviceName-${UUID.randomUUID()}" val hostAddress = InetAddress.getLocalHost().hostAddress - // KORREKTUR: Der Aufruf erfolgt über die `Registration`-Klasse, nicht `ImmutableRegistration`. + // KORREKTUR: Der Health Check MUSS über die statische Factory-Methode `http` + // der `Registration.RegCheck`-Klasse erstellt werden. Dies war die Hauptfehlerquelle. val healthCheck = Registration.RegCheck.http( "http://$hostAddress:$servicePort/health", // Standard-Health-Check-Pfad 10L, // Intervall in Sekunden diff --git a/events/events-api/build.gradle.kts b/events/events-api/build.gradle.kts index 7087964c..7c46a59b 100644 --- a/events/events-api/build.gradle.kts +++ b/events/events-api/build.gradle.kts @@ -1,10 +1,12 @@ plugins { - // KORREKTUR: Alle Plugins werden jetzt konsistent über den Version Catalog geladen. alias(libs.plugins.kotlin.jvm) alias(libs.plugins.kotlin.spring) alias(libs.plugins.kotlin.serialization) alias(libs.plugins.ktor) application + + // KORREKTUR 1: Dieses Plugin hinzufügen, um die Spring-BOM zu aktivieren. + alias(libs.plugins.spring.dependencyManagement) } application { @@ -12,17 +14,19 @@ application { } dependencies { - // Deine Abhängigkeiten sind hier bereits korrekt und benötigen keine Änderung. - implementation(projects.platform.platformDependencies) + // KORREKTUR 2: Die Spring-Boot-BOM hier explizit als Plattform deklarieren. + api(platform(libs.spring.boot.dependencies)) + // Bestehende Abhängigkeiten + implementation(projects.platform.platformDependencies) implementation(projects.events.eventsDomain) implementation(projects.events.eventsApplication) implementation(projects.core.coreDomain) implementation(projects.core.coreUtils) - // Spring dependencies - implementation("org.springframework:spring-web") - implementation("org.springdoc:springdoc-openapi-starter-common") + // Spring dependencies (jetzt mit korrekter Version aus der BOM) + implementation(libs.spring.web) + implementation(libs.springdoc.openapi.starter.common) // Ktor Server implementation(libs.ktor.server.core) diff --git a/events/events-application/build.gradle.kts b/events/events-application/build.gradle.kts index a580f03f..25b230c9 100644 --- a/events/events-application/build.gradle.kts +++ b/events/events-application/build.gradle.kts @@ -1,10 +1,32 @@ plugins { - kotlin("jvm") + // KORREKTUR: Von 'kotlin("jvm")' zu Multiplattform wechseln. + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.kotlin.serialization) } -dependencies { - implementation(projects.events.eventsDomain) - implementation(projects.core.coreDomain) - implementation(projects.core.coreUtils) - testImplementation(projects.platform.platformTesting) +kotlin { + jvm() + js(IR) { + browser() + } + + sourceSets { + val commonMain by getting { + dependencies { + // Hier die jeweiligen Modul-Abhängigkeiten eintragen + // z.B. für events-domain: + implementation(projects.core.coreDomain) + + // z.B. für events-application: + // implementation(projects.events.eventsDomain) + } + } + + val commonTest by getting { + dependencies { + implementation(kotlin("test")) + implementation(projects.platform.platformTesting) + } + } + } } diff --git a/events/events-infrastructure/build.gradle.kts b/events/events-infrastructure/build.gradle.kts index ab4b049a..11768533 100644 --- a/events/events-infrastructure/build.gradle.kts +++ b/events/events-infrastructure/build.gradle.kts @@ -17,8 +17,8 @@ dependencies { implementation(projects.infrastructure.eventStore.eventStoreApi) implementation(projects.infrastructure.messaging.messagingClient) - implementation("org.springframework.boot:spring-boot-starter-data-jpa") - implementation("org.postgresql:postgresql") + implementation(libs.spring.boot.starter.data.jpa) + implementation(libs.postgresql.driver) testImplementation(projects.platform.platformTesting) } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d0d0c7a5..59d464cc 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,27 +5,29 @@ [versions] # --- Kotlin Ecosystem --- kotlin = "2.2.0" -kotlinxCoroutines = "1.9.1" -kotlinxSerialization = "1.7.1" -kotlinxDatetime = "0.6.0" +kotlinx = "1.9.0" +kotlinxDatetime = "0.7.1" +kotlinLogging = "3.0.5" # --- Spring Ecosystem --- springBoot = "3.2.5" springDependencyManagement = "1.1.5" springdoc = "2.5.0" -# --- Compose UI --- -composeMultiplatform = "1.6.10" - # --- Ktor (API Layer & Client) --- ktor = "3.0.0-beta-2" +# --- Compose UI --- +composeMultiplatform = "1.6.10" + # --- Database & Persistence --- exposed = "0.51.1" postgresql = "42.7.3" hikari = "5.1.0" h2 = "2.2.224" flyway = "10.15.2" +redisson = "3.27.2" +lettuce = "6.3.1.RELEASE" # --- Service Discovery & Monitoring --- consulClient = "1.5.3" @@ -33,20 +35,34 @@ micrometer = "1.12.2" # --- Testing --- junitJupiter = "5.10.2" +mockk = "1.13.8" +assertj = "3.24.2" +testcontainers = "1.19.6" # --- Utilities --- uuid = "0.8.4" bignum = "0.3.9" logback = "1.5.6" +caffeine = "3.1.8" +reactorKafka = "1.3.22" +jackson = "2.17.0" +jakartaAnnotation = "2.1.1" +auth0Jwt = "4.4.0" [libraries] +# --- Platform BOMs (Bill of Materials) --- +kotlin-bom = { module = "org.jetbrains.kotlin:kotlin-bom", version.ref = "kotlin" } +kotlinx-coroutines-bom = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-bom", version.ref = "kotlinx" } +spring-boot-dependencies = { module = "org.springframework.boot:spring-boot-dependencies", version.ref = "springBoot" } + # --- Kotlin & Coroutines --- kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } -kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinxCoroutines" } -kotlinx-coroutines-swing = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-swing", version.ref = "kotlinxCoroutines" } -kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinxCoroutines" } -kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerialization" } +kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinx" } +kotlinx-coroutines-swing = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-swing", version.ref = "kotlinx" } +kotlinx-coroutines-reactor = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-reactor", version.ref = "kotlinx" } +kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinx" } kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinxDatetime" } +kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinx" } # --- Ktor Server --- ktor-server-core = { module = "io.ktor:ktor-server-core-jvm", version.ref = "ktor" } @@ -78,6 +94,9 @@ spring-boot-starter-validation = { module = "org.springframework.boot:spring-boo spring-boot-starter-actuator = { module = "org.springframework.boot:spring-boot-starter-actuator" } spring-boot-starter-data-jpa = { module = "org.springframework.boot:spring-boot-starter-data-jpa" } spring-boot-starter-test = { module = "org.springframework.boot:spring-boot-starter-test" } +spring-boot-starter-oauth2-client = { module = "org.springframework.boot:spring-boot-starter-oauth2-client" } +spring-boot-starter-security = { module = "org.springframework.boot:spring-boot-starter-security" } +spring-security-oauth2-jose = { module = "org.springframework.security:spring-security-oauth2-jose" } 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" } @@ -92,6 +111,8 @@ 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" } +redisson = { module = "org.redisson:redisson", version.ref = "redisson" } +lettuce-core = { module = "io.lettuce:lettuce-core", version.ref = "lettuce" } # --- Service Discovery & Monitoring --- consul-client = { module = "com.orbitz.consul:consul-client", version.ref = "consulClient" } @@ -101,6 +122,13 @@ micrometer-prometheus = { module = "io.micrometer:micrometer-registry-prometheus 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" } +kotlin-logging-jvm = { module = "io.github.microutils:kotlin-logging-jvm", version.ref = "kotlinLogging" } +caffeine = { module = "com.github.ben-manes.caffeine:caffeine", version.ref = "caffeine" } +reactor-kafka = { module = "io.projectreactor.kafka:reactor-kafka", version.ref = "reactorKafka" } +jackson-module-kotlin = { module = "com.fasterxml.jackson.module:jackson-module-kotlin", version.ref = "jackson" } +jackson-datatype-jsr310 = { module = "com.fasterxml.jackson.datatype:jackson-datatype-jsr310", version.ref = "jackson" } +jakarta-annotation-api = { module = "jakarta.annotation:jakarta.annotation-api", version.ref = "jakartaAnnotation" } +auth0-java-jwt = { module = "com.auth0:java-jwt", version.ref = "auth0Jwt" } # --- Compose UI --- compose-runtime = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "composeMultiplatform" } @@ -112,9 +140,17 @@ compose-materialIconsExtended = { module = "org.jetbrains.compose.material:mater compose-html-core = { module = "org.jetbrains.compose.html:html-core", version.ref = "composeMultiplatform" } compose-desktop-currentOs = { module = "org.jetbrains.compose.desktop:desktop", version.ref = "composeMultiplatform" } -# --- Testing (JUnit 5) --- +# --- Testinging --- junit-jupiter-api = { module = "org.junit.jupiter:junit-jupiter-api", version.ref = "junitJupiter" } junit-jupiter-engine = { module = "org.junit.jupiter:junit-jupiter-engine", version.ref = "junitJupiter" } +junit-jupiter-params = { module = "org.junit.jupiter:junit-jupiter-params", version.ref = "junitJupiter" } +junit-platform-launcher = { module = "org.junit.platform:junit-platform-launcher", version.ref = "junitJupiter" } +mockk = { module = "io.mockk:mockk", version.ref = "mockk" } +assertj-core = { module = "org.assertj:assertj-core", version.ref = "assertj" } +testcontainers-core = { module = "org.testcontainers:testcontainers", version.ref = "testcontainers" } +testcontainers-junit-jupiter = { module = "org.testcontainers:junit-jupiter", version.ref = "testcontainers" } +testcontainers-postgresql = { module = "org.testcontainers:postgresql", version.ref = "testcontainers" } + [plugins] kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } diff --git a/infrastructure/auth/auth-client/build.gradle.kts b/infrastructure/auth/auth-client/build.gradle.kts index dc755813..701d39d3 100644 --- a/infrastructure/auth/auth-client/build.gradle.kts +++ b/infrastructure/auth/auth-client/build.gradle.kts @@ -18,13 +18,10 @@ dependencies { implementation(projects.core.coreDomain) implementation(projects.core.coreUtils) - // Spring Security - implementation("org.springframework.boot:spring-boot-starter-oauth2-client") - implementation("org.springframework.boot:spring-boot-starter-security") - implementation("org.springframework.security:spring-security-oauth2-jose") - - // JWT - implementation("com.auth0:java-jwt:4.4.0") + implementation(libs.spring.boot.starter.oauth2.client) + implementation(libs.spring.boot.starter.security) + implementation(libs.spring.security.oauth2.jose) + implementation(libs.auth0.java.jwt) testImplementation(projects.platform.platformTesting) } diff --git a/infrastructure/gateway/build.gradle.kts b/infrastructure/gateway/build.gradle.kts index 382376b1..783570c2 100644 --- a/infrastructure/gateway/build.gradle.kts +++ b/infrastructure/gateway/build.gradle.kts @@ -3,6 +3,7 @@ plugins { alias(libs.plugins.kotlin.serialization) alias(libs.plugins.ktor) application + alias(libs.plugins.spring.dependencyManagement) } application { @@ -10,6 +11,7 @@ application { } dependencies { + api(platform(libs.spring.boot.dependencies)) // --- Interne Module --- // Der Gateway benötigt nur die Kern-Definitionen und Utilities. implementation(projects.platform.platformDependencies) diff --git a/masterdata/masterdata-api/build.gradle.kts b/masterdata/masterdata-api/build.gradle.kts index 480228c9..74e2be31 100644 --- a/masterdata/masterdata-api/build.gradle.kts +++ b/masterdata/masterdata-api/build.gradle.kts @@ -5,6 +5,7 @@ plugins { alias(libs.plugins.kotlin.serialization) alias(libs.plugins.ktor) application + alias(libs.plugins.spring.dependencyManagement) } application { @@ -12,6 +13,7 @@ application { } dependencies { + api(platform(libs.spring.boot.dependencies)) // Interne Module implementation(projects.platform.platformDependencies) implementation(projects.masterdata.masterdataDomain) diff --git a/masterdata/masterdata-domain/build.gradle.kts b/masterdata/masterdata-domain/build.gradle.kts index c9be78e5..89790406 100644 --- a/masterdata/masterdata-domain/build.gradle.kts +++ b/masterdata/masterdata-domain/build.gradle.kts @@ -1,9 +1,27 @@ plugins { - kotlin("jvm") + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.kotlin.serialization) } -dependencies { - implementation(projects.core.coreDomain) - implementation(projects.core.coreUtils) - testImplementation(projects.platform.platformTesting) +kotlin { + jvm() + js(IR) { + browser() + } + + sourceSets { + val commonMain by getting { + dependencies { + // KORREKTUR: Diese zwei Zeilen hinzufügen + implementation(projects.core.coreDomain) + implementation(projects.core.coreUtils) + } + } + val commonTest by getting { + dependencies { + implementation(kotlin("test")) + implementation(projects.platform.platformTesting) + } + } + } } diff --git a/platform/platform-bom/build.gradle.kts b/platform/platform-bom/build.gradle.kts index 23cdbe03..c58e4fcc 100644 --- a/platform/platform-bom/build.gradle.kts +++ b/platform/platform-bom/build.gradle.kts @@ -8,43 +8,51 @@ javaPlatform { } dependencies { - api(platform("org.springframework.boot:spring-boot-dependencies:3.2.3")) - api(platform("org.jetbrains.kotlin:kotlin-bom:2.1.21")) - api(platform("org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.10.1")) + // KORREKTUR: Alle BOMs werden jetzt über Aliase aus der libs.versions.toml bezogen. + api(platform(libs.spring.boot.dependencies)) + api(platform(libs.kotlin.bom)) + api(platform(libs.kotlinx.coroutines.bom)) constraints { - api("com.github.ben-manes.caffeine:caffeine:3.1.8") - api("io.projectreactor.kafka:reactor-kafka:1.3.22") - api("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0") - api("org.springdoc:springdoc-openapi-starter-webflux-ui:2.3.0") - api("org.springdoc:springdoc-openapi-starter-common:2.3.0") - api("org.redisson:redisson:3.27.2") - api("io.lettuce:lettuce-core:6.3.1.RELEASE") - api("io.github.microutils:kotlin-logging-jvm:3.0.5") - api("org.jetbrains.exposed:exposed-core:0.52.0") - api("org.jetbrains.exposed:exposed-dao:0.52.0") - api("org.jetbrains.exposed:exposed-jdbc:0.52.0") - api("org.jetbrains.exposed:exposed-kotlin-datetime:0.52.0") - api("org.postgresql:postgresql:42.7.3") - api("com.zaxxer:HikariCP:5.1.0") - api("com.h2database:h2:2.2.224") - api("org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1") - api("org.jetbrains.kotlinx:kotlinx-datetime:0.6.1") - api("com.benasher44:uuid:0.8.2") - api("com.ionspin.kotlin:bignum:0.3.8") - api("com.orbitz.consul:consul-client:1.5.3") + // KORREKTUR: Alle Abhängigkeiten verwenden jetzt Aliase. + // Keine einzige hartcodierte Version mehr in dieser Datei! - // Jackson modules - api("com.fasterxml.jackson.module:jackson-module-kotlin:2.17.0") - api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.17.0") + // --- Utilities & Other --- + api(libs.caffeine) + api(libs.reactor.kafka) + api(libs.redisson) + api(libs.uuid) + api(libs.bignum) + api(libs.consul.client) + api(libs.kotlin.logging.jvm) + api(libs.jakarta.annotation.api) - // Testcontainers - api("org.testcontainers:testcontainers:1.19.6") - api("org.testcontainers:junit-jupiter:1.19.6") - api("org.testcontainers:postgresql:1.19.6") + // --- Spring & SpringDoc --- + api(libs.springdoc.openapi.starter.common) + api(libs.springdoc.openapi.starter.webmvc.ui) - // Jakarta EE APIs - api("jakarta.annotation:jakarta.annotation-api:2.1.1") + // --- Database & Persistence --- + api(libs.exposed.core) + api(libs.exposed.dao) + api(libs.exposed.jdbc) + api(libs.exposed.kotlin.datetime) + api(libs.postgresql.driver) + api(libs.hikari.cp) + api(libs.h2.driver) + api(libs.lettuce.core) + + // --- Kotlinx Libraries --- + api(libs.kotlinx.serialization.json) + api(libs.kotlinx.datetime) + + // --- Jackson Modules --- + api(libs.jackson.module.kotlin) + api(libs.jackson.datatype.jsr310) + + // --- Testcontainers --- + api(libs.testcontainers.core) + api(libs.testcontainers.junit.jupiter) + api(libs.testcontainers.postgresql) } } diff --git a/platform/platform-dependencies/build.gradle.kts b/platform/platform-dependencies/build.gradle.kts index c43c7301..4ab8baa8 100644 --- a/platform/platform-dependencies/build.gradle.kts +++ b/platform/platform-dependencies/build.gradle.kts @@ -1,16 +1,35 @@ plugins { - `java-library` - kotlin("jvm") + alias(libs.plugins.kotlin.multiplatform) } -dependencies { - api(platform(projects.platform.platformBom)) +kotlin { + jvm() + js(IR) { + browser() + } - api("org.jetbrains.kotlin:kotlin-stdlib") - api("org.jetbrains.kotlin:kotlin-reflect") - api("org.jetbrains.kotlinx:kotlinx-coroutines-core") - api("org.jetbrains.kotlinx:kotlinx-coroutines-reactor") - api("io.github.microutils:kotlin-logging-jvm") - api("org.jetbrains.kotlinx:kotlinx-serialization-json") - api("org.jetbrains.kotlinx:kotlinx-datetime") + sourceSets { + val commonMain by getting { + dependencies { + // KORREKTUR: Die explizite `platform()`-Abhängigkeit wird hier entfernt. + // Die Versionen aus der BOM werden trotzdem angewendet. + + // KORREKTUR: `stdlib` und `reflect` werden entfernt. + // `stdlib` wird automatisch hinzugefügt. + + api(libs.kotlinx.coroutines.core) + api(libs.kotlinx.serialization.json) + api(libs.kotlinx.datetime) + } + } + + val jvmMain by getting { + dependencies { + api("org.jetbrains.kotlinx:kotlinx-coroutines-reactor") + + // KORREKTUR: Hartcodierte Version durch Alias ersetzen + api(libs.kotlin.logging.jvm) + } + } + } } diff --git a/platform/platform-testing/build.gradle.kts b/platform/platform-testing/build.gradle.kts index 55890859..7147e5e3 100644 --- a/platform/platform-testing/build.gradle.kts +++ b/platform/platform-testing/build.gradle.kts @@ -1,36 +1,43 @@ plugins { - `java-library` - kotlin("jvm") + // KORREKTUR: 'java-library' und 'kotlin("jvm")' ersetzen + alias(libs.plugins.kotlin.multiplatform) } -dependencies { - api(platform(projects.platform.platformBom)) +kotlin { + // KORREKTUR: JVM- und JS-Ziele definieren + jvm() + js(IR) { + browser() + } - // Kotlin Test - api("org.jetbrains.kotlin:kotlin-test") - api("org.jetbrains.kotlin:kotlin-test-junit") + sourceSets { + // Diese Abhängigkeiten sind für alle Plattformen (JVM, JS) verfügbar + val commonTest by getting { + dependencies { + // Die 'kotlin("test")'-Abhängigkeit ist der Standardweg für KMP-Tests + implementation(kotlin("test")) + api(libs.kotlinx.coroutines.test) + } + } - // JUnit - api("org.junit.jupiter:junit-jupiter-api") - api("org.junit.jupiter:junit-jupiter-engine") - api("org.junit.jupiter:junit-jupiter-params") - api("org.junit.platform:junit-platform-launcher") + // Diese Abhängigkeiten sind NUR für die JVM-Tests verfügbar + val jvmTest by getting { + dependencies { + api(libs.junit.jupiter.api) + api(libs.junit.jupiter.engine) + api(libs.junit.jupiter.params) + api(libs.junit.platform.launcher) - // Mocking and Assertions - api("io.mockk:mockk:1.13.8") - api("org.assertj:assertj-core:3.24.2") + // KORREKTUR: Alle hartcodierten Versionen durch Aliase ersetzen + api(libs.mockk) + api(libs.assertj.core) + api(libs.spring.boot.starter.test) + api(libs.h2.driver) - // Coroutines Testing - api("org.jetbrains.kotlinx:kotlinx-coroutines-test") - - // Spring Boot Testing - api("org.springframework.boot:spring-boot-starter-test") - - // Database Testing - api("com.h2database:h2") - - // Test Containers - api("org.testcontainers:testcontainers:1.19.5") - api("org.testcontainers:junit-jupiter:1.19.5") - api("org.testcontainers:postgresql:1.19.5") + api(libs.testcontainers.core) + api(libs.testcontainers.junit.jupiter) + api(libs.testcontainers.postgresql) + } + } + } } diff --git a/settings.gradle.kts b/settings.gradle.kts index 54a241c1..d6aba257 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -16,7 +16,8 @@ pluginManagement { } dependencyResolutionManagement { - repositories { + + /*repositories { mavenCentral() google { mavenContent { @@ -33,6 +34,13 @@ dependencyResolutionManagement { maven { url = uri("https://oss.sonatype.org/content/repositories/snapshots/") } + }*/ + + repositories { + mavenCentral() + google() + maven { url = uri("https://jitpack.io") } + maven { url = uri("https://oss.sonatype.org/content/repositories/snapshots/") } } }