diff --git a/src/main/kotlin/eventDemo/libs/event/EventStore.kt b/src/main/kotlin/eventDemo/libs/event/EventStore.kt index e27625e..9329c9e 100644 --- a/src/main/kotlin/eventDemo/libs/event/EventStore.kt +++ b/src/main/kotlin/eventDemo/libs/event/EventStore.kt @@ -1,7 +1,12 @@ package eventDemo.libs.event +import io.github.oshai.kotlinlogging.withLoggingContext + interface EventStore, ID : AggregateId> { fun getStream(aggregateId: ID): EventStream - fun publish(event: E) + fun publish(event: E) = + withLoggingContext("event" to event.toString()) { + getStream(event.aggregateId).publish(event) + } } diff --git a/src/main/kotlin/eventDemo/libs/event/EventStoreInMemory.kt b/src/main/kotlin/eventDemo/libs/event/EventStoreInMemory.kt index d9d8f93..bc4dae9 100644 --- a/src/main/kotlin/eventDemo/libs/event/EventStoreInMemory.kt +++ b/src/main/kotlin/eventDemo/libs/event/EventStoreInMemory.kt @@ -1,6 +1,5 @@ package eventDemo.libs.event -import io.github.oshai.kotlinlogging.withLoggingContext import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.ConcurrentMap @@ -9,9 +8,4 @@ class EventStoreInMemory, ID : AggregateId> : EventStore { override fun getStream(aggregateId: ID): EventStream = streams.computeIfAbsent(aggregateId) { EventStreamInMemory() } - - override fun publish(event: E) = - withLoggingContext("event" to event.toString()) { - getStream(event.aggregateId).publish(event) - } } diff --git a/src/main/kotlin/eventDemo/libs/event/EventStream.kt b/src/main/kotlin/eventDemo/libs/event/EventStream.kt index e38a342..0df6991 100644 --- a/src/main/kotlin/eventDemo/libs/event/EventStream.kt +++ b/src/main/kotlin/eventDemo/libs/event/EventStream.kt @@ -1,6 +1,7 @@ package eventDemo.libs.event import eventDemo.libs.event.projection.Projection +import io.github.oshai.kotlinlogging.withLoggingContext /** * Interface representing an event stream for publishing and reading domain events @@ -10,12 +11,19 @@ interface EventStream> { fun publish(event: E) /** Publishes multiple events to the event stream */ - fun publish(vararg events: E) + fun publish(vararg events: E) { + events.forEach { + withLoggingContext("event" to it.toString()) { + publish(it) + } + } + } /** Reads all events */ fun readAll(): Set - fun readGreaterOfVersion(version: Int): Set + fun readGreaterOfVersion(version: Int): Set = + readVersionBetween(version + 1..Int.MAX_VALUE) fun readVersionBetween(version: IntRange): Set @@ -25,5 +33,6 @@ interface EventStream> { ): Set = readVersionBetween(((projection?.lastEventVersion ?: 0) + 1)..event.version) - fun getByVersion(version: Int): E? + fun getByVersion(version: Int): E? = + readVersionBetween(version..version).firstOrNull() } diff --git a/src/main/kotlin/eventDemo/libs/event/EventStreamInMemory.kt b/src/main/kotlin/eventDemo/libs/event/EventStreamInMemory.kt index ae42dce..9e884f9 100644 --- a/src/main/kotlin/eventDemo/libs/event/EventStreamInMemory.kt +++ b/src/main/kotlin/eventDemo/libs/event/EventStreamInMemory.kt @@ -1,7 +1,6 @@ package eventDemo.libs.event import io.github.oshai.kotlinlogging.KotlinLogging -import io.github.oshai.kotlinlogging.withLoggingContext import java.util.Queue import java.util.concurrent.ConcurrentLinkedQueue @@ -21,27 +20,11 @@ class EventStreamInMemory> : EventStream { } } - override fun publish(vararg events: E) { - events.forEach { - withLoggingContext("event" to it.toString()) { - publish(it) - } - } - } - override fun readAll(): Set = events.toSet() - override fun readGreaterOfVersion(version: Int): Set = - events - .filter { it.version > version } - .toSet() - override fun readVersionBetween(version: IntRange): Set = events .filter { version.contains(it.version) } .toSet() - - override fun getByVersion(version: Int): E? = - events.find { version == it.version } }