fixing Gradle Probleme
This commit is contained in:
@@ -44,11 +44,11 @@ kotlin {
|
|||||||
implementation(libs.bundles.kotlinx.core)
|
implementation(libs.bundles.kotlinx.core)
|
||||||
|
|
||||||
// HTTP Client
|
// HTTP Client
|
||||||
// implementation(libs.ktor.client.core)
|
implementation(libs.ktor.client.core)
|
||||||
// implementation(libs.ktor.client.contentNegotiation)
|
implementation(libs.ktor.client.contentNegotiation)
|
||||||
// implementation(libs.ktor.client.serialization.kotlinx.json)
|
implementation(libs.ktor.client.serialization.kotlinx.json)
|
||||||
// implementation(libs.ktor.client.logging)
|
implementation(libs.ktor.client.logging)
|
||||||
// implementation(libs.ktor.client.auth)
|
implementation(libs.ktor.client.auth)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -26,7 +26,7 @@ interface AuthenticationService {
|
|||||||
* @param newPassword Das neue Passwort
|
* @param newPassword Das neue Passwort
|
||||||
* @return Das Ergebnis der Passwortänderung
|
* @return Das Ergebnis der Passwortänderung
|
||||||
*/
|
*/
|
||||||
suspend fun changePassword(userId: Uuid, currentPassword: String, newPassword: String): PasswordChangeResult
|
suspend fun changePassword(userId: Uuid?, currentPassword: String, newPassword: String): PasswordChangeResult
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mögliche Ergebnisse eines Authentifizierungsversuchs.
|
* Mögliche Ergebnisse eines Authentifizierungsversuchs.
|
||||||
@@ -81,8 +81,8 @@ interface AuthenticationService {
|
|||||||
* Represents an authenticated user.
|
* Represents an authenticated user.
|
||||||
*/
|
*/
|
||||||
data class AuthenticatedUser(
|
data class AuthenticatedUser(
|
||||||
val userId: Uuid,
|
val userId: Uuid?,
|
||||||
val personId: Uuid,
|
val personId: Uuid?,
|
||||||
val username: String,
|
val username: String,
|
||||||
val email: String,
|
val email: String,
|
||||||
val permissions: List<BerechtigungE>
|
val permissions: List<BerechtigungE>
|
||||||
|
|||||||
+19
-4
@@ -1,7 +1,9 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class) // <-- HINZUGEFÜGT: Für die neue Kotlin UUID API
|
||||||
|
|
||||||
package at.mocode.infrastructure.auth.client
|
package at.mocode.infrastructure.auth.client
|
||||||
|
|
||||||
|
// import com.benasher44.uuid.uuid4 // <-- ENTFERNT: Alter Import
|
||||||
import at.mocode.infrastructure.auth.client.model.BerechtigungE
|
import at.mocode.infrastructure.auth.client.model.BerechtigungE
|
||||||
import com.benasher44.uuid.uuid4
|
|
||||||
import io.mockk.coEvery
|
import io.mockk.coEvery
|
||||||
import io.mockk.mockk
|
import io.mockk.mockk
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
@@ -9,6 +11,7 @@ import org.junit.jupiter.api.Assertions.*
|
|||||||
import org.junit.jupiter.api.BeforeEach
|
import org.junit.jupiter.api.BeforeEach
|
||||||
import org.junit.jupiter.api.Test
|
import org.junit.jupiter.api.Test
|
||||||
import java.time.LocalDateTime
|
import java.time.LocalDateTime
|
||||||
|
import kotlin.uuid.Uuid
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests for the AuthenticationService interface using mocks.
|
* Tests for the AuthenticationService interface using mocks.
|
||||||
@@ -17,8 +20,8 @@ import java.time.LocalDateTime
|
|||||||
class AuthenticationServiceTest {
|
class AuthenticationServiceTest {
|
||||||
|
|
||||||
private lateinit var authService: AuthenticationService
|
private lateinit var authService: AuthenticationService
|
||||||
private val testUserId = uuid4()
|
private val testUserId = Uuid.random() // <-- GEÄNDERT: von uuid4() zu Uuid.random()
|
||||||
private val testPersonId = uuid4()
|
private val testPersonId = Uuid.random() // <-- GEÄNDERT: von uuid4() zu Uuid.random()
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
fun setUp() {
|
fun setUp() {
|
||||||
@@ -206,7 +209,7 @@ class AuthenticationServiceTest {
|
|||||||
@Test
|
@Test
|
||||||
fun `changePassword should handle user not found scenario`() = runTest {
|
fun `changePassword should handle user not found scenario`() = runTest {
|
||||||
// Arrange
|
// Arrange
|
||||||
val nonExistentUserId = uuid4()
|
val nonExistentUserId = Uuid.random() // <-- GEÄNDERT: von uuid4() zu Uuid.random()
|
||||||
val currentPassword = "password"
|
val currentPassword = "password"
|
||||||
val newPassword = "newpassword123"
|
val newPassword = "newpassword123"
|
||||||
|
|
||||||
@@ -282,6 +285,8 @@ class AuthenticationServiceTest {
|
|||||||
assertNotNull(successResult.token)
|
assertNotNull(successResult.token)
|
||||||
assertNotNull(successResult.user)
|
assertNotNull(successResult.user)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else -> fail("Should have been a Success result")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test Failure result
|
// Test Failure result
|
||||||
@@ -289,6 +294,8 @@ class AuthenticationServiceTest {
|
|||||||
is AuthenticationService.AuthResult.Failure -> {
|
is AuthenticationService.AuthResult.Failure -> {
|
||||||
assertEquals("Failed", failureResult.reason)
|
assertEquals("Failed", failureResult.reason)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else -> fail("Should have been a Failure result")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test Locked result
|
// Test Locked result
|
||||||
@@ -296,6 +303,8 @@ class AuthenticationServiceTest {
|
|||||||
is AuthenticationService.AuthResult.Locked -> {
|
is AuthenticationService.AuthResult.Locked -> {
|
||||||
assertNotNull(lockedResult.lockedUntil)
|
assertNotNull(lockedResult.lockedUntil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else -> fail("Should have been a Locked result")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -312,6 +321,8 @@ class AuthenticationServiceTest {
|
|||||||
is AuthenticationService.PasswordChangeResult.Success -> {
|
is AuthenticationService.PasswordChangeResult.Success -> {
|
||||||
// Success case verified
|
// Success case verified
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else -> fail("Should have been a Success result")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test Failure result
|
// Test Failure result
|
||||||
@@ -319,6 +330,8 @@ class AuthenticationServiceTest {
|
|||||||
is AuthenticationService.PasswordChangeResult.Failure -> {
|
is AuthenticationService.PasswordChangeResult.Failure -> {
|
||||||
assertEquals("Failed", failureResult.reason)
|
assertEquals("Failed", failureResult.reason)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else -> fail("Should have been a Failure result")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test WeakPassword result
|
// Test WeakPassword result
|
||||||
@@ -326,6 +339,8 @@ class AuthenticationServiceTest {
|
|||||||
is AuthenticationService.PasswordChangeResult.WeakPassword -> {
|
is AuthenticationService.PasswordChangeResult.WeakPassword -> {
|
||||||
// WeakPassword case verified
|
// WeakPassword case verified
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else -> fail("Should have been a WeakPassword result")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-3
@@ -1,7 +1,9 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
|
|
||||||
package at.mocode.infrastructure.eventstore.api
|
package at.mocode.infrastructure.eventstore.api
|
||||||
|
|
||||||
import at.mocode.core.domain.event.DomainEvent
|
import at.mocode.core.domain.event.DomainEvent
|
||||||
import java.util.UUID
|
import kotlin.uuid.Uuid
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Schnittstelle für die Serialisierung und Deserialisierung von Domain-Events.
|
* Schnittstelle für die Serialisierung und Deserialisierung von Domain-Events.
|
||||||
@@ -56,7 +58,7 @@ interface EventSerializer {
|
|||||||
* @param data Die serialisierten Event-Daten
|
* @param data Die serialisierten Event-Daten
|
||||||
* @return Die Aggregat-ID
|
* @return Die Aggregat-ID
|
||||||
*/
|
*/
|
||||||
fun getAggregateId(data: Map<String, String>): UUID
|
fun getAggregateId(data: Map<String, String>): Uuid
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ermittelt die Event-ID aus einem serialisierten Event.
|
* Ermittelt die Event-ID aus einem serialisierten Event.
|
||||||
@@ -64,7 +66,7 @@ interface EventSerializer {
|
|||||||
* @param data Die serialisierten Event-Daten
|
* @param data Die serialisierten Event-Daten
|
||||||
* @return Die Event-ID
|
* @return Die Event-ID
|
||||||
*/
|
*/
|
||||||
fun getEventId(data: Map<String, String>): UUID
|
fun getEventId(data: Map<String, String>): Uuid
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ermittelt die Version aus einem serialisierten Event.
|
* Ermittelt die Version aus einem serialisierten Event.
|
||||||
|
|||||||
+8
-6
@@ -1,7 +1,9 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
|
|
||||||
package at.mocode.infrastructure.eventstore.api
|
package at.mocode.infrastructure.eventstore.api
|
||||||
|
|
||||||
import at.mocode.core.domain.event.DomainEvent
|
import at.mocode.core.domain.event.DomainEvent
|
||||||
import java.util.UUID
|
import kotlin.uuid.Uuid
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Schnittstelle für einen Event Store, der Domain-Events persistiert.
|
* Schnittstelle für einen Event Store, der Domain-Events persistiert.
|
||||||
@@ -16,7 +18,7 @@ interface EventStore {
|
|||||||
* @return Die neue Version des Streams
|
* @return Die neue Version des Streams
|
||||||
* @throws ConcurrencyException wenn die erwartete Version nicht mit der tatsächlichen Version übereinstimmt
|
* @throws ConcurrencyException wenn die erwartete Version nicht mit der tatsächlichen Version übereinstimmt
|
||||||
*/
|
*/
|
||||||
fun appendToStream(event: DomainEvent, streamId: UUID, expectedVersion: Long): Long
|
fun appendToStream(event: DomainEvent, streamId: Uuid, expectedVersion: Long): Long
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fügt mehrere Events zum Event Store hinzu.
|
* Fügt mehrere Events zum Event Store hinzu.
|
||||||
@@ -27,7 +29,7 @@ interface EventStore {
|
|||||||
* @return Die neue Version des Streams
|
* @return Die neue Version des Streams
|
||||||
* @throws ConcurrencyException wenn die erwartete Version nicht mit der tatsächlichen Version übereinstimmt
|
* @throws ConcurrencyException wenn die erwartete Version nicht mit der tatsächlichen Version übereinstimmt
|
||||||
*/
|
*/
|
||||||
fun appendToStream(events: List<DomainEvent>, streamId: UUID, expectedVersion: Long): Long
|
fun appendToStream(events: List<DomainEvent>, streamId: Uuid, expectedVersion: Long): Long
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Liest Events aus einem Stream.
|
* Liest Events aus einem Stream.
|
||||||
@@ -37,7 +39,7 @@ interface EventStore {
|
|||||||
* @param toVersion Die Version, bis zu der gelesen werden soll (inklusive), oder null um alle Events zu lesen
|
* @param toVersion Die Version, bis zu der gelesen werden soll (inklusive), oder null um alle Events zu lesen
|
||||||
* @return Die Events im Stream
|
* @return Die Events im Stream
|
||||||
*/
|
*/
|
||||||
fun readFromStream(streamId: UUID, fromVersion: Long = 0, toVersion: Long? = null): List<DomainEvent>
|
fun readFromStream(streamId: Uuid, fromVersion: Long = 0, toVersion: Long? = null): List<DomainEvent>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Liest alle Events aus allen Streams.
|
* Liest alle Events aus allen Streams.
|
||||||
@@ -54,7 +56,7 @@ interface EventStore {
|
|||||||
* @param streamId Die ID des Event-Streams
|
* @param streamId Die ID des Event-Streams
|
||||||
* @return Die aktuelle Version des Streams, oder -1 wenn der Stream nicht existiert
|
* @return Die aktuelle Version des Streams, oder -1 wenn der Stream nicht existiert
|
||||||
*/
|
*/
|
||||||
fun getStreamVersion(streamId: UUID): Long
|
fun getStreamVersion(streamId: Uuid): Long
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Abonniert Events von einem spezifischen Stream.
|
* Abonniert Events von einem spezifischen Stream.
|
||||||
@@ -64,7 +66,7 @@ interface EventStore {
|
|||||||
* @param handler Der Handler, der für jedes Event aufgerufen wird
|
* @param handler Der Handler, der für jedes Event aufgerufen wird
|
||||||
* @return Ein Abonnement, das zum Abbestellen verwendet werden kann
|
* @return Ein Abonnement, das zum Abbestellen verwendet werden kann
|
||||||
*/
|
*/
|
||||||
fun subscribeToStream(streamId: UUID, fromVersion: Long = 0, handler: (DomainEvent) -> Unit): Subscription
|
fun subscribeToStream(streamId: Uuid, fromVersion: Long = 0, handler: (DomainEvent) -> Unit): Subscription
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Abonniert alle Events von allen Streams.
|
* Abonniert alle Events von allen Streams.
|
||||||
|
|||||||
+7
-5
@@ -1,3 +1,5 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
|
|
||||||
package at.mocode.infrastructure.eventstore.redis
|
package at.mocode.infrastructure.eventstore.redis
|
||||||
|
|
||||||
import at.mocode.core.domain.event.DomainEvent
|
import at.mocode.core.domain.event.DomainEvent
|
||||||
@@ -7,8 +9,8 @@ import com.fasterxml.jackson.databind.SerializationFeature
|
|||||||
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
|
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
|
||||||
import com.fasterxml.jackson.module.kotlin.kotlinModule
|
import com.fasterxml.jackson.module.kotlin.kotlinModule
|
||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
import java.util.UUID
|
|
||||||
import java.util.concurrent.ConcurrentHashMap
|
import java.util.concurrent.ConcurrentHashMap
|
||||||
|
import kotlin.uuid.Uuid
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Jackson-basierte Implementierung des EventSerializer.
|
* Jackson-basierte Implementierung des EventSerializer.
|
||||||
@@ -77,16 +79,16 @@ class JacksonEventSerializer : EventSerializer {
|
|||||||
logger.debug("Registered event type: {} for class: {}", eventType, eventClass.name)
|
logger.debug("Registered event type: {} for class: {}", eventType, eventClass.name)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getAggregateId(data: Map<String, String>): UUID {
|
override fun getAggregateId(data: Map<String, String>): Uuid {
|
||||||
val aggregateIdStr = data[AGGREGATE_ID_FIELD]
|
val aggregateIdStr = data[AGGREGATE_ID_FIELD]
|
||||||
?: throw IllegalArgumentException("Aggregate ID is missing")
|
?: throw IllegalArgumentException("Aggregate ID is missing")
|
||||||
return UUID.fromString(aggregateIdStr)
|
return Uuid.parse(aggregateIdStr)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getEventId(data: Map<String, String>): UUID {
|
override fun getEventId(data: Map<String, String>): Uuid {
|
||||||
val eventIdStr = data[EVENT_ID_FIELD]
|
val eventIdStr = data[EVENT_ID_FIELD]
|
||||||
?: throw IllegalArgumentException("Event ID is missing")
|
?: throw IllegalArgumentException("Event ID is missing")
|
||||||
return UUID.fromString(eventIdStr)
|
return Uuid.parse(eventIdStr)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getVersion(data: Map<String, String>): Long {
|
override fun getVersion(data: Map<String, String>): Long {
|
||||||
|
|||||||
+13
-11
@@ -1,3 +1,5 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
|
|
||||||
package at.mocode.infrastructure.eventstore.redis
|
package at.mocode.infrastructure.eventstore.redis
|
||||||
|
|
||||||
import at.mocode.core.domain.event.DomainEvent
|
import at.mocode.core.domain.event.DomainEvent
|
||||||
@@ -11,8 +13,8 @@ import org.springframework.dao.DataAccessException
|
|||||||
import org.springframework.data.domain.Range
|
import org.springframework.data.domain.Range
|
||||||
import org.springframework.data.redis.core.SessionCallback
|
import org.springframework.data.redis.core.SessionCallback
|
||||||
import org.springframework.data.redis.core.StringRedisTemplate
|
import org.springframework.data.redis.core.StringRedisTemplate
|
||||||
import java.util.*
|
|
||||||
import java.util.concurrent.ConcurrentHashMap
|
import java.util.concurrent.ConcurrentHashMap
|
||||||
|
import kotlin.uuid.Uuid
|
||||||
|
|
||||||
class RedisEventStore(
|
class RedisEventStore(
|
||||||
private val redisTemplate: StringRedisTemplate,
|
private val redisTemplate: StringRedisTemplate,
|
||||||
@@ -20,10 +22,10 @@ class RedisEventStore(
|
|||||||
private val properties: RedisEventStoreProperties
|
private val properties: RedisEventStoreProperties
|
||||||
) : EventStore {
|
) : EventStore {
|
||||||
private val logger = LoggerFactory.getLogger(RedisEventStore::class.java)
|
private val logger = LoggerFactory.getLogger(RedisEventStore::class.java)
|
||||||
private val streamVersionCache = ConcurrentHashMap<UUID, Long>()
|
private val streamVersionCache = ConcurrentHashMap<Uuid, Long>()
|
||||||
private val metrics = EventStoreMetrics()
|
private val metrics = EventStoreMetrics()
|
||||||
|
|
||||||
override fun appendToStream(events: List<DomainEvent>, streamId: UUID, expectedVersion: Long): Long {
|
override fun appendToStream(events: List<DomainEvent>, streamId: Uuid, expectedVersion: Long): Long {
|
||||||
val operationId = "batch-append-${System.nanoTime()}"
|
val operationId = "batch-append-${System.nanoTime()}"
|
||||||
metrics.startOperation(operationId)
|
metrics.startOperation(operationId)
|
||||||
|
|
||||||
@@ -62,7 +64,7 @@ class RedisEventStore(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun appendToStream(event: DomainEvent, streamId: UUID, expectedVersion: Long): Long {
|
override fun appendToStream(event: DomainEvent, streamId: Uuid, expectedVersion: Long): Long {
|
||||||
val operationId = "single-append-${System.nanoTime()}"
|
val operationId = "single-append-${System.nanoTime()}"
|
||||||
metrics.startOperation(operationId)
|
metrics.startOperation(operationId)
|
||||||
|
|
||||||
@@ -88,7 +90,7 @@ class RedisEventStore(
|
|||||||
/**
|
/**
|
||||||
* Validiert die erwartete Version und gibt die aktuelle Version zurück, behandelt Cache-Invalidierung bei Konflikten.
|
* Validiert die erwartete Version und gibt die aktuelle Version zurück, behandelt Cache-Invalidierung bei Konflikten.
|
||||||
*/
|
*/
|
||||||
private fun validateAndGetCurrentVersion(streamId: UUID, expectedVersion: Long): Long {
|
private fun validateAndGetCurrentVersion(streamId: Uuid, expectedVersion: Long): Long {
|
||||||
var currentVersion = getStreamVersion(streamId)
|
var currentVersion = getStreamVersion(streamId)
|
||||||
|
|
||||||
if (currentVersion != expectedVersion) {
|
if (currentVersion != expectedVersion) {
|
||||||
@@ -107,7 +109,7 @@ class RedisEventStore(
|
|||||||
/**
|
/**
|
||||||
* Fügt mehrere Events in einer einzigen Redis-Transaktion hinzu für optimale Performance.
|
* Fügt mehrere Events in einer einzigen Redis-Transaktion hinzu für optimale Performance.
|
||||||
*/
|
*/
|
||||||
private fun appendEventsInBatch(events: List<DomainEvent>, streamId: UUID, currentVersion: Long): Long {
|
private fun appendEventsInBatch(events: List<DomainEvent>, streamId: Uuid, currentVersion: Long): Long {
|
||||||
val streamKey = getStreamKey(streamId)
|
val streamKey = getStreamKey(streamId)
|
||||||
val allEventsStreamKey = getAllEventsStreamKey()
|
val allEventsStreamKey = getAllEventsStreamKey()
|
||||||
|
|
||||||
@@ -152,7 +154,7 @@ class RedisEventStore(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun appendToStreamInternal(event: DomainEvent, streamId: UUID, currentVersion: Long): Long {
|
private fun appendToStreamInternal(event: DomainEvent, streamId: Uuid, currentVersion: Long): Long {
|
||||||
val newVersion = currentVersion + 1
|
val newVersion = currentVersion + 1
|
||||||
require(event.version.value == newVersion) {
|
require(event.version.value == newVersion) {
|
||||||
"Event version ${event.version.value} does not match expected new version $newVersion for stream $streamId"
|
"Event version ${event.version.value} does not match expected new version $newVersion for stream $streamId"
|
||||||
@@ -188,7 +190,7 @@ class RedisEventStore(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun readFromStream(streamId: UUID, fromVersion: Long, toVersion: Long?): List<DomainEvent> {
|
override fun readFromStream(streamId: Uuid, fromVersion: Long, toVersion: Long?): List<DomainEvent> {
|
||||||
val operationId = "read-stream-${System.nanoTime()}"
|
val operationId = "read-stream-${System.nanoTime()}"
|
||||||
metrics.startOperation(operationId)
|
metrics.startOperation(operationId)
|
||||||
|
|
||||||
@@ -217,7 +219,7 @@ class RedisEventStore(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getStreamVersion(streamId: UUID): Long {
|
override fun getStreamVersion(streamId: Uuid): Long {
|
||||||
streamVersionCache[streamId]?.let {
|
streamVersionCache[streamId]?.let {
|
||||||
metrics.recordCacheHit()
|
metrics.recordCacheHit()
|
||||||
return it
|
return it
|
||||||
@@ -230,7 +232,7 @@ class RedisEventStore(
|
|||||||
return size
|
return size
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getStreamKey(streamId: UUID): String {
|
private fun getStreamKey(streamId: Uuid): String {
|
||||||
return "${properties.streamPrefix}$streamId"
|
return "${properties.streamPrefix}$streamId"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -272,7 +274,7 @@ class RedisEventStore(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun subscribeToStream(streamId: UUID, fromVersion: Long, handler: (DomainEvent) -> Unit): Subscription {
|
override fun subscribeToStream(streamId: Uuid, fromVersion: Long, handler: (DomainEvent) -> Unit): Subscription {
|
||||||
// Basic implementation - for full functionality, integrate with RedisEventConsumer
|
// Basic implementation - for full functionality, integrate with RedisEventConsumer
|
||||||
logger.info("Stream subscription for streamId {} from version {} - basic implementation", streamId, fromVersion)
|
logger.info("Stream subscription for streamId {} from version {} - basic implementation", streamId, fromVersion)
|
||||||
metrics.recordSubscription()
|
metrics.recordSubscription()
|
||||||
|
|||||||
+5
-2
@@ -10,6 +10,8 @@ import org.junit.jupiter.api.assertThrows
|
|||||||
import java.util.*
|
import java.util.*
|
||||||
import kotlin.time.Clock
|
import kotlin.time.Clock
|
||||||
import kotlin.time.Instant
|
import kotlin.time.Instant
|
||||||
|
import kotlin.uuid.ExperimentalUuidApi
|
||||||
|
import kotlin.uuid.Uuid
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests for JacksonEventSerializer - Critical for data integrity.
|
* Tests for JacksonEventSerializer - Critical for data integrity.
|
||||||
@@ -26,10 +28,11 @@ class JacksonEventSerializerTest {
|
|||||||
serializer.registerEventType(SimpleTestEvent::class.java, "SimpleTestEvent")
|
serializer.registerEventType(SimpleTestEvent::class.java, "SimpleTestEvent")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalUuidApi::class)
|
||||||
@Test
|
@Test
|
||||||
fun `should serialize and deserialize simple event correctly`() {
|
fun `should serialize and deserialize simple event correctly`() {
|
||||||
val aggregateId = UUID.randomUUID()
|
val aggregateId: Uuid = UUID.randomUUID()
|
||||||
val eventId = UUID.randomUUID()
|
val eventId: UUID? = UUID.randomUUID()
|
||||||
val timestamp = Clock.System.now()
|
val timestamp = Clock.System.now()
|
||||||
|
|
||||||
val event = SimpleTestEvent(
|
val event = SimpleTestEvent(
|
||||||
|
|||||||
+5
-4
@@ -1,3 +1,4 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.infrastructure.eventstore.redis
|
package at.mocode.infrastructure.eventstore.redis
|
||||||
|
|
||||||
import at.mocode.core.domain.event.BaseDomainEvent
|
import at.mocode.core.domain.event.BaseDomainEvent
|
||||||
@@ -5,7 +6,6 @@ import at.mocode.core.domain.event.DomainEvent
|
|||||||
import at.mocode.core.domain.model.*
|
import at.mocode.core.domain.model.*
|
||||||
import at.mocode.infrastructure.eventstore.api.EventSerializer
|
import at.mocode.infrastructure.eventstore.api.EventSerializer
|
||||||
import at.mocode.infrastructure.eventstore.api.EventStore
|
import at.mocode.infrastructure.eventstore.api.EventStore
|
||||||
import com.benasher44.uuid.uuid4
|
|
||||||
import org.junit.jupiter.api.AfterEach
|
import org.junit.jupiter.api.AfterEach
|
||||||
import org.junit.jupiter.api.Assertions.assertEquals
|
import org.junit.jupiter.api.Assertions.assertEquals
|
||||||
import org.junit.jupiter.api.Assertions.assertTrue
|
import org.junit.jupiter.api.Assertions.assertTrue
|
||||||
@@ -22,6 +22,7 @@ import java.util.concurrent.CountDownLatch
|
|||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
import kotlin.time.Clock
|
import kotlin.time.Clock
|
||||||
import kotlin.time.Instant
|
import kotlin.time.Instant
|
||||||
|
import kotlin.uuid.Uuid
|
||||||
|
|
||||||
@Testcontainers
|
@Testcontainers
|
||||||
class RedisEventStoreIntegrationTest {
|
class RedisEventStoreIntegrationTest {
|
||||||
@@ -84,7 +85,7 @@ class RedisEventStoreIntegrationTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `event publishing and consuming with consumer groups should work`() {
|
fun `event publishing and consuming with consumer groups should work`() {
|
||||||
val aggregateId = uuid4()
|
val aggregateId = Uuid.random()
|
||||||
val event1 = TestCreatedEvent(aggregateId = AggregateId(aggregateId), version = EventVersion(1L), name = "Test Entity")
|
val event1 = TestCreatedEvent(aggregateId = AggregateId(aggregateId), version = EventVersion(1L), name = "Test Entity")
|
||||||
val event2 = TestUpdatedEvent(aggregateId = AggregateId(aggregateId), version = EventVersion(2L), name = "Updated Test Entity")
|
val event2 = TestUpdatedEvent(aggregateId = AggregateId(aggregateId), version = EventVersion(2L), name = "Updated Test Entity")
|
||||||
|
|
||||||
@@ -126,7 +127,7 @@ class RedisEventStoreIntegrationTest {
|
|||||||
override val version: EventVersion,
|
override val version: EventVersion,
|
||||||
val name: String,
|
val name: String,
|
||||||
override val eventType: EventType = EventType("TestCreated"),
|
override val eventType: EventType = EventType("TestCreated"),
|
||||||
override val eventId: EventId = EventId(uuid4()),
|
override val eventId: EventId = EventId(Uuid.random()),
|
||||||
override val timestamp: Instant = Clock.System.now(),
|
override val timestamp: Instant = Clock.System.now(),
|
||||||
override val correlationId: CorrelationId? = null,
|
override val correlationId: CorrelationId? = null,
|
||||||
override val causationId: CausationId? = null
|
override val causationId: CausationId? = null
|
||||||
@@ -137,7 +138,7 @@ class RedisEventStoreIntegrationTest {
|
|||||||
override val version: EventVersion,
|
override val version: EventVersion,
|
||||||
val name: String,
|
val name: String,
|
||||||
override val eventType: EventType = EventType("TestUpdated"),
|
override val eventType: EventType = EventType("TestUpdated"),
|
||||||
override val eventId: EventId = EventId(uuid4()),
|
override val eventId: EventId = EventId(Uuid.random()),
|
||||||
override val timestamp: Instant = Clock.System.now(),
|
override val timestamp: Instant = Clock.System.now(),
|
||||||
override val correlationId: CorrelationId? = null,
|
override val correlationId: CorrelationId? = null,
|
||||||
override val causationId: CausationId? = null
|
override val causationId: CausationId? = null
|
||||||
|
|||||||
+5
-4
@@ -1,3 +1,4 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.infrastructure.eventstore.redis
|
package at.mocode.infrastructure.eventstore.redis
|
||||||
|
|
||||||
import at.mocode.core.domain.event.BaseDomainEvent
|
import at.mocode.core.domain.event.BaseDomainEvent
|
||||||
@@ -7,7 +8,6 @@ import at.mocode.core.domain.model.EventType
|
|||||||
import at.mocode.core.domain.model.EventVersion
|
import at.mocode.core.domain.model.EventVersion
|
||||||
import at.mocode.infrastructure.eventstore.api.EventSerializer
|
import at.mocode.infrastructure.eventstore.api.EventSerializer
|
||||||
import at.mocode.infrastructure.eventstore.api.EventStore
|
import at.mocode.infrastructure.eventstore.api.EventStore
|
||||||
import com.benasher44.uuid.uuid4
|
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import kotlinx.serialization.Transient
|
import kotlinx.serialization.Transient
|
||||||
import org.junit.jupiter.api.AfterEach
|
import org.junit.jupiter.api.AfterEach
|
||||||
@@ -21,6 +21,7 @@ import org.testcontainers.containers.GenericContainer
|
|||||||
import org.testcontainers.junit.jupiter.Container
|
import org.testcontainers.junit.jupiter.Container
|
||||||
import org.testcontainers.junit.jupiter.Testcontainers
|
import org.testcontainers.junit.jupiter.Testcontainers
|
||||||
import org.testcontainers.utility.DockerImageName
|
import org.testcontainers.utility.DockerImageName
|
||||||
|
import kotlin.uuid.Uuid
|
||||||
|
|
||||||
@Testcontainers
|
@Testcontainers
|
||||||
class RedisIntegrationTest {
|
class RedisIntegrationTest {
|
||||||
@@ -79,7 +80,7 @@ class RedisIntegrationTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `event publishing and consuming should be fast and reliable`() {
|
fun `event publishing and consuming should be fast and reliable`() {
|
||||||
val aggregateId = uuid4()
|
val aggregateId = Uuid.random()
|
||||||
val event1 = TestCreatedEvent(AggregateId(aggregateId), EventVersion(1L), "Test Entity")
|
val event1 = TestCreatedEvent(AggregateId(aggregateId), EventVersion(1L), "Test Entity")
|
||||||
val event2 = TestUpdatedEvent(AggregateId(aggregateId), EventVersion(2L), "Updated Test Entity")
|
val event2 = TestUpdatedEvent(AggregateId(aggregateId), EventVersion(2L), "Updated Test Entity")
|
||||||
|
|
||||||
@@ -104,14 +105,14 @@ class RedisIntegrationTest {
|
|||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
data class TestCreatedEvent(
|
data class TestCreatedEvent(
|
||||||
@Transient override val aggregateId: AggregateId = AggregateId(uuid4()),
|
@Transient override val aggregateId: AggregateId = AggregateId(Uuid.random()),
|
||||||
@Transient override val version: EventVersion = EventVersion(0),
|
@Transient override val version: EventVersion = EventVersion(0),
|
||||||
val name: String
|
val name: String
|
||||||
) : BaseDomainEvent(aggregateId, EventType("TestCreated"), version)
|
) : BaseDomainEvent(aggregateId, EventType("TestCreated"), version)
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
data class TestUpdatedEvent(
|
data class TestUpdatedEvent(
|
||||||
@Transient override val aggregateId: AggregateId = AggregateId(uuid4()),
|
@Transient override val aggregateId: AggregateId = AggregateId(Uuid.random()),
|
||||||
@Transient override val version: EventVersion = EventVersion(0),
|
@Transient override val version: EventVersion = EventVersion(0),
|
||||||
val name: String
|
val name: String
|
||||||
) : BaseDomainEvent(aggregateId, EventType("TestUpdated"), version)
|
) : BaseDomainEvent(aggregateId, EventType("TestUpdated"), version)
|
||||||
|
|||||||
+4
-2
@@ -1,3 +1,5 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
|
|
||||||
package at.mocode.infrastructure.gateway.config
|
package at.mocode.infrastructure.gateway.config
|
||||||
|
|
||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
@@ -10,8 +12,8 @@ import org.springframework.http.server.reactive.ServerHttpResponse
|
|||||||
import org.springframework.stereotype.Component
|
import org.springframework.stereotype.Component
|
||||||
import org.springframework.web.server.ServerWebExchange
|
import org.springframework.web.server.ServerWebExchange
|
||||||
import reactor.core.publisher.Mono
|
import reactor.core.publisher.Mono
|
||||||
import java.util.*
|
|
||||||
import java.util.concurrent.ConcurrentHashMap
|
import java.util.concurrent.ConcurrentHashMap
|
||||||
|
import kotlin.uuid.Uuid
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gateway-Konfiguration für erweiterte Funktionalitäten wie Logging, Rate Limiting und Security.
|
* Gateway-Konfiguration für erweiterte Funktionalitäten wie Logging, Rate Limiting und Security.
|
||||||
@@ -30,7 +32,7 @@ class CorrelationIdFilter : GlobalFilter, Ordered {
|
|||||||
override fun filter(exchange: ServerWebExchange, chain: GatewayFilterChain): Mono<Void> {
|
override fun filter(exchange: ServerWebExchange, chain: GatewayFilterChain): Mono<Void> {
|
||||||
val request = exchange.request
|
val request = exchange.request
|
||||||
val correlationId = request.headers.getFirst(CORRELATION_ID_HEADER)
|
val correlationId = request.headers.getFirst(CORRELATION_ID_HEADER)
|
||||||
?: UUID.randomUUID().toString()
|
?: Uuid.random().toString()
|
||||||
|
|
||||||
val mutatedRequest = request.mutate()
|
val mutatedRequest = request.mutate()
|
||||||
.header(CORRELATION_ID_HEADER, correlationId)
|
.header(CORRELATION_ID_HEADER, correlationId)
|
||||||
|
|||||||
+1
-1
@@ -11,7 +11,7 @@ import org.springframework.context.ApplicationContext
|
|||||||
* erfolgreich geladen werden kann.
|
* erfolgreich geladen werden kann.
|
||||||
*
|
*
|
||||||
* Mit der Armeria Auto-Configuration Ausschluss-Konfiguration sollte der Context erfolgreich laden.
|
* Mit der Armeria Auto-Configuration Ausschluss-Konfiguration sollte der Context erfolgreich laden.
|
||||||
* Verwendet RANDOM_PORT um Konflikte mit bootRun-Tasks zu vermeiden.
|
* Verwendet RANDOM_PORT, um Konflikte mit bootRun-Tasks zu vermeiden.
|
||||||
*/
|
*/
|
||||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
||||||
class MonitoringServerApplicationTest {
|
class MonitoringServerApplicationTest {
|
||||||
|
|||||||
+2
-1
@@ -1,9 +1,10 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.horses.application.usecase
|
package at.mocode.horses.application.usecase
|
||||||
|
|
||||||
import at.mocode.horses.domain.model.DomPferd
|
import at.mocode.horses.domain.model.DomPferd
|
||||||
import at.mocode.horses.domain.repository.HorseRepository
|
import at.mocode.horses.domain.repository.HorseRepository
|
||||||
import at.mocode.core.domain.model.PferdeGeschlechtE
|
import at.mocode.core.domain.model.PferdeGeschlechtE
|
||||||
import com.benasher44.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
import kotlinx.datetime.todayIn
|
import kotlinx.datetime.todayIn
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+2
-1
@@ -1,3 +1,4 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.horses.application.usecase
|
package at.mocode.horses.application.usecase
|
||||||
|
|
||||||
import at.mocode.horses.domain.model.DomPferd
|
import at.mocode.horses.domain.model.DomPferd
|
||||||
@@ -9,7 +10,7 @@ import at.mocode.core.domain.model.ErrorDto
|
|||||||
import at.mocode.core.domain.model.ValidationResult
|
import at.mocode.core.domain.model.ValidationResult
|
||||||
import at.mocode.core.domain.model.ValidationError
|
import at.mocode.core.domain.model.ValidationError
|
||||||
import at.mocode.core.utils.database.DatabaseFactory
|
import at.mocode.core.utils.database.DatabaseFactory
|
||||||
import com.benasher44.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
import kotlinx.datetime.LocalDate
|
import kotlinx.datetime.LocalDate
|
||||||
import kotlinx.datetime.todayIn
|
import kotlinx.datetime.todayIn
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -1,10 +1,11 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.horses.application.usecase
|
package at.mocode.horses.application.usecase
|
||||||
|
|
||||||
import at.mocode.horses.domain.model.DomPferd
|
import at.mocode.horses.domain.model.DomPferd
|
||||||
import at.mocode.horses.domain.repository.HorseRepository
|
import at.mocode.horses.domain.repository.HorseRepository
|
||||||
import at.mocode.core.domain.model.PferdeGeschlechtE
|
import at.mocode.core.domain.model.PferdeGeschlechtE
|
||||||
import at.mocode.core.domain.model.DatenQuelleE
|
import at.mocode.core.domain.model.DatenQuelleE
|
||||||
import com.benasher44.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
import kotlinx.datetime.LocalDate
|
import kotlinx.datetime.LocalDate
|
||||||
import kotlinx.datetime.todayIn
|
import kotlinx.datetime.todayIn
|
||||||
|
|
||||||
|
|||||||
+5
-4
@@ -1,9 +1,10 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.horses.service.integration
|
package at.mocode.horses.service.integration
|
||||||
|
|
||||||
import at.mocode.horses.application.usecase.TransactionalCreateHorseUseCase
|
import at.mocode.horses.application.usecase.TransactionalCreateHorseUseCase
|
||||||
import at.mocode.horses.domain.repository.HorseRepository
|
import at.mocode.horses.domain.repository.HorseRepository
|
||||||
import at.mocode.core.domain.model.PferdeGeschlechtE
|
import at.mocode.core.domain.model.PferdeGeschlechtE
|
||||||
import com.benasher44.uuid.uuid4
|
import kotlin.uuid.Uuid
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import kotlinx.datetime.LocalDate
|
import kotlinx.datetime.LocalDate
|
||||||
import org.junit.jupiter.api.Test
|
import org.junit.jupiter.api.Test
|
||||||
@@ -54,7 +55,7 @@ class TransactionalContextTest {
|
|||||||
val chipNummer = "TRANS-CHIP-001"
|
val chipNummer = "TRANS-CHIP-001"
|
||||||
|
|
||||||
// Create two identical horse creation requests
|
// Create two identical horse creation requests
|
||||||
val ownerId = uuid4()
|
val ownerId = Uuid.random()
|
||||||
val request1 = TransactionalCreateHorseUseCase.CreateHorseRequest(
|
val request1 = TransactionalCreateHorseUseCase.CreateHorseRequest(
|
||||||
pferdeName = "Transactional Race Horse 1",
|
pferdeName = "Transactional Race Horse 1",
|
||||||
geschlecht = PferdeGeschlechtE.WALLACH,
|
geschlecht = PferdeGeschlechtE.WALLACH,
|
||||||
@@ -131,7 +132,7 @@ class TransactionalContextTest {
|
|||||||
geschlecht = PferdeGeschlechtE.HENGST,
|
geschlecht = PferdeGeschlechtE.HENGST,
|
||||||
lebensnummer = "VALIDATION-TEST-001",
|
lebensnummer = "VALIDATION-TEST-001",
|
||||||
stockmass = 300, // Invalid height should fail validation
|
stockmass = 300, // Invalid height should fail validation
|
||||||
besitzerId = uuid4() // Add owner to pass basic validation
|
besitzerId = Uuid.random() // Add owner to pass basic validation
|
||||||
)
|
)
|
||||||
|
|
||||||
println("[DEBUG_LOG] Executing transactional create with invalid data")
|
println("[DEBUG_LOG] Executing transactional create with invalid data")
|
||||||
@@ -162,7 +163,7 @@ class TransactionalContextTest {
|
|||||||
chipNummer = "SUCCESS-CHIP-001",
|
chipNummer = "SUCCESS-CHIP-001",
|
||||||
rasse = "Warmblut",
|
rasse = "Warmblut",
|
||||||
stockmass = 165,
|
stockmass = 165,
|
||||||
besitzerId = uuid4() // Add required owner
|
besitzerId = Uuid.random() // Add required owner
|
||||||
)
|
)
|
||||||
|
|
||||||
println("[DEBUG_LOG] Executing transactional create with valid data")
|
println("[DEBUG_LOG] Executing transactional create with valid data")
|
||||||
|
|||||||
+2
-1
@@ -1,3 +1,4 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.masterdata.application.usecase
|
package at.mocode.masterdata.application.usecase
|
||||||
|
|
||||||
import at.mocode.core.domain.model.SparteE
|
import at.mocode.core.domain.model.SparteE
|
||||||
@@ -5,7 +6,7 @@ import at.mocode.masterdata.domain.model.AltersklasseDefinition
|
|||||||
import at.mocode.masterdata.domain.repository.AltersklasseRepository
|
import at.mocode.masterdata.domain.repository.AltersklasseRepository
|
||||||
import at.mocode.core.domain.model.ValidationResult
|
import at.mocode.core.domain.model.ValidationResult
|
||||||
import at.mocode.core.domain.model.ValidationError
|
import at.mocode.core.domain.model.ValidationError
|
||||||
import com.benasher44.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
import kotlinx.datetime.Clock
|
import kotlinx.datetime.Clock
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+2
-1
@@ -1,10 +1,11 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.masterdata.application.usecase
|
package at.mocode.masterdata.application.usecase
|
||||||
|
|
||||||
import at.mocode.masterdata.domain.model.BundeslandDefinition
|
import at.mocode.masterdata.domain.model.BundeslandDefinition
|
||||||
import at.mocode.masterdata.domain.repository.BundeslandRepository
|
import at.mocode.masterdata.domain.repository.BundeslandRepository
|
||||||
import at.mocode.core.domain.model.ValidationResult
|
import at.mocode.core.domain.model.ValidationResult
|
||||||
import at.mocode.core.domain.model.ValidationError
|
import at.mocode.core.domain.model.ValidationError
|
||||||
import com.benasher44.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
import kotlinx.datetime.Clock
|
import kotlinx.datetime.Clock
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+2
-1
@@ -1,10 +1,11 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.masterdata.application.usecase
|
package at.mocode.masterdata.application.usecase
|
||||||
|
|
||||||
import at.mocode.masterdata.domain.model.LandDefinition
|
import at.mocode.masterdata.domain.model.LandDefinition
|
||||||
import at.mocode.masterdata.domain.repository.LandRepository
|
import at.mocode.masterdata.domain.repository.LandRepository
|
||||||
import at.mocode.core.domain.model.ValidationResult
|
import at.mocode.core.domain.model.ValidationResult
|
||||||
import at.mocode.core.domain.model.ValidationError
|
import at.mocode.core.domain.model.ValidationError
|
||||||
import com.benasher44.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
import kotlinx.datetime.Clock
|
import kotlinx.datetime.Clock
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+2
-1
@@ -1,3 +1,4 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.masterdata.application.usecase
|
package at.mocode.masterdata.application.usecase
|
||||||
|
|
||||||
import at.mocode.core.domain.model.PlatzTypE
|
import at.mocode.core.domain.model.PlatzTypE
|
||||||
@@ -5,7 +6,7 @@ import at.mocode.masterdata.domain.model.Platz
|
|||||||
import at.mocode.masterdata.domain.repository.PlatzRepository
|
import at.mocode.masterdata.domain.repository.PlatzRepository
|
||||||
import at.mocode.core.domain.model.ValidationResult
|
import at.mocode.core.domain.model.ValidationResult
|
||||||
import at.mocode.core.domain.model.ValidationError
|
import at.mocode.core.domain.model.ValidationError
|
||||||
import com.benasher44.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
import kotlinx.datetime.Clock
|
import kotlinx.datetime.Clock
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+2
-1
@@ -1,9 +1,10 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.masterdata.application.usecase
|
package at.mocode.masterdata.application.usecase
|
||||||
|
|
||||||
import at.mocode.core.domain.model.SparteE
|
import at.mocode.core.domain.model.SparteE
|
||||||
import at.mocode.masterdata.domain.model.AltersklasseDefinition
|
import at.mocode.masterdata.domain.model.AltersklasseDefinition
|
||||||
import at.mocode.masterdata.domain.repository.AltersklasseRepository
|
import at.mocode.masterdata.domain.repository.AltersklasseRepository
|
||||||
import com.benasher44.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Use case for retrieving age class information.
|
* Use case for retrieving age class information.
|
||||||
|
|||||||
+2
-1
@@ -1,8 +1,9 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.masterdata.application.usecase
|
package at.mocode.masterdata.application.usecase
|
||||||
|
|
||||||
import at.mocode.masterdata.domain.model.BundeslandDefinition
|
import at.mocode.masterdata.domain.model.BundeslandDefinition
|
||||||
import at.mocode.masterdata.domain.repository.BundeslandRepository
|
import at.mocode.masterdata.domain.repository.BundeslandRepository
|
||||||
import com.benasher44.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Use case for retrieving federal state information.
|
* Use case for retrieving federal state information.
|
||||||
|
|||||||
+2
-1
@@ -1,8 +1,9 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.masterdata.application.usecase
|
package at.mocode.masterdata.application.usecase
|
||||||
|
|
||||||
import at.mocode.masterdata.domain.model.LandDefinition
|
import at.mocode.masterdata.domain.model.LandDefinition
|
||||||
import at.mocode.masterdata.domain.repository.LandRepository
|
import at.mocode.masterdata.domain.repository.LandRepository
|
||||||
import com.benasher44.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Use case for retrieving country information.
|
* Use case for retrieving country information.
|
||||||
|
|||||||
+2
-1
@@ -1,9 +1,10 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.masterdata.application.usecase
|
package at.mocode.masterdata.application.usecase
|
||||||
|
|
||||||
import at.mocode.core.domain.model.PlatzTypE
|
import at.mocode.core.domain.model.PlatzTypE
|
||||||
import at.mocode.masterdata.domain.model.Platz
|
import at.mocode.masterdata.domain.model.Platz
|
||||||
import at.mocode.masterdata.domain.repository.PlatzRepository
|
import at.mocode.masterdata.domain.repository.PlatzRepository
|
||||||
import com.benasher44.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Use case for retrieving venue/arena information.
|
* Use case for retrieving venue/arena information.
|
||||||
|
|||||||
+2
-1
@@ -1,8 +1,9 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.masterdata.domain.repository
|
package at.mocode.masterdata.domain.repository
|
||||||
|
|
||||||
import at.mocode.core.domain.model.SparteE
|
import at.mocode.core.domain.model.SparteE
|
||||||
import at.mocode.masterdata.domain.model.AltersklasseDefinition
|
import at.mocode.masterdata.domain.model.AltersklasseDefinition
|
||||||
import com.benasher44.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Repository interface for AltersklasseDefinition (Age Class) domain operations.
|
* Repository interface for AltersklasseDefinition (Age Class) domain operations.
|
||||||
|
|||||||
+2
-1
@@ -1,7 +1,8 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.masterdata.domain.repository
|
package at.mocode.masterdata.domain.repository
|
||||||
|
|
||||||
import at.mocode.masterdata.domain.model.BundeslandDefinition
|
import at.mocode.masterdata.domain.model.BundeslandDefinition
|
||||||
import com.benasher44.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Repository interface for BundeslandDefinition (Federal State) domain operations.
|
* Repository interface for BundeslandDefinition (Federal State) domain operations.
|
||||||
|
|||||||
+2
-1
@@ -1,7 +1,8 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.masterdata.domain.repository
|
package at.mocode.masterdata.domain.repository
|
||||||
|
|
||||||
import at.mocode.masterdata.domain.model.LandDefinition
|
import at.mocode.masterdata.domain.model.LandDefinition
|
||||||
import com.benasher44.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Repository interface for LandDefinition (Country) domain operations.
|
* Repository interface for LandDefinition (Country) domain operations.
|
||||||
|
|||||||
+2
-1
@@ -1,8 +1,9 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.masterdata.domain.repository
|
package at.mocode.masterdata.domain.repository
|
||||||
|
|
||||||
import at.mocode.core.domain.model.PlatzTypE
|
import at.mocode.core.domain.model.PlatzTypE
|
||||||
import at.mocode.masterdata.domain.model.Platz
|
import at.mocode.masterdata.domain.model.Platz
|
||||||
import com.benasher44.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Repository interface for Platz (Venue/Arena) domain operations.
|
* Repository interface for Platz (Venue/Arena) domain operations.
|
||||||
|
|||||||
+2
-1
@@ -1,10 +1,11 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.masterdata.infrastructure.persistence
|
package at.mocode.masterdata.infrastructure.persistence
|
||||||
|
|
||||||
import at.mocode.core.domain.model.SparteE
|
import at.mocode.core.domain.model.SparteE
|
||||||
import at.mocode.masterdata.domain.model.AltersklasseDefinition
|
import at.mocode.masterdata.domain.model.AltersklasseDefinition
|
||||||
import at.mocode.masterdata.domain.repository.AltersklasseRepository
|
import at.mocode.masterdata.domain.repository.AltersklasseRepository
|
||||||
import at.mocode.core.utils.database.DatabaseFactory
|
import at.mocode.core.utils.database.DatabaseFactory
|
||||||
import com.benasher44.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
import kotlinx.datetime.Clock
|
import kotlinx.datetime.Clock
|
||||||
import kotlinx.datetime.TimeZone
|
import kotlinx.datetime.TimeZone
|
||||||
import kotlinx.datetime.toInstant
|
import kotlinx.datetime.toInstant
|
||||||
|
|||||||
+2
-1
@@ -1,9 +1,10 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.masterdata.infrastructure.persistence
|
package at.mocode.masterdata.infrastructure.persistence
|
||||||
|
|
||||||
import at.mocode.masterdata.domain.model.BundeslandDefinition
|
import at.mocode.masterdata.domain.model.BundeslandDefinition
|
||||||
import at.mocode.masterdata.domain.repository.BundeslandRepository
|
import at.mocode.masterdata.domain.repository.BundeslandRepository
|
||||||
import at.mocode.core.utils.database.DatabaseFactory
|
import at.mocode.core.utils.database.DatabaseFactory
|
||||||
import com.benasher44.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
import kotlinx.datetime.Clock
|
import kotlinx.datetime.Clock
|
||||||
import kotlinx.datetime.TimeZone
|
import kotlinx.datetime.TimeZone
|
||||||
import kotlinx.datetime.toInstant
|
import kotlinx.datetime.toInstant
|
||||||
|
|||||||
+2
-1
@@ -1,9 +1,10 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.masterdata.infrastructure.persistence
|
package at.mocode.masterdata.infrastructure.persistence
|
||||||
|
|
||||||
import at.mocode.core.utils.database.DatabaseFactory
|
import at.mocode.core.utils.database.DatabaseFactory
|
||||||
import at.mocode.masterdata.domain.model.LandDefinition
|
import at.mocode.masterdata.domain.model.LandDefinition
|
||||||
import at.mocode.masterdata.domain.repository.LandRepository
|
import at.mocode.masterdata.domain.repository.LandRepository
|
||||||
import com.benasher44.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
import kotlinx.datetime.Clock
|
import kotlinx.datetime.Clock
|
||||||
import kotlinx.datetime.TimeZone
|
import kotlinx.datetime.TimeZone
|
||||||
import kotlinx.datetime.toInstant
|
import kotlinx.datetime.toInstant
|
||||||
|
|||||||
+2
-1
@@ -1,10 +1,11 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.masterdata.infrastructure.persistence
|
package at.mocode.masterdata.infrastructure.persistence
|
||||||
|
|
||||||
import at.mocode.core.domain.model.PlatzTypE
|
import at.mocode.core.domain.model.PlatzTypE
|
||||||
import at.mocode.masterdata.domain.model.Platz
|
import at.mocode.masterdata.domain.model.Platz
|
||||||
import at.mocode.masterdata.domain.repository.PlatzRepository
|
import at.mocode.masterdata.domain.repository.PlatzRepository
|
||||||
import at.mocode.core.utils.database.DatabaseFactory
|
import at.mocode.core.utils.database.DatabaseFactory
|
||||||
import com.benasher44.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
import kotlinx.datetime.Clock
|
import kotlinx.datetime.Clock
|
||||||
import kotlinx.datetime.TimeZone
|
import kotlinx.datetime.TimeZone
|
||||||
import kotlinx.datetime.toInstant
|
import kotlinx.datetime.toInstant
|
||||||
|
|||||||
+3
-2
@@ -1,3 +1,4 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.members.application.usecase
|
package at.mocode.members.application.usecase
|
||||||
|
|
||||||
import at.mocode.core.domain.model.ApiResponse
|
import at.mocode.core.domain.model.ApiResponse
|
||||||
@@ -8,7 +9,7 @@ import at.mocode.members.domain.events.MemberCreatedEvent
|
|||||||
import at.mocode.infrastructure.messaging.client.EventPublisher
|
import at.mocode.infrastructure.messaging.client.EventPublisher
|
||||||
import at.mocode.core.domain.model.ValidationResult
|
import at.mocode.core.domain.model.ValidationResult
|
||||||
import at.mocode.core.domain.model.ValidationError
|
import at.mocode.core.domain.model.ValidationError
|
||||||
import com.benasher44.uuid.uuid4
|
import kotlin.uuid.Uuid
|
||||||
import kotlinx.datetime.Clock
|
import kotlinx.datetime.Clock
|
||||||
import kotlinx.datetime.LocalDate
|
import kotlinx.datetime.LocalDate
|
||||||
|
|
||||||
@@ -129,7 +130,7 @@ class CreateMemberUseCase(
|
|||||||
// Publish member created event
|
// Publish member created event
|
||||||
try {
|
try {
|
||||||
val event = MemberCreatedEvent(
|
val event = MemberCreatedEvent(
|
||||||
eventId = uuid4().toString(),
|
eventId = Uuid.random().toString(),
|
||||||
memberId = savedMember.memberId,
|
memberId = savedMember.memberId,
|
||||||
timestamp = Clock.System.now(),
|
timestamp = Clock.System.now(),
|
||||||
firstName = savedMember.firstName,
|
firstName = savedMember.firstName,
|
||||||
|
|||||||
+2
-1
@@ -1,9 +1,10 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.members.application.usecase
|
package at.mocode.members.application.usecase
|
||||||
|
|
||||||
import at.mocode.core.domain.model.ApiResponse
|
import at.mocode.core.domain.model.ApiResponse
|
||||||
import at.mocode.core.domain.model.ErrorDto
|
import at.mocode.core.domain.model.ErrorDto
|
||||||
import at.mocode.members.domain.repository.MemberRepository
|
import at.mocode.members.domain.repository.MemberRepository
|
||||||
import com.benasher44.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Use case for deleting members.
|
* Use case for deleting members.
|
||||||
|
|||||||
+2
-1
@@ -1,10 +1,11 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.members.application.usecase
|
package at.mocode.members.application.usecase
|
||||||
|
|
||||||
import at.mocode.core.domain.model.ApiResponse
|
import at.mocode.core.domain.model.ApiResponse
|
||||||
import at.mocode.core.domain.model.ErrorDto
|
import at.mocode.core.domain.model.ErrorDto
|
||||||
import at.mocode.members.domain.model.Member
|
import at.mocode.members.domain.model.Member
|
||||||
import at.mocode.members.domain.repository.MemberRepository
|
import at.mocode.members.domain.repository.MemberRepository
|
||||||
import com.benasher44.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Use case for retrieving members.
|
* Use case for retrieving members.
|
||||||
|
|||||||
+2
-1
@@ -1,3 +1,4 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.members.application.usecase
|
package at.mocode.members.application.usecase
|
||||||
|
|
||||||
import at.mocode.core.domain.model.ApiResponse
|
import at.mocode.core.domain.model.ApiResponse
|
||||||
@@ -6,7 +7,7 @@ import at.mocode.members.domain.model.Member
|
|||||||
import at.mocode.members.domain.repository.MemberRepository
|
import at.mocode.members.domain.repository.MemberRepository
|
||||||
import at.mocode.core.domain.model.ValidationResult
|
import at.mocode.core.domain.model.ValidationResult
|
||||||
import at.mocode.core.domain.model.ValidationError
|
import at.mocode.core.domain.model.ValidationError
|
||||||
import com.benasher44.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
import kotlinx.datetime.LocalDate
|
import kotlinx.datetime.LocalDate
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+2
-1
@@ -1,9 +1,10 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.members.application.usecase
|
package at.mocode.members.application.usecase
|
||||||
|
|
||||||
import at.mocode.core.domain.model.ApiResponse
|
import at.mocode.core.domain.model.ApiResponse
|
||||||
import at.mocode.core.domain.model.ErrorDto
|
import at.mocode.core.domain.model.ErrorDto
|
||||||
import at.mocode.members.domain.repository.MemberRepository
|
import at.mocode.members.domain.repository.MemberRepository
|
||||||
import com.benasher44.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Use case for validating member data.
|
* Use case for validating member data.
|
||||||
|
|||||||
+2
-1
@@ -1,6 +1,7 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.members.domain.events
|
package at.mocode.members.domain.events
|
||||||
|
|
||||||
import com.benasher44.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
import kotlinx.datetime.Instant
|
import kotlinx.datetime.Instant
|
||||||
import kotlinx.datetime.LocalDate
|
import kotlinx.datetime.LocalDate
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -1,7 +1,8 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.members.domain.repository
|
package at.mocode.members.domain.repository
|
||||||
|
|
||||||
import at.mocode.members.domain.model.Member
|
import at.mocode.members.domain.model.Member
|
||||||
import com.benasher44.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
import kotlinx.datetime.LocalDate
|
import kotlinx.datetime.LocalDate
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+2
-1
@@ -1,9 +1,10 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.members.infrastructure.persistence
|
package at.mocode.members.infrastructure.persistence
|
||||||
|
|
||||||
import at.mocode.core.utils.database.DatabaseFactory
|
import at.mocode.core.utils.database.DatabaseFactory
|
||||||
import at.mocode.members.domain.model.Member
|
import at.mocode.members.domain.model.Member
|
||||||
import at.mocode.members.domain.repository.MemberRepository
|
import at.mocode.members.domain.repository.MemberRepository
|
||||||
import com.benasher44.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
import kotlinx.datetime.Clock
|
import kotlinx.datetime.Clock
|
||||||
import kotlinx.datetime.LocalDate
|
import kotlinx.datetime.LocalDate
|
||||||
import kotlinx.datetime.TimeZone
|
import kotlinx.datetime.TimeZone
|
||||||
|
|||||||
+2
-1
@@ -1,8 +1,9 @@
|
|||||||
|
@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class)
|
||||||
package at.mocode.members.infrastructure.repository
|
package at.mocode.members.infrastructure.repository
|
||||||
|
|
||||||
import at.mocode.members.domain.model.Member
|
import at.mocode.members.domain.model.Member
|
||||||
import at.mocode.members.domain.repository.MemberRepository
|
import at.mocode.members.domain.repository.MemberRepository
|
||||||
import com.benasher44.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
import kotlinx.datetime.LocalDate
|
import kotlinx.datetime.LocalDate
|
||||||
import kotlinx.datetime.Clock
|
import kotlinx.datetime.Clock
|
||||||
import kotlinx.datetime.TimeZone
|
import kotlinx.datetime.TimeZone
|
||||||
|
|||||||
Reference in New Issue
Block a user