Improve concurrence of ProjectionSnapshotRepositoryInMemory and GameEventHandler

This commit is contained in:
2025-03-13 23:57:20 +01:00
parent 286dedac76
commit 91767e3747
21 changed files with 358 additions and 154 deletions

View File

@@ -15,10 +15,12 @@ class EventStreamInMemory<E : Event<ID>, ID : AggregateId> : EventStream<E, ID>
private val events: Queue<E> = ConcurrentLinkedQueue()
override fun publish(event: E) {
events.add(event)
logger.atInfo {
message = "Event published: $event"
payload = mapOf("event" to event)
if (events.none { it.eventId == event.eventId }) {
events.add(event)
logger.atInfo {
message = "Event published: $event"
payload = mapOf("event" to event)
}
}
}
@@ -40,6 +42,15 @@ class EventStreamInMemory<E : Event<ID>, ID : AggregateId> : EventStream<E, ID>
events
.filter { it.aggregateId == aggregateId }
.toSet()
override fun readGreaterOfVersion(
aggregateId: ID,
version: Int,
): Set<E> =
events
.filter { it.aggregateId == aggregateId }
.filter { it.version > version }
.toSet()
}
inline fun <reified R : E, E : Event<ID>, ID : AggregateId> EventStream<E, ID>.readLastOf(aggregateId: ID): R? =