From b7fa2d26a96c65bcbc5dd58a9ecc15da3426f31f Mon Sep 17 00:00:00 2001 From: StefanMoCoAt Date: Mon, 6 Apr 2026 19:57:39 +0200 Subject: [PATCH] Refactor domain models and repositories: align imports, improve formatting consistency, remove unused imports, and harmonize implementation for better ZNS import compatibility. --- .../mocode/zns/importer/ZnsImportService.kt | 9 +-- .../masterdata/domain/model/BewerbsKlasse.kt | 18 ++--- .../masterdata/domain/model/ReitLizenz.kt | 16 ++--- .../mocode/masterdata/domain/model/Reiter.kt | 2 +- .../domain/model/TurnierKategorie.kt | 14 ++-- .../masterdata/domain/model/TurnierKlasse.kt | 18 ++--- .../masterdata/domain/model/TurnierSparte.kt | 12 ++-- .../repository/MasterdataLicenseRepository.kt | 6 +- .../reiter/BundeslandExposedRepository.kt | 71 ++++++++++--------- .../reiter/ReiterExposedRepository.kt | 2 +- .../persistence/reiter/ReiterTable.kt | 1 - .../service/config/AltersklassenSeeder.kt | 61 ++++++++-------- 12 files changed, 114 insertions(+), 116 deletions(-) diff --git a/backend/infrastructure/zns-importer/src/main/kotlin/at/mocode/zns/importer/ZnsImportService.kt b/backend/infrastructure/zns-importer/src/main/kotlin/at/mocode/zns/importer/ZnsImportService.kt index 87a0f777..e45c9699 100644 --- a/backend/infrastructure/zns-importer/src/main/kotlin/at/mocode/zns/importer/ZnsImportService.kt +++ b/backend/infrastructure/zns-importer/src/main/kotlin/at/mocode/zns/importer/ZnsImportService.kt @@ -2,14 +2,7 @@ package at.mocode.zns.importer -import at.mocode.masterdata.domain.repository.VereinRepository -import at.mocode.masterdata.domain.repository.HorseRepository -import at.mocode.masterdata.domain.repository.AltersklassenRepository -import at.mocode.masterdata.domain.repository.MasterdataLicenseRepository -import at.mocode.masterdata.domain.repository.FunktionaerRepository -import at.mocode.masterdata.domain.repository.ReiterRepository -import at.mocode.masterdata.domain.repository.LandRepository -import at.mocode.masterdata.domain.repository.BundeslandRepository +import at.mocode.masterdata.domain.repository.* import at.mocode.zns.parser.ZnsFunktionaerParser import at.mocode.zns.parser.ZnsPferdParser import at.mocode.zns.parser.ZnsReiterParser diff --git a/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/BewerbsKlasse.kt b/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/BewerbsKlasse.kt index 77966922..ce579cb2 100644 --- a/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/BewerbsKlasse.kt +++ b/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/BewerbsKlasse.kt @@ -2,8 +2,8 @@ package at.mocode.masterdata.domain.model -import kotlinx.serialization.Serializable import at.mocode.core.domain.serialization.UuidSerializer +import kotlinx.serialization.Serializable import kotlin.uuid.Uuid /** @@ -11,12 +11,12 @@ import kotlin.uuid.Uuid */ @Serializable data class BewerbsKlasse( - @Serializable(with = UuidSerializer::class) - val bewerbsklasseId: Uuid = Uuid.random(), - val sparte: String, - val code: String, - val bezeichnung: String, - val maxHoehe: Int? = null, - val aufgabenNiveau: String? = null, - val istAktiv: Boolean = true + @Serializable(with = UuidSerializer::class) + val bewerbsklasseId: Uuid = Uuid.random(), + val sparte: String, + val code: String, + val bezeichnung: String, + val maxHoehe: Int? = null, + val aufgabenNiveau: String? = null, + val istAktiv: Boolean = true ) diff --git a/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/ReitLizenz.kt b/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/ReitLizenz.kt index 763fca87..863163ad 100644 --- a/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/ReitLizenz.kt +++ b/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/ReitLizenz.kt @@ -2,18 +2,16 @@ package at.mocode.masterdata.domain.model -import kotlinx.serialization.Serializable import at.mocode.core.domain.serialization.UuidSerializer -import at.mocode.core.domain.serialization.LocalDateSerializer -import kotlinx.datetime.LocalDate +import kotlinx.serialization.Serializable import kotlin.uuid.Uuid @Serializable data class ReitLizenz( - @Serializable(with = UuidSerializer::class) - val lizenzId: Uuid = Uuid.random(), - val code: String, - val bezeichnung: String, - val sparte: String? = null, - val istAktiv: Boolean = true + @Serializable(with = UuidSerializer::class) + val lizenzId: Uuid = Uuid.random(), + val code: String, + val bezeichnung: String, + val sparte: String? = null, + val istAktiv: Boolean = true ) diff --git a/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/Reiter.kt b/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/Reiter.kt index c0fe3474..a3ef5ca6 100644 --- a/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/Reiter.kt +++ b/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/Reiter.kt @@ -221,7 +221,7 @@ data class Reiter( // Validation against bundeslandNummer if available // ZNS bundeslandNummer is 01-09, while membership first digit is 1-9 if (bundeslandNummer != null && b != bundeslandNummer) { - return false + return false } // Verein part (2nd-4th digit) diff --git a/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/TurnierKategorie.kt b/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/TurnierKategorie.kt index f91ce282..4558c405 100644 --- a/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/TurnierKategorie.kt +++ b/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/TurnierKategorie.kt @@ -2,8 +2,8 @@ package at.mocode.masterdata.domain.model -import kotlinx.serialization.Serializable import at.mocode.core.domain.serialization.UuidSerializer +import kotlinx.serialization.Serializable import kotlin.uuid.Uuid /** @@ -11,10 +11,10 @@ import kotlin.uuid.Uuid */ @Serializable data class TurnierKategorie( - @Serializable(with = UuidSerializer::class) - val kategorieId: Uuid = Uuid.random(), - val code: String, - val bezeichnung: String, - val sparte: String? = null, - val istAktiv: Boolean = true + @Serializable(with = UuidSerializer::class) + val kategorieId: Uuid = Uuid.random(), + val code: String, + val bezeichnung: String, + val sparte: String? = null, + val istAktiv: Boolean = true ) diff --git a/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/TurnierKlasse.kt b/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/TurnierKlasse.kt index c34b1b7e..7a5f2427 100644 --- a/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/TurnierKlasse.kt +++ b/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/TurnierKlasse.kt @@ -2,8 +2,8 @@ package at.mocode.masterdata.domain.model -import kotlinx.serialization.Serializable import at.mocode.core.domain.serialization.UuidSerializer +import kotlinx.serialization.Serializable import kotlin.uuid.Uuid /** @@ -11,12 +11,12 @@ import kotlin.uuid.Uuid */ @Serializable data class TurnierKlasse( - @Serializable(with = UuidSerializer::class) - val turnierklasseId: Uuid = Uuid.random(), - val sparte: String, - val code: String, - val bezeichnung: String, - val maxHoehe: Int? = null, - val aufgabenNiveau: String? = null, - val istAktiv: Boolean = true + @Serializable(with = UuidSerializer::class) + val turnierklasseId: Uuid = Uuid.random(), + val sparte: String, + val code: String, + val bezeichnung: String, + val maxHoehe: Int? = null, + val aufgabenNiveau: String? = null, + val istAktiv: Boolean = true ) diff --git a/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/TurnierSparte.kt b/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/TurnierSparte.kt index 14f5479e..e518c861 100644 --- a/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/TurnierSparte.kt +++ b/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/TurnierSparte.kt @@ -2,8 +2,8 @@ package at.mocode.masterdata.domain.model -import kotlinx.serialization.Serializable import at.mocode.core.domain.serialization.UuidSerializer +import kotlinx.serialization.Serializable import kotlin.uuid.Uuid /** @@ -11,9 +11,9 @@ import kotlin.uuid.Uuid */ @Serializable data class TurnierSparte( - @Serializable(with = UuidSerializer::class) - val sparteId: Uuid = Uuid.random(), - val code: String, - val bezeichnung: String, - val istAktiv: Boolean = true + @Serializable(with = UuidSerializer::class) + val sparteId: Uuid = Uuid.random(), + val code: String, + val bezeichnung: String, + val istAktiv: Boolean = true ) diff --git a/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/repository/MasterdataLicenseRepository.kt b/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/repository/MasterdataLicenseRepository.kt index ef99b75c..a119022f 100644 --- a/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/repository/MasterdataLicenseRepository.kt +++ b/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/repository/MasterdataLicenseRepository.kt @@ -10,7 +10,7 @@ import at.mocode.masterdata.domain.model.Startkarte * Repository für alle Lizenz-Stammdaten (Reit, Fahr, Startkarten). */ interface MasterdataLicenseRepository { - suspend fun findReitLizenzByCode(code: String): at.mocode.masterdata.domain.model.ReitLizenz? - suspend fun findFahrLizenzByCode(code: String): at.mocode.masterdata.domain.model.FahrLizenz? - suspend fun findStartkarteByCode(code: String): at.mocode.masterdata.domain.model.Startkarte? + suspend fun findReitLizenzByCode(code: String): ReitLizenz? + suspend fun findFahrLizenzByCode(code: String): FahrLizenz? + suspend fun findStartkarteByCode(code: String): Startkarte? } diff --git a/backend/services/masterdata/masterdata-infrastructure/src/main/kotlin/at/mocode/masterdata/infrastructure/persistence/reiter/BundeslandExposedRepository.kt b/backend/services/masterdata/masterdata-infrastructure/src/main/kotlin/at/mocode/masterdata/infrastructure/persistence/reiter/BundeslandExposedRepository.kt index fab95a2c..7665ef02 100644 --- a/backend/services/masterdata/masterdata-infrastructure/src/main/kotlin/at/mocode/masterdata/infrastructure/persistence/reiter/BundeslandExposedRepository.kt +++ b/backend/services/masterdata/masterdata-infrastructure/src/main/kotlin/at/mocode/masterdata/infrastructure/persistence/reiter/BundeslandExposedRepository.kt @@ -16,38 +16,45 @@ import kotlin.uuid.Uuid * Hinweis: Implementiert nur die für den ZNS-Import notwendigen Methoden. */ class BundeslandExposedRepository : BundeslandRepository { - private fun rowToDom(row: ResultRow) = BundeslandDefinition( - bundeslandId = row[BundeslaenderTable.id], - landId = row[BundeslaenderTable.landId], - bundeslandNr = row[BundeslaenderTable.bundeslandNr], - oepsCode = row[BundeslaenderTable.oepsCode], - iso3166_2_Code = row[BundeslaenderTable.iso3166_2_Code], - name = row[BundeslaenderTable.name], - kuerzel = row[BundeslaenderTable.kuerzel], - wappenUrl = row[BundeslaenderTable.wappenUrl], - istAktiv = row[BundeslaenderTable.istAktiv], - sortierReihenfolge = row[BundeslaenderTable.sortierReihenfolge], - createdAt = row[BundeslaenderTable.createdAt], - updatedAt = row[BundeslaenderTable.updatedAt] - ) + private fun rowToDom(row: ResultRow) = BundeslandDefinition( + bundeslandId = row[BundeslaenderTable.id], + landId = row[BundeslaenderTable.landId], + bundeslandNr = row[BundeslaenderTable.bundeslandNr], + oepsCode = row[BundeslaenderTable.oepsCode], + iso3166_2_Code = row[BundeslaenderTable.iso3166_2_Code], + name = row[BundeslaenderTable.name], + kuerzel = row[BundeslaenderTable.kuerzel], + wappenUrl = row[BundeslaenderTable.wappenUrl], + istAktiv = row[BundeslaenderTable.istAktiv], + sortierReihenfolge = row[BundeslaenderTable.sortierReihenfolge], + createdAt = row[BundeslaenderTable.createdAt], + updatedAt = row[BundeslaenderTable.updatedAt] + ) - override suspend fun findByNr(nr: Int): BundeslandDefinition? = DatabaseFactory.dbQuery { - BundeslaenderTable.selectAll().where { BundeslaenderTable.bundeslandNr eq nr } - .map(::rowToDom) - .singleOrNull() - } + override suspend fun findByNr(nr: Int): BundeslandDefinition? = DatabaseFactory.dbQuery { + BundeslaenderTable.selectAll().where { BundeslaenderTable.bundeslandNr eq nr } + .map(::rowToDom) + .singleOrNull() + } - // Dummy-Implementierungen für das Interface, da derzeit nicht vom ZNS-Import benötigt - override suspend fun findById(id: Uuid): BundeslandDefinition? = null - override suspend fun findByOepsCode(oepsCode: String, landId: Uuid): BundeslandDefinition? = null - override suspend fun findByIso3166_2_Code(iso3166_2_Code: String): BundeslandDefinition? = null - override suspend fun findByCountry(landId: Uuid, activeOnly: Boolean, orderBySortierung: Boolean): List = emptyList() - override suspend fun findByName(searchTerm: String, landId: Uuid?, limit: Int): List = emptyList() - override suspend fun findAllActive(orderBySortierung: Boolean): List = emptyList() - override suspend fun save(bundesland: BundeslandDefinition): BundeslandDefinition = bundesland - override suspend fun upsertByLandIdAndKuerzel(bundesland: BundeslandDefinition): BundeslandDefinition = bundesland - override suspend fun delete(id: Uuid): Boolean = false - override suspend fun existsByOepsCode(oepsCode: String, landId: Uuid): Boolean = false - override suspend fun existsByIso3166_2_Code(iso3166_2_Code: String): Boolean = false - override suspend fun countActiveByCountry(landId: Uuid): Long = 0L + // Dummy-Implementierungen für das Interface, da derzeit nicht vom ZNS-Import benötigt + override suspend fun findById(id: Uuid): BundeslandDefinition? = null + override suspend fun findByOepsCode(oepsCode: String, landId: Uuid): BundeslandDefinition? = null + override suspend fun findByIso3166_2_Code(iso3166_2_Code: String): BundeslandDefinition? = null + override suspend fun findByCountry( + landId: Uuid, + activeOnly: Boolean, + orderBySortierung: Boolean + ): List = emptyList() + + override suspend fun findByName(searchTerm: String, landId: Uuid?, limit: Int): List = + emptyList() + + override suspend fun findAllActive(orderBySortierung: Boolean): List = emptyList() + override suspend fun save(bundesland: BundeslandDefinition): BundeslandDefinition = bundesland + override suspend fun upsertByLandIdAndKuerzel(bundesland: BundeslandDefinition): BundeslandDefinition = bundesland + override suspend fun delete(id: Uuid): Boolean = false + override suspend fun existsByOepsCode(oepsCode: String, landId: Uuid): Boolean = false + override suspend fun existsByIso3166_2_Code(iso3166_2_Code: String): Boolean = false + override suspend fun countActiveByCountry(landId: Uuid): Long = 0L } diff --git a/backend/services/masterdata/masterdata-infrastructure/src/main/kotlin/at/mocode/masterdata/infrastructure/persistence/reiter/ReiterExposedRepository.kt b/backend/services/masterdata/masterdata-infrastructure/src/main/kotlin/at/mocode/masterdata/infrastructure/persistence/reiter/ReiterExposedRepository.kt index ceb53e88..e43f2891 100644 --- a/backend/services/masterdata/masterdata-infrastructure/src/main/kotlin/at/mocode/masterdata/infrastructure/persistence/reiter/ReiterExposedRepository.kt +++ b/backend/services/masterdata/masterdata-infrastructure/src/main/kotlin/at/mocode/masterdata/infrastructure/persistence/reiter/ReiterExposedRepository.kt @@ -68,7 +68,7 @@ class ReiterExposedRepository : ReiterRepository { private fun loadLizenzen(reiterId: Uuid): List { return ReiterLizenzenZuordnungTable.selectAll().where { ReiterLizenzenZuordnungTable.reiterId eq reiterId } .map { - at.mocode.masterdata.domain.model.ReiterLizenz( + ReiterLizenz( lizenzId = it[ReiterLizenzenZuordnungTable.id], lizenzTyp = it[ReiterLizenzenZuordnungTable.lizenzTyp], kuerzel = it[ReiterLizenzenZuordnungTable.kuerzel], diff --git a/backend/services/masterdata/masterdata-infrastructure/src/main/kotlin/at/mocode/masterdata/infrastructure/persistence/reiter/ReiterTable.kt b/backend/services/masterdata/masterdata-infrastructure/src/main/kotlin/at/mocode/masterdata/infrastructure/persistence/reiter/ReiterTable.kt index 12a768a3..75f7cf61 100644 --- a/backend/services/masterdata/masterdata-infrastructure/src/main/kotlin/at/mocode/masterdata/infrastructure/persistence/reiter/ReiterTable.kt +++ b/backend/services/masterdata/masterdata-infrastructure/src/main/kotlin/at/mocode/masterdata/infrastructure/persistence/reiter/ReiterTable.kt @@ -2,7 +2,6 @@ package at.mocode.masterdata.infrastructure.persistence.reiter -import at.mocode.masterdata.infrastructure.persistence.BundeslaenderTable import org.jetbrains.exposed.v1.core.Table import org.jetbrains.exposed.v1.datetime.CurrentTimestamp import org.jetbrains.exposed.v1.datetime.date diff --git a/backend/services/masterdata/masterdata-service/src/main/kotlin/at/mocode/masterdata/service/config/AltersklassenSeeder.kt b/backend/services/masterdata/masterdata-service/src/main/kotlin/at/mocode/masterdata/service/config/AltersklassenSeeder.kt index d6f487ba..58fdbdb1 100644 --- a/backend/services/masterdata/masterdata-service/src/main/kotlin/at/mocode/masterdata/service/config/AltersklassenSeeder.kt +++ b/backend/services/masterdata/masterdata-service/src/main/kotlin/at/mocode/masterdata/service/config/AltersklassenSeeder.kt @@ -1,12 +1,13 @@ @file:OptIn(kotlin.uuid.ExperimentalUuidApi::class) + package at.mocode.masterdata.service.config import at.mocode.masterdata.infrastructure.persistence.AltersklasseTable import jakarta.annotation.PostConstruct -import org.jetbrains.exposed.v1.jdbc.transactions.transaction +import org.jetbrains.exposed.v1.core.eq import org.jetbrains.exposed.v1.jdbc.insert import org.jetbrains.exposed.v1.jdbc.selectAll -import org.jetbrains.exposed.v1.core.* +import org.jetbrains.exposed.v1.jdbc.transactions.transaction import org.slf4j.LoggerFactory import org.springframework.context.annotation.Configuration import org.springframework.context.annotation.DependsOn @@ -20,38 +21,38 @@ import kotlin.uuid.Uuid @Profile("!test") @DependsOn("masterdataDatabaseConfiguration") class AltersklassenSeeder { - private val log = LoggerFactory.getLogger(AltersklassenSeeder::class.java) + private val log = LoggerFactory.getLogger(AltersklassenSeeder::class.java) - @PostConstruct - fun seed() { - log.info("Starte Seeding der Altersklassen...") - transaction { - val klassen = listOf( - Triple("JG", "JUGENDLICHER", "Altersklasse Jugend"), - Triple("JR", "JUNIOR", "Altersklasse Junior"), - Triple("25", "U25", "Altersklasse U25"), - Triple("Y", "JUNGER-REITER", "Altersklasse Junger Reiter") - ) + @PostConstruct + fun seed() { + log.info("Starte Seeding der Altersklassen...") + transaction { + val klassen = listOf( + Triple("JG", "JUGENDLICHER", "Altersklasse Jugend"), + Triple("JR", "JUNIOR", "Altersklasse Junior"), + Triple("25", "U25", "Altersklasse U25"), + Triple("Y", "JUNGER-REITER", "Altersklasse Junger Reiter") + ) - klassen.forEach { (code, bez, desc) -> - upsertAltersklasse(code, bez) - } - } + klassen.forEach { (code, bez, desc) -> + upsertAltersklasse(code, bez) + } } + } - private fun upsertAltersklasse(code: String, bezeichnung: String) { - val exists = AltersklasseTable.selectAll() - .where { AltersklasseTable.altersklasseCode eq code } - .any() + private fun upsertAltersklasse(code: String, bezeichnung: String) { + val exists = AltersklasseTable.selectAll() + .where { AltersklasseTable.altersklasseCode eq code } + .any() - if (!exists) { - AltersklasseTable.insert { - it[id] = Uuid.random() - it[altersklasseCode] = code - it[AltersklasseTable.bezeichnung] = bezeichnung - it[istAktiv] = true - } - log.debug("Altersklasse '{}' angelegt.", code) - } + if (!exists) { + AltersklasseTable.insert { + it[id] = Uuid.random() + it[altersklasseCode] = code + it[AltersklasseTable.bezeichnung] = bezeichnung + it[istAktiv] = true + } + log.debug("Altersklasse '{}' angelegt.", code) } + } }