feat: integrate new desktop shell and extend backend & ADRs

- Added `meldestelle-desktop` module using JVM/Compose Desktop, registered in `settings.gradle.kts`.
- Integrated new screens and desktop navigation into core: `Veranstaltungen`, `TurnierDetail`, etc.
- Expanded backend with `ExposedFunktionaerRepository` in `officials-infrastructure`.
- Completed ADRs for bounded context mapping (`ADR-0014`) and context map (`ADR-0015`).
- Updated and extended project documentation with session logs and architecture decisions.

Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
This commit is contained in:
2026-03-24 18:22:15 +01:00
parent c624df8744
commit 354bd49de6
75 changed files with 7616 additions and 48 deletions
@@ -32,6 +32,7 @@ kotlin {
commonMain {
dependencies {
implementation(libs.kotlinx.serialization.json)
implementation(projects.core.coreDomain)
}
}
commonTest {
@@ -0,0 +1,134 @@
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
package at.mocode.entries.api
import at.mocode.core.domain.model.NennungsStatusE
import at.mocode.core.domain.model.StartwunschE
import at.mocode.core.domain.serialization.UuidSerializer
import kotlinx.serialization.Serializable
import kotlin.uuid.Uuid
/**
* Vollständige Nennungs-Details (für GET /{id}, POST, PUT, DELETE Responses).
*/
@Serializable
data class NennungDetailDto(
@Serializable(with = UuidSerializer::class)
val nennungId: Uuid,
@Serializable(with = UuidSerializer::class)
val abteilungId: Uuid,
@Serializable(with = UuidSerializer::class)
val bewerbId: Uuid,
@Serializable(with = UuidSerializer::class)
val turnierId: Uuid,
@Serializable(with = UuidSerializer::class)
val reiterId: Uuid,
@Serializable(with = UuidSerializer::class)
val pferdId: Uuid,
@Serializable(with = UuidSerializer::class)
val zahlerId: Uuid? = null,
val status: NennungsStatusE,
val startwunsch: StartwunschE,
val istNachnennung: Boolean,
val nachnenngebuehrErlassen: Boolean,
val isNachnenngebuehrFaellig: Boolean,
val bemerkungen: String? = null,
val createdAt: String,
val updatedAt: String
)
/**
* Kompakte Nennungs-Übersicht (für Listen-Endpunkte).
*/
@Serializable
data class NennungSummaryDto(
@Serializable(with = UuidSerializer::class)
val nennungId: Uuid,
@Serializable(with = UuidSerializer::class)
val turnierId: Uuid,
@Serializable(with = UuidSerializer::class)
val bewerbId: Uuid,
@Serializable(with = UuidSerializer::class)
val abteilungId: Uuid,
@Serializable(with = UuidSerializer::class)
val reiterId: Uuid,
@Serializable(with = UuidSerializer::class)
val pferdId: Uuid,
val status: NennungsStatusE,
val istNachnennung: Boolean,
val createdAt: String
)
/**
* Request zum Einreichen einer neuen Nennung (POST /).
*/
@Serializable
data class NennungEinreichenRequest(
@Serializable(with = UuidSerializer::class)
val abteilungId: Uuid,
@Serializable(with = UuidSerializer::class)
val bewerbId: Uuid,
@Serializable(with = UuidSerializer::class)
val turnierId: Uuid,
@Serializable(with = UuidSerializer::class)
val reiterId: Uuid,
@Serializable(with = UuidSerializer::class)
val pferdId: Uuid,
@Serializable(with = UuidSerializer::class)
val zahlerId: Uuid? = null,
val startwunsch: StartwunschE = StartwunschE.KEIN_WUNSCH,
val istNachnennung: Boolean = false,
val bemerkungen: String? = null
)
/**
* Request zum Ändern des Nennungs-Status (PUT /{id}/status).
*/
@Serializable
data class NennungStatusAendernRequest(
val neuerStatus: NennungsStatusE,
val bemerkungen: String? = null
)
/**
* Request für einen Nennungs-Transfer (POST /{id}/transfer).
*/
@Serializable
data class NennungTransferRequest(
@Serializable(with = UuidSerializer::class)
val neuerReiterId: Uuid? = null,
@Serializable(with = UuidSerializer::class)
val neuesPferdId: Uuid? = null,
val istNachNennschluss: Boolean = false,
val nachnenngebuehrErlassen: Boolean = false,
@Serializable(with = UuidSerializer::class)
val autorisiertVon: Uuid,
val grund: String? = null
)
/**
* Response für einen abgeschlossenen Nennungs-Transfer.
*/
@Serializable
data class NennungsTransferDto(
@Serializable(with = UuidSerializer::class)
val transferId: Uuid,
@Serializable(with = UuidSerializer::class)
val ursprungsNennungId: Uuid,
@Serializable(with = UuidSerializer::class)
val neueNennungId: Uuid,
@Serializable(with = UuidSerializer::class)
val alterReiterId: Uuid? = null,
@Serializable(with = UuidSerializer::class)
val neuerReiterId: Uuid? = null,
@Serializable(with = UuidSerializer::class)
val altesPferdId: Uuid? = null,
@Serializable(with = UuidSerializer::class)
val neuesPferdId: Uuid? = null,
val istNachNennschluss: Boolean,
val nachnenngebuehrErlassen: Boolean,
@Serializable(with = UuidSerializer::class)
val autorisiertVon: Uuid,
val grund: String? = null,
val createdAt: String
)