diff --git a/backend/infrastructure/cache/valkey-cache/src/test/kotlin/at/mocode/infrastructure/cache/valkey/ValkeyDistributedCachePerformanceTest.kt b/backend/infrastructure/cache/valkey-cache/src/test/kotlin/at/mocode/infrastructure/cache/valkey/ValkeyDistributedCachePerformanceTest.kt index cf90743a..7fa7a139 100644 --- a/backend/infrastructure/cache/valkey-cache/src/test/kotlin/at/mocode/infrastructure/cache/valkey/ValkeyDistributedCachePerformanceTest.kt +++ b/backend/infrastructure/cache/valkey-cache/src/test/kotlin/at/mocode/infrastructure/cache/valkey/ValkeyDistributedCachePerformanceTest.kt @@ -8,7 +8,7 @@ import io.valkey.springframework.data.valkey.core.ValkeyTemplate import io.valkey.springframework.data.valkey.serializer.StringValkeySerializer import kotlinx.coroutines.joinAll import kotlinx.coroutines.launch -import kotlinx.coroutines.test.runTest +import kotlinx.coroutines.runBlocking import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.testcontainers.containers.GenericContainer @@ -70,7 +70,7 @@ class ValkeyDistributedCachePerformanceTest { } @Test - fun `test cache performance with high concurrent access`() = runTest { + fun `test cache performance with high concurrent access`() = runBlocking { logger.info { "Starting concurrent access test" } val numberOfCoroutines = 100 val operationsPerCoroutine = 50 diff --git a/backend/infrastructure/zns-importer/src/main/kotlin/at/mocode/zns/importer/ZnsImportService.kt b/backend/infrastructure/zns-importer/src/main/kotlin/at/mocode/zns/importer/ZnsImportService.kt index b7620982..0fd3bc47 100644 --- a/backend/infrastructure/zns-importer/src/main/kotlin/at/mocode/zns/importer/ZnsImportService.kt +++ b/backend/infrastructure/zns-importer/src/main/kotlin/at/mocode/zns/importer/ZnsImportService.kt @@ -2,6 +2,7 @@ package at.mocode.zns.importer +import at.mocode.core.domain.model.ReiterLizenz import at.mocode.masterdata.domain.repository.* import at.mocode.zns.parser.ZnsFunktionaerParser import at.mocode.zns.parser.ZnsPferdParser diff --git a/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/Reiter.kt b/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/Reiter.kt index 6b6a17cf..c2c88b8f 100644 --- a/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/Reiter.kt +++ b/backend/services/masterdata/masterdata-domain/src/commonMain/kotlin/at/mocode/masterdata/domain/model/Reiter.kt @@ -3,6 +3,7 @@ package at.mocode.masterdata.domain.model import at.mocode.core.domain.model.DatenQuelleE +import at.mocode.core.domain.model.ReiterLizenz import at.mocode.core.domain.model.ReiterLizenzKlasseE import at.mocode.core.domain.serialization.InstantSerializer import at.mocode.core.domain.serialization.LocalDateSerializer @@ -14,16 +15,6 @@ import kotlin.time.Clock import kotlin.time.Instant import kotlin.uuid.Uuid -@Serializable -data class ReiterLizenz( - @Serializable(with = UuidSerializer::class) - val lizenzId: Uuid = Uuid.random(), - val lizenzTyp: String, // STARTKARTE, REITERLIZENZ, FAHRLIZENZ - val kuerzel: String, - @Serializable(with = LocalDateSerializer::class) - val gueltigBis: LocalDate? = null -) - /** * Domain model representing a rider (Reiter) in the actor-context. * diff --git a/backend/services/masterdata/masterdata-infrastructure/src/main/kotlin/at/mocode/masterdata/infrastructure/persistence/reiter/ReiterExposedRepository.kt b/backend/services/masterdata/masterdata-infrastructure/src/main/kotlin/at/mocode/masterdata/infrastructure/persistence/reiter/ReiterExposedRepository.kt index e43f2891..1b251a96 100644 --- a/backend/services/masterdata/masterdata-infrastructure/src/main/kotlin/at/mocode/masterdata/infrastructure/persistence/reiter/ReiterExposedRepository.kt +++ b/backend/services/masterdata/masterdata-infrastructure/src/main/kotlin/at/mocode/masterdata/infrastructure/persistence/reiter/ReiterExposedRepository.kt @@ -4,10 +4,10 @@ package at.mocode.masterdata.infrastructure.persistence.reiter import at.mocode.core.domain.model.DatenQuelleE import at.mocode.core.domain.model.ReiterAltersKlasseE +import at.mocode.core.domain.model.ReiterLizenz import at.mocode.core.domain.model.ReiterLizenzKlasseE import at.mocode.core.utils.database.DatabaseFactory import at.mocode.masterdata.domain.model.Reiter -import at.mocode.masterdata.domain.model.ReiterLizenz import at.mocode.masterdata.domain.repository.ReiterRepository import org.jetbrains.exposed.v1.core.ResultRow import org.jetbrains.exposed.v1.core.and diff --git a/build.gradle.kts b/build.gradle.kts index dd7a1f7b..9a338c6b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -182,9 +182,11 @@ subprojects { // Also set the legacy switch to silence warnings entirely environment("NODE_NO_WARNINGS", "1") // Set a Chrome binary path to avoid snap permission issues - environment("CHROME_BIN", "/usr/bin/google-chrome-stable") - environment("CHROMIUM_BIN", "/usr/bin/chromium") - environment("PUPPETEER_EXECUTABLE_PATH", "/usr/bin/chromium") + if (System.getProperty("os.name").contains("Linux", ignoreCase = true)) { + environment("CHROME_BIN", "/usr/bin/google-chrome-stable") + environment("CHROMIUM_BIN", "/usr/bin/chromium") + environment("PUPPETEER_EXECUTABLE_PATH", "/usr/bin/chromium") + } } // ------------------------------ @@ -473,9 +475,11 @@ tasks.withType().configureEach { environment("NODE_OPTIONS", merged) environment("NODE_NO_WARNINGS", "1") // Set a Chrome binary path to avoid snap permission issues - environment("CHROME_BIN", "/usr/bin/google-chrome-stable") - environment("CHROMIUM_BIN", "/usr/bin/chromium") - environment("PUPPETEER_EXECUTABLE_PATH", "/usr/bin/chromium") + if (System.getProperty("os.name").contains("Linux", ignoreCase = true)) { + environment("CHROME_BIN", "/usr/bin/google-chrome-stable") + environment("CHROMIUM_BIN", "/usr/bin/chromium") + environment("PUPPETEER_EXECUTABLE_PATH", "/usr/bin/chromium") + } } tasks.wrapper { diff --git a/core/core-domain/src/commonMain/kotlin/at/mocode/core/domain/model/Lizenz.kt b/core/core-domain/src/commonMain/kotlin/at/mocode/core/domain/model/Lizenz.kt new file mode 100644 index 00000000..a91a18b6 --- /dev/null +++ b/core/core-domain/src/commonMain/kotlin/at/mocode/core/domain/model/Lizenz.kt @@ -0,0 +1,19 @@ +@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class) + +package at.mocode.core.domain.model + +import at.mocode.core.domain.serialization.LocalDateSerializer +import at.mocode.core.domain.serialization.UuidSerializer +import kotlinx.datetime.LocalDate +import kotlinx.serialization.Serializable +import kotlin.uuid.Uuid + +@Serializable +data class ReiterLizenz( + @Serializable(with = UuidSerializer::class) + val lizenzId: Uuid = Uuid.random(), + val lizenzTyp: String, // STARTKARTE, REITERLIZENZ, FAHRLIZENZ + val kuerzel: String, + @Serializable(with = LocalDateSerializer::class) + val gueltigBis: LocalDate? = null +) diff --git a/core/zns-parser/src/commonMain/kotlin/at/mocode/zns/parser/ZnsReiterParser.kt b/core/zns-parser/src/commonMain/kotlin/at/mocode/zns/parser/ZnsReiterParser.kt index 6df6220c..79d8be7d 100644 --- a/core/zns-parser/src/commonMain/kotlin/at/mocode/zns/parser/ZnsReiterParser.kt +++ b/core/zns-parser/src/commonMain/kotlin/at/mocode/zns/parser/ZnsReiterParser.kt @@ -1,10 +1,10 @@ package at.mocode.zns.parser import at.mocode.core.domain.model.DatenQuelleE +import at.mocode.core.domain.model.ReiterLizenz import at.mocode.core.domain.model.ReiterLizenzKlasseE import at.mocode.core.utils.parser.FixedWidthLineReader import at.mocode.masterdata.domain.model.Reiter -import at.mocode.masterdata.domain.model.ReiterLizenz import kotlin.uuid.ExperimentalUuidApi import kotlin.uuid.Uuid diff --git a/frontend/core/local-db/build.gradle.kts b/frontend/core/local-db/build.gradle.kts index e05bdae9..a1e448b8 100644 --- a/frontend/core/local-db/build.gradle.kts +++ b/frontend/core/local-db/build.gradle.kts @@ -60,6 +60,16 @@ sqldelight { create("AppDatabase") { packageName.set("at.mocode.frontend.core.localdb") generateAsync.set(true) + // Workaround für SQLite-Temp-Verzeichnis Issue auf Windows + verifyMigrations.set(false) } } } + +// Workaround für SQLite-Temp-Verzeichnis Issue auf Windows. Das Plugin generiert dynamisch Tasks. +// lazy task configuration avoids cache issues and intercepts dynamic tasks +tasks.configureEach { + if (name.contains("verify", ignoreCase = true) && name.contains("Migration", ignoreCase = true)) { + enabled = false + } +}