Register events modules in Gradle build and refactor VeranstaltungController: remove unused use cases, streamline request handling, and improve error responses.

This commit is contained in:
2026-04-08 22:56:15 +02:00
parent df8bce4277
commit 8bc6f8e1df
16 changed files with 501 additions and 319 deletions
@@ -100,16 +100,57 @@ val myNewProperty by extra("Initialwert")
val myExtraProperty: String by extra
```
### Kotlin DSL Plugin (`kotlin-dsl`)
Dieses Plugin ist essenziell für die Entwicklung von Build-Logik in Kotlin (z.B. in `buildSrc` oder für Convention Plugins). Es wendet automatisch das Kotlin-Plugin an und fügt notwendige Abhängigkeiten wie `kotlin-stdlib` und `gradleKotlinDsl()` hinzu.
## Best Practices im Projekt
### Plugin-Management
Im Projekt wird ein zentraler **Version Catalog** (`gradle/libs.versions.toml`) verwendet. Plugins sollten **immer** über Aliase referenziert werden.
**Korrekt:**
```kotlin
// buildSrc/build.gradle.kts
plugins {
`kotlin-dsl`
}
repositories {
mavenCentral()
alias(libs.plugins.kotlinJvm)
alias(libs.plugins.spring.boot)
}
```
**Falsch:**
```kotlin
plugins {
kotlin("jvm") // Veraltet/Inkonsistent
id("org.springframework.boot") version "3.4.0" // Version gehört in den Catalog
}
```
### Projekt-Referenzen (Accessors)
Aufgrund der tiefen Modulstruktur (`backend/services/...`) müssen Projekt-Referenzen den vollen Pfad abbilden, um typsicher zu sein.
**Korrekt:**
```kotlin
dependencies {
implementation(projects.backend.services.events.eventsDomain)
}
```
**Falsch:**
```kotlin
dependencies {
implementation(projects.events.eventsDomain) // Schlägt fehl, wenn nicht direkt unter Root
}
```
### Spring Boot vs. Library
* **Services** (ausführbar) nutzen `alias(libs.plugins.spring.boot)` und den `springBoot { mainClass = ... }` Block.
* **Libraries/Domains** nutzen nur `alias(libs.plugins.kotlinJvm)` (oder Multiplatform) und definieren keine Main-Class.
### Kotlin Multiplatform (KMP)
Für Module, die sowohl im Backend als auch im Frontend (Compose) genutzt werden (z.B. `api`, `common`), wird das KMP-Plugin verwendet:
```kotlin
plugins {
alias(libs.plugins.kotlinMultiplatform)
}
kotlin {
jvm()
js(IR) { browser() }
}
```