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:
+30
-111
@@ -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
|
||||
|
||||
+36
-104
@@ -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
|
||||
)
|
||||
}
|
||||
|
||||
+60
-54
@@ -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
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user