Refactor domain models and repositories: align imports, improve formatting consistency, remove unused imports, and harmonize implementation for better ZNS import compatibility.

This commit is contained in:
2026-04-06 19:57:39 +02:00
parent abaaeddaaf
commit b7fa2d26a9
12 changed files with 114 additions and 116 deletions
@@ -2,14 +2,7 @@
package at.mocode.zns.importer package at.mocode.zns.importer
import at.mocode.masterdata.domain.repository.VereinRepository import at.mocode.masterdata.domain.repository.*
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.zns.parser.ZnsFunktionaerParser import at.mocode.zns.parser.ZnsFunktionaerParser
import at.mocode.zns.parser.ZnsPferdParser import at.mocode.zns.parser.ZnsPferdParser
import at.mocode.zns.parser.ZnsReiterParser import at.mocode.zns.parser.ZnsReiterParser
@@ -2,8 +2,8 @@
package at.mocode.masterdata.domain.model package at.mocode.masterdata.domain.model
import kotlinx.serialization.Serializable
import at.mocode.core.domain.serialization.UuidSerializer import at.mocode.core.domain.serialization.UuidSerializer
import kotlinx.serialization.Serializable
import kotlin.uuid.Uuid import kotlin.uuid.Uuid
/** /**
@@ -11,12 +11,12 @@ import kotlin.uuid.Uuid
*/ */
@Serializable @Serializable
data class BewerbsKlasse( data class BewerbsKlasse(
@Serializable(with = UuidSerializer::class) @Serializable(with = UuidSerializer::class)
val bewerbsklasseId: Uuid = Uuid.random(), val bewerbsklasseId: Uuid = Uuid.random(),
val sparte: String, val sparte: String,
val code: String, val code: String,
val bezeichnung: String, val bezeichnung: String,
val maxHoehe: Int? = null, val maxHoehe: Int? = null,
val aufgabenNiveau: String? = null, val aufgabenNiveau: String? = null,
val istAktiv: Boolean = true val istAktiv: Boolean = true
) )
@@ -2,18 +2,16 @@
package at.mocode.masterdata.domain.model package at.mocode.masterdata.domain.model
import kotlinx.serialization.Serializable
import at.mocode.core.domain.serialization.UuidSerializer import at.mocode.core.domain.serialization.UuidSerializer
import at.mocode.core.domain.serialization.LocalDateSerializer import kotlinx.serialization.Serializable
import kotlinx.datetime.LocalDate
import kotlin.uuid.Uuid import kotlin.uuid.Uuid
@Serializable @Serializable
data class ReitLizenz( data class ReitLizenz(
@Serializable(with = UuidSerializer::class) @Serializable(with = UuidSerializer::class)
val lizenzId: Uuid = Uuid.random(), val lizenzId: Uuid = Uuid.random(),
val code: String, val code: String,
val bezeichnung: String, val bezeichnung: String,
val sparte: String? = null, val sparte: String? = null,
val istAktiv: Boolean = true val istAktiv: Boolean = true
) )
@@ -221,7 +221,7 @@ data class Reiter(
// Validation against bundeslandNummer if available // Validation against bundeslandNummer if available
// ZNS bundeslandNummer is 01-09, while membership first digit is 1-9 // ZNS bundeslandNummer is 01-09, while membership first digit is 1-9
if (bundeslandNummer != null && b != bundeslandNummer) { if (bundeslandNummer != null && b != bundeslandNummer) {
return false return false
} }
// Verein part (2nd-4th digit) // Verein part (2nd-4th digit)
@@ -2,8 +2,8 @@
package at.mocode.masterdata.domain.model package at.mocode.masterdata.domain.model
import kotlinx.serialization.Serializable
import at.mocode.core.domain.serialization.UuidSerializer import at.mocode.core.domain.serialization.UuidSerializer
import kotlinx.serialization.Serializable
import kotlin.uuid.Uuid import kotlin.uuid.Uuid
/** /**
@@ -11,10 +11,10 @@ import kotlin.uuid.Uuid
*/ */
@Serializable @Serializable
data class TurnierKategorie( data class TurnierKategorie(
@Serializable(with = UuidSerializer::class) @Serializable(with = UuidSerializer::class)
val kategorieId: Uuid = Uuid.random(), val kategorieId: Uuid = Uuid.random(),
val code: String, val code: String,
val bezeichnung: String, val bezeichnung: String,
val sparte: String? = null, val sparte: String? = null,
val istAktiv: Boolean = true val istAktiv: Boolean = true
) )
@@ -2,8 +2,8 @@
package at.mocode.masterdata.domain.model package at.mocode.masterdata.domain.model
import kotlinx.serialization.Serializable
import at.mocode.core.domain.serialization.UuidSerializer import at.mocode.core.domain.serialization.UuidSerializer
import kotlinx.serialization.Serializable
import kotlin.uuid.Uuid import kotlin.uuid.Uuid
/** /**
@@ -11,12 +11,12 @@ import kotlin.uuid.Uuid
*/ */
@Serializable @Serializable
data class TurnierKlasse( data class TurnierKlasse(
@Serializable(with = UuidSerializer::class) @Serializable(with = UuidSerializer::class)
val turnierklasseId: Uuid = Uuid.random(), val turnierklasseId: Uuid = Uuid.random(),
val sparte: String, val sparte: String,
val code: String, val code: String,
val bezeichnung: String, val bezeichnung: String,
val maxHoehe: Int? = null, val maxHoehe: Int? = null,
val aufgabenNiveau: String? = null, val aufgabenNiveau: String? = null,
val istAktiv: Boolean = true val istAktiv: Boolean = true
) )
@@ -2,8 +2,8 @@
package at.mocode.masterdata.domain.model package at.mocode.masterdata.domain.model
import kotlinx.serialization.Serializable
import at.mocode.core.domain.serialization.UuidSerializer import at.mocode.core.domain.serialization.UuidSerializer
import kotlinx.serialization.Serializable
import kotlin.uuid.Uuid import kotlin.uuid.Uuid
/** /**
@@ -11,9 +11,9 @@ import kotlin.uuid.Uuid
*/ */
@Serializable @Serializable
data class TurnierSparte( data class TurnierSparte(
@Serializable(with = UuidSerializer::class) @Serializable(with = UuidSerializer::class)
val sparteId: Uuid = Uuid.random(), val sparteId: Uuid = Uuid.random(),
val code: String, val code: String,
val bezeichnung: String, val bezeichnung: String,
val istAktiv: Boolean = true val istAktiv: Boolean = true
) )
@@ -10,7 +10,7 @@ import at.mocode.masterdata.domain.model.Startkarte
* Repository für alle Lizenz-Stammdaten (Reit, Fahr, Startkarten). * Repository für alle Lizenz-Stammdaten (Reit, Fahr, Startkarten).
*/ */
interface MasterdataLicenseRepository { interface MasterdataLicenseRepository {
suspend fun findReitLizenzByCode(code: String): at.mocode.masterdata.domain.model.ReitLizenz? suspend fun findReitLizenzByCode(code: String): ReitLizenz?
suspend fun findFahrLizenzByCode(code: String): at.mocode.masterdata.domain.model.FahrLizenz? suspend fun findFahrLizenzByCode(code: String): FahrLizenz?
suspend fun findStartkarteByCode(code: String): at.mocode.masterdata.domain.model.Startkarte? suspend fun findStartkarteByCode(code: String): Startkarte?
} }
@@ -16,38 +16,45 @@ import kotlin.uuid.Uuid
* Hinweis: Implementiert nur die für den ZNS-Import notwendigen Methoden. * Hinweis: Implementiert nur die für den ZNS-Import notwendigen Methoden.
*/ */
class BundeslandExposedRepository : BundeslandRepository { class BundeslandExposedRepository : BundeslandRepository {
private fun rowToDom(row: ResultRow) = BundeslandDefinition( private fun rowToDom(row: ResultRow) = BundeslandDefinition(
bundeslandId = row[BundeslaenderTable.id], bundeslandId = row[BundeslaenderTable.id],
landId = row[BundeslaenderTable.landId], landId = row[BundeslaenderTable.landId],
bundeslandNr = row[BundeslaenderTable.bundeslandNr], bundeslandNr = row[BundeslaenderTable.bundeslandNr],
oepsCode = row[BundeslaenderTable.oepsCode], oepsCode = row[BundeslaenderTable.oepsCode],
iso3166_2_Code = row[BundeslaenderTable.iso3166_2_Code], iso3166_2_Code = row[BundeslaenderTable.iso3166_2_Code],
name = row[BundeslaenderTable.name], name = row[BundeslaenderTable.name],
kuerzel = row[BundeslaenderTable.kuerzel], kuerzel = row[BundeslaenderTable.kuerzel],
wappenUrl = row[BundeslaenderTable.wappenUrl], wappenUrl = row[BundeslaenderTable.wappenUrl],
istAktiv = row[BundeslaenderTable.istAktiv], istAktiv = row[BundeslaenderTable.istAktiv],
sortierReihenfolge = row[BundeslaenderTable.sortierReihenfolge], sortierReihenfolge = row[BundeslaenderTable.sortierReihenfolge],
createdAt = row[BundeslaenderTable.createdAt], createdAt = row[BundeslaenderTable.createdAt],
updatedAt = row[BundeslaenderTable.updatedAt] updatedAt = row[BundeslaenderTable.updatedAt]
) )
override suspend fun findByNr(nr: Int): BundeslandDefinition? = DatabaseFactory.dbQuery { override suspend fun findByNr(nr: Int): BundeslandDefinition? = DatabaseFactory.dbQuery {
BundeslaenderTable.selectAll().where { BundeslaenderTable.bundeslandNr eq nr } BundeslaenderTable.selectAll().where { BundeslaenderTable.bundeslandNr eq nr }
.map(::rowToDom) .map(::rowToDom)
.singleOrNull() .singleOrNull()
} }
// Dummy-Implementierungen für das Interface, da derzeit nicht vom ZNS-Import benötigt // 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 findById(id: Uuid): BundeslandDefinition? = null
override suspend fun findByOepsCode(oepsCode: String, landId: 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 findByIso3166_2_Code(iso3166_2_Code: String): BundeslandDefinition? = null
override suspend fun findByCountry(landId: Uuid, activeOnly: Boolean, orderBySortierung: Boolean): List<BundeslandDefinition> = emptyList() override suspend fun findByCountry(
override suspend fun findByName(searchTerm: String, landId: Uuid?, limit: Int): List<BundeslandDefinition> = emptyList() landId: Uuid,
override suspend fun findAllActive(orderBySortierung: Boolean): List<BundeslandDefinition> = emptyList() activeOnly: Boolean,
override suspend fun save(bundesland: BundeslandDefinition): BundeslandDefinition = bundesland orderBySortierung: Boolean
override suspend fun upsertByLandIdAndKuerzel(bundesland: BundeslandDefinition): BundeslandDefinition = bundesland ): List<BundeslandDefinition> = emptyList()
override suspend fun delete(id: Uuid): Boolean = false
override suspend fun existsByOepsCode(oepsCode: String, landId: Uuid): Boolean = false override suspend fun findByName(searchTerm: String, landId: Uuid?, limit: Int): List<BundeslandDefinition> =
override suspend fun existsByIso3166_2_Code(iso3166_2_Code: String): Boolean = false emptyList()
override suspend fun countActiveByCountry(landId: Uuid): Long = 0L
override suspend fun findAllActive(orderBySortierung: Boolean): List<BundeslandDefinition> = 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
} }
@@ -68,7 +68,7 @@ class ReiterExposedRepository : ReiterRepository {
private fun loadLizenzen(reiterId: Uuid): List<ReiterLizenz> { private fun loadLizenzen(reiterId: Uuid): List<ReiterLizenz> {
return ReiterLizenzenZuordnungTable.selectAll().where { ReiterLizenzenZuordnungTable.reiterId eq reiterId } return ReiterLizenzenZuordnungTable.selectAll().where { ReiterLizenzenZuordnungTable.reiterId eq reiterId }
.map { .map {
at.mocode.masterdata.domain.model.ReiterLizenz( ReiterLizenz(
lizenzId = it[ReiterLizenzenZuordnungTable.id], lizenzId = it[ReiterLizenzenZuordnungTable.id],
lizenzTyp = it[ReiterLizenzenZuordnungTable.lizenzTyp], lizenzTyp = it[ReiterLizenzenZuordnungTable.lizenzTyp],
kuerzel = it[ReiterLizenzenZuordnungTable.kuerzel], kuerzel = it[ReiterLizenzenZuordnungTable.kuerzel],
@@ -2,7 +2,6 @@
package at.mocode.masterdata.infrastructure.persistence.reiter 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.core.Table
import org.jetbrains.exposed.v1.datetime.CurrentTimestamp import org.jetbrains.exposed.v1.datetime.CurrentTimestamp
import org.jetbrains.exposed.v1.datetime.date import org.jetbrains.exposed.v1.datetime.date
@@ -1,12 +1,13 @@
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class) @file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
package at.mocode.masterdata.service.config package at.mocode.masterdata.service.config
import at.mocode.masterdata.infrastructure.persistence.AltersklasseTable import at.mocode.masterdata.infrastructure.persistence.AltersklasseTable
import jakarta.annotation.PostConstruct 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.insert
import org.jetbrains.exposed.v1.jdbc.selectAll 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.slf4j.LoggerFactory
import org.springframework.context.annotation.Configuration import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.DependsOn import org.springframework.context.annotation.DependsOn
@@ -20,38 +21,38 @@ import kotlin.uuid.Uuid
@Profile("!test") @Profile("!test")
@DependsOn("masterdataDatabaseConfiguration") @DependsOn("masterdataDatabaseConfiguration")
class AltersklassenSeeder { class AltersklassenSeeder {
private val log = LoggerFactory.getLogger(AltersklassenSeeder::class.java) private val log = LoggerFactory.getLogger(AltersklassenSeeder::class.java)
@PostConstruct @PostConstruct
fun seed() { fun seed() {
log.info("Starte Seeding der Altersklassen...") log.info("Starte Seeding der Altersklassen...")
transaction { transaction {
val klassen = listOf( val klassen = listOf(
Triple("JG", "JUGENDLICHER", "Altersklasse Jugend"), Triple("JG", "JUGENDLICHER", "Altersklasse Jugend"),
Triple("JR", "JUNIOR", "Altersklasse Junior"), Triple("JR", "JUNIOR", "Altersklasse Junior"),
Triple("25", "U25", "Altersklasse U25"), Triple("25", "U25", "Altersklasse U25"),
Triple("Y", "JUNGER-REITER", "Altersklasse Junger Reiter") Triple("Y", "JUNGER-REITER", "Altersklasse Junger Reiter")
) )
klassen.forEach { (code, bez, desc) -> klassen.forEach { (code, bez, desc) ->
upsertAltersklasse(code, bez) upsertAltersklasse(code, bez)
} }
}
} }
}
private fun upsertAltersklasse(code: String, bezeichnung: String) { private fun upsertAltersklasse(code: String, bezeichnung: String) {
val exists = AltersklasseTable.selectAll() val exists = AltersklasseTable.selectAll()
.where { AltersklasseTable.altersklasseCode eq code } .where { AltersklasseTable.altersklasseCode eq code }
.any() .any()
if (!exists) { if (!exists) {
AltersklasseTable.insert { AltersklasseTable.insert {
it[id] = Uuid.random() it[id] = Uuid.random()
it[altersklasseCode] = code it[altersklasseCode] = code
it[AltersklasseTable.bezeichnung] = bezeichnung it[AltersklasseTable.bezeichnung] = bezeichnung
it[istAktiv] = true it[istAktiv] = true
} }
log.debug("Altersklasse '{}' angelegt.", code) log.debug("Altersklasse '{}' angelegt.", code)
}
} }
}
} }