Refactor master data infrastructure to streamline Reiter and Bundesland relationships, add V012 migration, harmonize domain models, implement repository methods for enhanced ZNS import logic, and update associated tests.
This commit is contained in:
+21
-2
@@ -6,6 +6,8 @@ import at.mocode.masterdata.domain.repository.VereinRepository
|
||||
import at.mocode.masterdata.domain.repository.HorseRepository
|
||||
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.ZnsPferdParser
|
||||
import at.mocode.zns.parser.ZnsReiterParser
|
||||
@@ -40,7 +42,9 @@ class ZnsImportService(
|
||||
private val vereinRepository: VereinRepository,
|
||||
private val reiterRepository: ReiterRepository,
|
||||
private val horseRepository: HorseRepository,
|
||||
private val funktionaerRepository: FunktionaerRepository
|
||||
private val funktionaerRepository: FunktionaerRepository,
|
||||
private val landRepository: LandRepository,
|
||||
private val bundeslandRepository: BundeslandRepository
|
||||
) {
|
||||
|
||||
companion object {
|
||||
@@ -166,7 +170,19 @@ class ZnsImportService(
|
||||
var aktualisiert = 0
|
||||
zeilen.forEachIndexed { index, zeile ->
|
||||
runCatching {
|
||||
val reiter = ZnsReiterParser.parse(zeile) ?: return@forEachIndexed
|
||||
val parsed = ZnsReiterParser.parse(zeile) ?: return@forEachIndexed
|
||||
|
||||
// Relationen auflösen
|
||||
val verein = parsed.vereinsName?.let { vereinRepository.findByExactName(it) }
|
||||
val bundesland = parsed.bundeslandNummer?.let { bundeslandRepository.findByNr(it) }
|
||||
val nation = parsed.nation?.let { landRepository.findByIsoAlpha3Code(it) }
|
||||
|
||||
val reiter = parsed.copy(
|
||||
vereinId = verein?.vereinId,
|
||||
bundeslandId = bundesland?.bundeslandId,
|
||||
nationId = nation?.landId
|
||||
)
|
||||
|
||||
val vorhanden = reiterRepository.findBySatznummer(reiter.satznummer)
|
||||
if (vorhanden == null) {
|
||||
reiterRepository.save(reiter)
|
||||
@@ -179,6 +195,9 @@ class ZnsImportService(
|
||||
bundeslandNummer = reiter.bundeslandNummer,
|
||||
vereinsName = reiter.vereinsName,
|
||||
nation = reiter.nation,
|
||||
vereinId = reiter.vereinId,
|
||||
bundeslandId = reiter.bundeslandId,
|
||||
nationId = reiter.nationId,
|
||||
reiterLizenz = reiter.reiterLizenz,
|
||||
startkarte = reiter.startkarte,
|
||||
fahrLizenz = reiter.fahrLizenz,
|
||||
|
||||
+20
-1
@@ -8,6 +8,8 @@ import at.mocode.masterdata.domain.repository.FunktionaerRepository
|
||||
import at.mocode.masterdata.domain.repository.HorseRepository
|
||||
import at.mocode.masterdata.domain.repository.ReiterRepository
|
||||
import at.mocode.masterdata.domain.repository.VereinRepository
|
||||
import at.mocode.masterdata.domain.repository.LandRepository
|
||||
import at.mocode.masterdata.domain.repository.BundeslandRepository
|
||||
import io.mockk.coEvery
|
||||
import io.mockk.coVerify
|
||||
import io.mockk.mockk
|
||||
@@ -28,6 +30,8 @@ class ZnsImportServiceTest {
|
||||
private val reiterRepository = mockk<ReiterRepository>()
|
||||
private val horseRepository = mockk<HorseRepository>()
|
||||
private val funktionaerRepository = mockk<FunktionaerRepository>()
|
||||
private val landRepository = mockk<LandRepository>()
|
||||
private val bundeslandRepository = mockk<BundeslandRepository>()
|
||||
|
||||
private lateinit var service: ZnsImportService
|
||||
|
||||
@@ -35,7 +39,19 @@ class ZnsImportServiceTest {
|
||||
|
||||
@BeforeEach
|
||||
fun setUp() {
|
||||
service = ZnsImportService(vereinRepository, reiterRepository, horseRepository, funktionaerRepository)
|
||||
service = ZnsImportService(
|
||||
vereinRepository,
|
||||
reiterRepository,
|
||||
horseRepository,
|
||||
funktionaerRepository,
|
||||
landRepository,
|
||||
bundeslandRepository
|
||||
)
|
||||
|
||||
// Standard-Stubs für optionale Lookups, damit Tests ohne spezifische Erwartungen nicht fehlschlagen
|
||||
coEvery { landRepository.findByIsoAlpha3Code(any()) } returns null
|
||||
coEvery { bundeslandRepository.findByNr(any()) } returns null
|
||||
coEvery { vereinRepository.findByExactName(any()) } returns null
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
@@ -244,6 +260,9 @@ class ZnsImportServiceTest {
|
||||
coEvery { horseRepository.save(any()) } answers { firstArg<Pferd>() }
|
||||
coEvery { funktionaerRepository.findBySatz(any(), any()) } returns null
|
||||
coEvery { funktionaerRepository.save(any()) } answers { firstArg<Funktionaer>() }
|
||||
coEvery { vereinRepository.findByExactName(any()) } returns null
|
||||
coEvery { bundeslandRepository.findByNr(any()) } returns null
|
||||
coEvery { landRepository.findByIsoAlpha3Code(any()) } returns null
|
||||
|
||||
// Importiere nacheinander (Simulation eines vollständigen Workflows)
|
||||
val res1 = service.importiereZip(zipVerein)
|
||||
|
||||
Reference in New Issue
Block a user