Remove deprecated ZnsLegacyParsers, update MASTER_ROADMAP to reflect cleanup of parser remnants, stabilize ZNS import tests, and improve ZnsImportService with refined ZipInputStream management and enhanced functionary-reiter matching logic.
This commit is contained in:
+8
-2
@@ -57,7 +57,8 @@ class ZnsImportService(
|
||||
*/
|
||||
fun extrahiereDateien(zipInputStream: InputStream): Map<String, List<String>> {
|
||||
val dateien = mutableMapOf<String, List<String>>()
|
||||
ZipInputStream(zipInputStream).use { zip ->
|
||||
val zip = ZipInputStream(zipInputStream)
|
||||
try {
|
||||
var entry = zip.nextEntry
|
||||
while (entry != null) {
|
||||
val fileName = entry.name.uppercase().substringAfterLast("/")
|
||||
@@ -73,8 +74,14 @@ class ZnsImportService(
|
||||
val lines = content.split(Regex("\\r?\\n|\\r")).filter { it.isNotBlank() }
|
||||
dateien[fileName] = lines
|
||||
}
|
||||
zip.closeEntry()
|
||||
entry = zip.nextEntry
|
||||
}
|
||||
} finally {
|
||||
// Wir schließen den ZipInputStream NICHT mit use,
|
||||
// um den zugrunde liegenden zipInputStream nicht vorzeitig zu schließen.
|
||||
// Falls der Aufrufer den Stream schließen will, soll er das tun.
|
||||
// Aber wir müssen sicherstellen, dass wir alle Entries gelesen haben.
|
||||
}
|
||||
return dateien
|
||||
}
|
||||
@@ -261,7 +268,6 @@ class ZnsImportService(
|
||||
runCatching {
|
||||
val funktionaerRaw = ZnsFunktionaerParser.parse(zeile) ?: return@forEachIndexed
|
||||
|
||||
// Versuch, den Reiter anhand des Namens (Nachname, Vorname) zu finden
|
||||
val nameParts = funktionaerRaw.name?.split(",")?.map { it.trim() }
|
||||
val reiterId = if (nameParts != null && nameParts.size >= 2) {
|
||||
val nachname = nameParts[0]
|
||||
|
||||
+4
-1
@@ -103,7 +103,8 @@ class ZnsImportServiceTest {
|
||||
qualifikationen: String = "GA"
|
||||
): String {
|
||||
// Stelle 1: Typ (X=Richter, Y=Parcoursbauer), 2-7: Satznummer (6), 8-82: Name (75), 83-112: Quali (30)
|
||||
return typ + satznummer.padEnd(6) + name.padEnd(75) + qualifikationen.padEnd(30)
|
||||
// WICHTIG: satznummer muss genau 6 Stellen lang sein, ohne abschließende Leerzeichen für den Int-Parser
|
||||
return typ + satznummer.padStart(6, '0') + name.padEnd(75) + qualifikationen.padEnd(30)
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
@@ -197,6 +198,7 @@ class ZnsImportServiceTest {
|
||||
|
||||
coEvery { funktionaerRepository.findBySatz(any(), any()) } returns null
|
||||
coEvery { funktionaerRepository.save(any()) } answers { firstArg<Funktionaer>() }
|
||||
coEvery { reiterRepository.findByName(any(), any()) } returns emptyList()
|
||||
|
||||
val result = service.importiereZip(zip)
|
||||
|
||||
@@ -234,6 +236,7 @@ class ZnsImportServiceTest {
|
||||
coEvery { vereinRepository.findByVereinsNummer(any()) } returns null
|
||||
coEvery { vereinRepository.save(any()) } answers { firstArg<Verein>() }
|
||||
coEvery { reiterRepository.findBySatznummer(any()) } returns null
|
||||
coEvery { reiterRepository.findByName(any(), any()) } returns emptyList()
|
||||
coEvery { reiterRepository.save(any()) } answers { firstArg<Reiter>() }
|
||||
coEvery { horseRepository.findBySatznummer(any()) } returns null
|
||||
coEvery { horseRepository.findByLebensnummer(any()) } returns null
|
||||
|
||||
Reference in New Issue
Block a user