Refactor domain models (DomFunktionaer, DomReiter, DomPferd) for ZNS alignment: update properties, streamline validation logic, and enhance parser to support new format. Adjust controllers and repository methods accordingly.

This commit is contained in:
2026-04-05 08:21:11 +02:00
parent aba7b58dd4
commit a61dda69d1
27 changed files with 1006 additions and 1111 deletions
@@ -24,20 +24,12 @@ import kotlin.uuid.Uuid
*/
class FunktionaerController(private val funktionaerRepository: FunktionaerRepository) {
@Serializable
data class FunktionaerDto(
val funktionaerId: String,
val richterNummer: String? = null,
val vorname: String,
val nachname: String,
@Serializable(with = LocalDateSerializer::class)
val geburtsdatum: LocalDate? = null,
val rollen: List<String>,
val richterQualifikation: String? = null,
val qualifiziertFuerSparten: List<String>,
val email: String? = null,
val telefon: String? = null,
val vereinsNummer: String? = null,
val satzID: String,
val satzNummer: Int,
val name: String? = null,
val qualifikationen: List<String> = emptyList(),
val istAktiv: Boolean,
val bemerkungen: String? = null,
@Serializable(with = InstantSerializer::class)
@@ -46,33 +38,18 @@ class FunktionaerController(private val funktionaerRepository: FunktionaerReposi
@Serializable
data class FunktionaerCreateRequest(
val richterNummer: String? = null,
val vorname: String,
val nachname: String,
@Serializable(with = LocalDateSerializer::class)
val geburtsdatum: LocalDate? = null,
val rollen: List<String> = emptyList(),
val richterQualifikation: String? = null,
val qualifiziertFuerSparten: List<String> = emptyList(),
val email: String? = null,
val telefon: String? = null,
val vereinsNummer: String? = null,
val satzID: String,
val satzNummer: Int,
val name: String? = null,
val qualifikationen: List<String> = emptyList(),
val istAktiv: Boolean = true,
val bemerkungen: String? = null
)
@Serializable
data class FunktionaerUpdateRequest(
val vorname: String? = null,
val nachname: String? = null,
@Serializable(with = LocalDateSerializer::class)
val geburtsdatum: LocalDate? = null,
val rollen: List<String>? = null,
val richterQualifikation: String? = null,
val qualifiziertFuerSparten: List<String>? = null,
val email: String? = null,
val telefon: String? = null,
val vereinsNummer: String? = null,
val name: String? = null,
val qualifikationen: List<String>? = null,
val istAktiv: Boolean? = null,
val bemerkungen: String? = null
)
@@ -81,29 +58,22 @@ class FunktionaerController(private val funktionaerRepository: FunktionaerReposi
route("/funktionaer") {
/**
* GET /funktionaer — Alle Funktionäre (paginiert), optional gefiltert nach rolle.
* GET /funktionaer — Alle Funktionäre (paginiert).
*/
get {
val rolleParam = call.request.queryParameters["rolle"]
val limit = call.request.queryParameters["limit"]?.toIntOrNull() ?: 100
val offset = call.request.queryParameters["offset"]?.toIntOrNull() ?: 0
val results = if (rolleParam != null) {
val rolle = runCatching { FunktionaerRolleE.valueOf(rolleParam) }.getOrNull()
?: return@get call.respond(HttpStatusCode.BadRequest, "Ungültige Rolle: $rolleParam")
funktionaerRepository.findByRolle(rolle)
} else {
funktionaerRepository.findAll(limit, offset)
}
val results = funktionaerRepository.findAll(limit, offset)
call.respond(results.map { it.toDto() })
}
/**
* GET /funktionaer/search?q=... — Sucht Funktionäre nach Name.
* GET /funktionaer/search?q=... — Sucht Funktionäre nach SatzNummer.
*/
get("/search") {
val query = call.request.queryParameters["q"] ?: ""
val results = funktionaerRepository.findByName(query)
val query = call.request.queryParameters["q"]?.toIntOrNull() ?: 0
val results = funktionaerRepository.findAll(100, 0).filter { it.satzNummer == query }
call.respond(results.map { it.toDto() })
}
@@ -117,11 +87,12 @@ class FunktionaerController(private val funktionaerRepository: FunktionaerReposi
}
/**
* GET /funktionaer/richternummer/{nr} — Sucht einen Funktionär nach seiner Richternummer.
* GET /funktionaer/satz/{satzID}/{satzNummer} — Sucht einen Funktionär nach Satz-ID und Nummer.
*/
get("/richternummer/{nr}") {
val nr = call.parameters["nr"] ?: return@get call.respond(HttpStatusCode.BadRequest)
val funktionaer = funktionaerRepository.findByRichterNummer(nr)
get("/satz/{satzID}/{satzNummer}") {
val satzID = call.parameters["satzID"] ?: return@get call.respond(HttpStatusCode.BadRequest)
val satzNummer = call.parameters["satzNummer"]?.toIntOrNull() ?: return@get call.respond(HttpStatusCode.BadRequest)
val funktionaer = funktionaerRepository.findBySatz(satzID, satzNummer)
if (funktionaer != null) call.respond(funktionaer.toDto()) else call.respond(HttpStatusCode.NotFound)
}
@@ -130,29 +101,11 @@ class FunktionaerController(private val funktionaerRepository: FunktionaerReposi
*/
post {
val req = call.receive<FunktionaerCreateRequest>()
val rollen = req.rollen.mapNotNull { runCatching { FunktionaerRolleE.valueOf(it) }.getOrNull() }.toSet()
if (rollen.size != req.rollen.size) {
return@post call.respond(HttpStatusCode.BadRequest, "Ungültige Rolle(n) in: ${req.rollen}")
}
val richterQualifikation = req.richterQualifikation?.let {
runCatching { RichterQualifikationE.valueOf(it) }.getOrNull()
?: return@post call.respond(HttpStatusCode.BadRequest, "Ungültige richterQualifikation: $it")
}
val sparten = req.qualifiziertFuerSparten.mapNotNull { runCatching { SparteE.valueOf(it) }.getOrNull() }.toSet()
if (sparten.size != req.qualifiziertFuerSparten.size) {
return@post call.respond(HttpStatusCode.BadRequest, "Ungültige Sparte(n) in: ${req.qualifiziertFuerSparten}")
}
val domFunktionaer = DomFunktionaer(
richterNummer = req.richterNummer,
vorname = req.vorname,
nachname = req.nachname,
geburtsdatum = req.geburtsdatum,
rollen = rollen,
richterQualifikation = richterQualifikation,
qualifiziertFuerSparten = sparten,
email = req.email,
telefon = req.telefon,
vereinsNummer = req.vereinsNummer,
satzID = req.satzID,
satzNummer = req.satzNummer,
name = req.name,
qualifikationen = req.qualifikationen,
istAktiv = req.istAktiv,
bemerkungen = req.bemerkungen
)
@@ -168,37 +121,9 @@ class FunktionaerController(private val funktionaerRepository: FunktionaerReposi
val existing = funktionaerRepository.findById(id) ?: return@put call.respond(HttpStatusCode.NotFound)
val req = call.receive<FunktionaerUpdateRequest>()
val rollen = req.rollen?.let { rollenList ->
val parsed = rollenList.mapNotNull { runCatching { FunktionaerRolleE.valueOf(it) }.getOrNull() }.toSet()
if (parsed.size != rollenList.size) {
return@put call.respond(HttpStatusCode.BadRequest, "Ungültige Rolle(n) in: $rollenList")
}
parsed
} ?: existing.rollen
val richterQualifikation = req.richterQualifikation?.let {
runCatching { RichterQualifikationE.valueOf(it) }.getOrNull()
?: return@put call.respond(HttpStatusCode.BadRequest, "Ungültige richterQualifikation: $it")
} ?: existing.richterQualifikation
val sparten = req.qualifiziertFuerSparten?.let { spartenList ->
val parsed = spartenList.mapNotNull { runCatching { SparteE.valueOf(it) }.getOrNull() }.toSet()
if (parsed.size != spartenList.size) {
return@put call.respond(HttpStatusCode.BadRequest, "Ungültige Sparte(n) in: $spartenList")
}
parsed
} ?: existing.qualifiziertFuerSparten
val updated = existing.copy(
vorname = req.vorname ?: existing.vorname,
nachname = req.nachname ?: existing.nachname,
geburtsdatum = req.geburtsdatum ?: existing.geburtsdatum,
rollen = rollen,
richterQualifikation = richterQualifikation,
qualifiziertFuerSparten = sparten,
email = req.email ?: existing.email,
telefon = req.telefon ?: existing.telefon,
vereinsNummer = req.vereinsNummer ?: existing.vereinsNummer,
name = req.name ?: existing.name,
qualifikationen = req.qualifikationen ?: existing.qualifikationen,
istAktiv = req.istAktiv ?: existing.istAktiv,
bemerkungen = req.bemerkungen ?: existing.bemerkungen
)
@@ -221,16 +146,10 @@ class FunktionaerController(private val funktionaerRepository: FunktionaerReposi
private fun DomFunktionaer.toDto() = FunktionaerDto(
funktionaerId = funktionaerId.toString(),
richterNummer = richterNummer,
vorname = vorname,
nachname = nachname,
geburtsdatum = geburtsdatum,
rollen = rollen.map { it.name },
richterQualifikation = richterQualifikation?.name,
qualifiziertFuerSparten = qualifiziertFuerSparten.map { it.name },
email = email,
telefon = telefon,
vereinsNummer = vereinsNummer,
satzID = satzID,
satzNummer = satzNummer,
name = name,
qualifikationen = qualifikationen,
istAktiv = istAktiv,
bemerkungen = bemerkungen,
updatedAt = updatedAt
@@ -25,101 +25,66 @@ class HorseController(private val horseRepository: HorseRepository) {
@Serializable
data class HorseDto(
val pferdId: String,
val kopfnummer: String? = null,
val pferdeName: String,
val geschlecht: String,
@Serializable(with = LocalDateSerializer::class)
val geburtsdatum: LocalDate? = null,
val rasse: String? = null,
val farbe: String? = null,
val lebensnummer: String? = null,
val chipNummer: String? = null,
val passNummer: String? = null,
val oepsNummer: String? = null,
val feiNummer: String? = null,
val besitzerId: String? = null,
val vaterName: String? = null,
val mutterName: String? = null,
val stockmass: Int? = null,
val geschlecht: String,
val geburtsjahr: Int? = null,
val farbe: String? = null,
val satznummer: String? = null,
val istAktiv: Boolean,
val bemerkungen: String? = null,
@Serializable(with = InstantSerializer::class)
val updatedAt: Instant
)
@Serializable
data class HorseCreateRequest(
val kopfnummer: String? = null,
val pferdeName: String,
val geschlecht: String,
@Serializable(with = LocalDateSerializer::class)
val geburtsdatum: LocalDate? = null,
val rasse: String? = null,
val farbe: String? = null,
val lebensnummer: String? = null,
val chipNummer: String? = null,
val passNummer: String? = null,
val oepsNummer: String? = null,
val feiNummer: String? = null,
val besitzerId: String? = null,
val vaterName: String? = null,
val mutterName: String? = null,
val stockmass: Int? = null,
val istAktiv: Boolean = true,
val bemerkungen: String? = null
val geschlecht: String,
val geburtsjahr: Int? = null,
val farbe: String? = null,
val satznummer: String? = null,
val istAktiv: Boolean = true
)
@Serializable
data class HorseUpdateRequest(
val kopfnummer: String? = null,
val pferdeName: String? = null,
val geschlecht: String? = null,
@Serializable(with = LocalDateSerializer::class)
val geburtsdatum: LocalDate? = null,
val rasse: String? = null,
val farbe: String? = null,
val lebensnummer: String? = null,
val chipNummer: String? = null,
val passNummer: String? = null,
val oepsNummer: String? = null,
val feiNummer: String? = null,
val besitzerId: String? = null,
val vaterName: String? = null,
val mutterName: String? = null,
val stockmass: Int? = null,
val istAktiv: Boolean? = null,
val bemerkungen: String? = null
val geschlecht: String? = null,
val geburtsjahr: Int? = null,
val farbe: String? = null,
val istAktiv: Boolean? = null
)
fun Route.registerRoutes() {
route("/horse") {
/**
* GET /horse — Alle Pferde (paginiert), optional gefiltert nach jahrgang oder besitzerId.
* GET /horse — Alle Pferde (paginiert), optional gefiltert nach jahrgang.
*/
get {
val jahrgang = call.request.queryParameters["jahrgang"]?.toIntOrNull()
val besitzerId = call.request.queryParameters["besitzerId"]
val limit = call.request.queryParameters["limit"]?.toIntOrNull() ?: 100
val offset = call.request.queryParameters["offset"]?.toIntOrNull() ?: 0
val results = when {
jahrgang != null -> horseRepository.findByBirthYear(jahrgang)
besitzerId != null -> {
val ownerId = runCatching { Uuid.parse(besitzerId) }.getOrNull()
?: return@get call.respond(HttpStatusCode.BadRequest, "Ungültige besitzerId")
horseRepository.findByOwnerId(ownerId)
}
else -> horseRepository.findAllActive(limit)
}
call.respond(results.map { it.toDto() })
}
/**
* GET /horse/search?q=... — Sucht Pferde nach Name.
* GET /horse/search?q=... — Sucht Pferde nach Lebensnummer.
*/
get("/search") {
val query = call.request.queryParameters["q"] ?: ""
val results = horseRepository.findByName(query)
call.respond(results.map { it.toDto() })
val result = horseRepository.findByLebensnummer(query)
if (result != null) call.respond(listOf(result.toDto())) else call.respond(emptyList<HorseDto>())
}
/**
@@ -147,27 +112,15 @@ class HorseController(private val horseRepository: HorseRepository) {
val req = call.receive<HorseCreateRequest>()
val geschlecht = runCatching { PferdeGeschlechtE.valueOf(req.geschlecht) }.getOrNull()
?: return@post call.respond(HttpStatusCode.BadRequest, "Ungültiges Geschlecht: ${req.geschlecht}")
val besitzerId = req.besitzerId?.let {
runCatching { Uuid.parse(it) }.getOrNull()
?: return@post call.respond(HttpStatusCode.BadRequest, "Ungültige besitzerId")
}
val domPferd = DomPferd(
kopfnummer = req.kopfnummer,
pferdeName = req.pferdeName,
geschlecht = geschlecht,
geburtsdatum = req.geburtsdatum,
rasse = req.rasse,
farbe = req.farbe,
lebensnummer = req.lebensnummer,
chipNummer = req.chipNummer,
passNummer = req.passNummer,
oepsNummer = req.oepsNummer,
feiNummer = req.feiNummer,
besitzerId = besitzerId,
vaterName = req.vaterName,
mutterName = req.mutterName,
stockmass = req.stockmass,
istAktiv = req.istAktiv,
bemerkungen = req.bemerkungen
geschlecht = geschlecht,
geburtsjahr = req.geburtsjahr,
farbe = req.farbe,
satznummer = req.satznummer,
istAktiv = req.istAktiv
)
val saved = horseRepository.save(domPferd)
call.respond(HttpStatusCode.Created, saved.toDto())
@@ -184,27 +137,14 @@ class HorseController(private val horseRepository: HorseRepository) {
runCatching { PferdeGeschlechtE.valueOf(it) }.getOrNull()
?: return@put call.respond(HttpStatusCode.BadRequest, "Ungültiges Geschlecht: $it")
} ?: existing.geschlecht
val besitzerId = req.besitzerId?.let {
runCatching { Uuid.parse(it) }.getOrNull()
?: return@put call.respond(HttpStatusCode.BadRequest, "Ungültige besitzerId")
} ?: existing.besitzerId
val updated = existing.copy(
kopfnummer = req.kopfnummer ?: existing.kopfnummer,
pferdeName = req.pferdeName ?: existing.pferdeName,
geschlecht = geschlecht,
geburtsdatum = req.geburtsdatum ?: existing.geburtsdatum,
rasse = req.rasse ?: existing.rasse,
farbe = req.farbe ?: existing.farbe,
lebensnummer = req.lebensnummer ?: existing.lebensnummer,
chipNummer = req.chipNummer ?: existing.chipNummer,
passNummer = req.passNummer ?: existing.passNummer,
oepsNummer = req.oepsNummer ?: existing.oepsNummer,
feiNummer = req.feiNummer ?: existing.feiNummer,
besitzerId = besitzerId,
vaterName = req.vaterName ?: existing.vaterName,
mutterName = req.mutterName ?: existing.mutterName,
stockmass = req.stockmass ?: existing.stockmass,
istAktiv = req.istAktiv ?: existing.istAktiv,
bemerkungen = req.bemerkungen ?: existing.bemerkungen
geschlecht = geschlecht,
geburtsjahr = req.geburtsjahr ?: existing.geburtsjahr,
farbe = req.farbe ?: existing.farbe,
istAktiv = req.istAktiv ?: existing.istAktiv
)
val saved = horseRepository.save(updated)
call.respond(saved.toDto())
@@ -225,22 +165,14 @@ class HorseController(private val horseRepository: HorseRepository) {
private fun DomPferd.toDto() = HorseDto(
pferdId = pferdId.toString(),
kopfnummer = kopfnummer,
pferdeName = pferdeName,
geschlecht = geschlecht.name,
geburtsdatum = geburtsdatum,
rasse = rasse,
farbe = farbe,
lebensnummer = lebensnummer,
chipNummer = chipNummer,
passNummer = passNummer,
oepsNummer = oepsNummer,
feiNummer = feiNummer,
besitzerId = besitzerId?.toString(),
vaterName = vaterName,
mutterName = mutterName,
stockmass = stockmass,
geschlecht = geschlecht.name,
geburtsjahr = geburtsjahr,
farbe = farbe,
satznummer = satznummer,
istAktiv = istAktiv,
bemerkungen = bemerkungen,
updatedAt = updatedAt
)
}
@@ -22,22 +22,24 @@ import kotlin.uuid.Uuid
*/
class ReiterController(private val reiterRepository: ReiterRepository) {
@Serializable
data class ReiterDto(
val reiterId: String,
val satznummer: String,
val satznummer: String?,
val nachname: String,
val vorname: String,
@Serializable(with = LocalDateSerializer::class)
val geburtsdatum: LocalDate? = null,
val lizenzNummer: String? = null,
val lizenzKlasse: String,
val startkartAktiv: Boolean,
val nation: String? = null,
val vereinsNummer: String? = null,
val bundeslandNummer: Int? = null,
val vereinsName: String? = null,
val nation: String? = null,
val reiterLizenz: String? = null,
val startkarte: String? = null,
val fahrLizenz: String? = null,
val mitgliedsNummer: Int? = null,
val telefonNummer: String? = null,
val lastPayYear: Int? = null,
val feiId: String? = null,
val istGastreiter: Boolean,
val lizenzKlasse: String,
val istAktiv: Boolean,
@Serializable(with = InstantSerializer::class)
val updatedAt: Instant
@@ -50,14 +52,17 @@ class ReiterController(private val reiterRepository: ReiterRepository) {
val vorname: String,
@Serializable(with = LocalDateSerializer::class)
val geburtsdatum: LocalDate? = null,
val lizenzNummer: String? = null,
val lizenzKlasse: String = "LIZENZFREI",
val startkartAktiv: Boolean = false,
val nation: String? = null,
val vereinsNummer: String? = null,
val bundeslandNummer: Int? = null,
val vereinsName: String? = null,
val nation: String? = null,
val reiterLizenz: String? = null,
val startkarte: String? = null,
val fahrLizenz: String? = null,
val mitgliedsNummer: Int? = null,
val telefonNummer: String? = null,
val lastPayYear: Int? = null,
val feiId: String? = null,
val istGastreiter: Boolean = false,
val lizenzKlasse: String = "LIZENZFREI",
val istAktiv: Boolean = true
)
@@ -67,14 +72,17 @@ class ReiterController(private val reiterRepository: ReiterRepository) {
val vorname: String? = null,
@Serializable(with = LocalDateSerializer::class)
val geburtsdatum: LocalDate? = null,
val lizenzNummer: String? = null,
val lizenzKlasse: String? = null,
val startkartAktiv: Boolean? = null,
val nation: String? = null,
val vereinsNummer: String? = null,
val bundeslandNummer: Int? = null,
val vereinsName: String? = null,
val nation: String? = null,
val reiterLizenz: String? = null,
val startkarte: String? = null,
val fahrLizenz: String? = null,
val mitgliedsNummer: Int? = null,
val telefonNummer: String? = null,
val lastPayYear: Int? = null,
val feiId: String? = null,
val istGastreiter: Boolean? = null,
val lizenzKlasse: String? = null,
val istAktiv: Boolean? = null
)
@@ -82,34 +90,23 @@ class ReiterController(private val reiterRepository: ReiterRepository) {
route("/reiter") {
/**
* GET /reiter — Alle Reiter (paginiert), optional gefiltert nach lizenzKlasse oder vereinId.
* GET /reiter — Alle Reiter (paginiert).
*/
get {
val lizenzKlasse = call.request.queryParameters["lizenzKlasse"]
val vereinId = call.request.queryParameters["vereinId"]
val limit = call.request.queryParameters["limit"]?.toIntOrNull() ?: 100
val offset = call.request.queryParameters["offset"]?.toIntOrNull() ?: 0
val results = when {
lizenzKlasse != null -> {
val klasse = runCatching { LizenzKlasseE.valueOf(lizenzKlasse) }.getOrNull()
?: return@get call.respond(HttpStatusCode.BadRequest, "Ungültige lizenzKlasse: $lizenzKlasse")
reiterRepository.findByLizenzKlasse(klasse)
}
vereinId != null -> reiterRepository.findByVereinsNummer(vereinId)
else -> reiterRepository.findAll(limit, offset)
}
val results = reiterRepository.findAll(limit, offset)
call.respond(results.map { it.toDto() })
}
/**
* GET /reiter/search?q=... — Sucht Reiter nach Name oder Satznummer.
* GET /reiter/search?q=... — Sucht Reiter nach Satznummer.
*/
get("/search") {
val query = call.request.queryParameters["q"] ?: ""
val results = reiterRepository.findByName(query)
call.respond(results.map { it.toDto() })
val result = reiterRepository.findBySatznummer(query)
if (result != null) call.respond(listOf(result.toDto())) else call.respond(emptyList<ReiterDto>())
}
/**
@@ -143,14 +140,17 @@ class ReiterController(private val reiterRepository: ReiterRepository) {
nachname = req.nachname,
vorname = req.vorname,
geburtsdatum = req.geburtsdatum,
lizenzNummer = req.lizenzNummer,
lizenzKlasse = lizenzKlasse,
startkartAktiv = req.startkartAktiv,
nation = req.nation,
vereinsNummer = req.vereinsNummer,
bundeslandNummer = req.bundeslandNummer,
vereinsName = req.vereinsName,
nation = req.nation,
reiterLizenz = req.reiterLizenz,
startkarte = req.startkarte,
fahrLizenz = req.fahrLizenz,
mitgliedsNummer = req.mitgliedsNummer,
telefonNummer = req.telefonNummer,
lastPayYear = req.lastPayYear,
feiId = req.feiId,
istGastreiter = req.istGastreiter,
lizenzKlasse = lizenzKlasse,
istAktiv = req.istAktiv
)
val saved = reiterRepository.save(domReiter)
@@ -172,14 +172,17 @@ class ReiterController(private val reiterRepository: ReiterRepository) {
nachname = req.nachname ?: existing.nachname,
vorname = req.vorname ?: existing.vorname,
geburtsdatum = req.geburtsdatum ?: existing.geburtsdatum,
lizenzNummer = req.lizenzNummer ?: existing.lizenzNummer,
lizenzKlasse = lizenzKlasse,
startkartAktiv = req.startkartAktiv ?: existing.startkartAktiv,
nation = req.nation ?: existing.nation,
vereinsNummer = req.vereinsNummer ?: existing.vereinsNummer,
bundeslandNummer = req.bundeslandNummer ?: existing.bundeslandNummer,
vereinsName = req.vereinsName ?: existing.vereinsName,
nation = req.nation ?: existing.nation,
reiterLizenz = req.reiterLizenz ?: existing.reiterLizenz,
startkarte = req.startkarte ?: existing.startkarte,
fahrLizenz = req.fahrLizenz ?: existing.fahrLizenz,
mitgliedsNummer = req.mitgliedsNummer ?: existing.mitgliedsNummer,
telefonNummer = req.telefonNummer ?: existing.telefonNummer,
lastPayYear = req.lastPayYear ?: existing.lastPayYear,
feiId = req.feiId ?: existing.feiId,
istGastreiter = req.istGastreiter ?: existing.istGastreiter,
lizenzKlasse = lizenzKlasse,
istAktiv = req.istAktiv ?: existing.istAktiv
)
val saved = reiterRepository.save(updated)
@@ -205,14 +208,17 @@ class ReiterController(private val reiterRepository: ReiterRepository) {
nachname = nachname,
vorname = vorname,
geburtsdatum = geburtsdatum,
lizenzNummer = lizenzNummer,
lizenzKlasse = lizenzKlasse.name,
startkartAktiv = startkartAktiv,
nation = nation,
vereinsNummer = vereinsNummer,
bundeslandNummer = bundeslandNummer,
vereinsName = vereinsName,
nation = nation,
reiterLizenz = reiterLizenz,
startkarte = startkarte,
fahrLizenz = fahrLizenz,
mitgliedsNummer = mitgliedsNummer,
telefonNummer = telefonNummer,
lastPayYear = lastPayYear,
feiId = feiId,
istGastreiter = istGastreiter,
lizenzKlasse = lizenzKlasse.name,
istAktiv = istAktiv,
updatedAt = updatedAt
)