Improve concurrence of ProjectionSnapshotRepositoryInMemory and GameEventHandler
This commit is contained in:
@@ -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? =
|
||||
|
||||
Reference in New Issue
Block a user