Set
This commit is contained in:
parent
ceeeddefa1
commit
b7552dbc67
@ -8,7 +8,7 @@ import java.util.UUID
|
|||||||
class EventDispatcher(val eventStore: EventStore) {
|
class EventDispatcher(val eventStore: EventStore) {
|
||||||
|
|
||||||
fun dispatch(referenceId: UUID, events: List<Event>) {
|
fun dispatch(referenceId: UUID, events: List<Event>) {
|
||||||
val derivedFromIds = events.mapNotNull { it.metadata.derivedFromId }.toSet()
|
val derivedFromIds = events.mapNotNull { it.metadata.derivedFromId }.flatten().toSet()
|
||||||
val deletedEventIds = events.filterIsInstance<DeleteEvent>().map { it.deletedEventId }
|
val deletedEventIds = events.filterIsInstance<DeleteEvent>().map { it.deletedEventId }
|
||||||
val candidates = events
|
val candidates = events
|
||||||
.filter { it.eventId !in derivedFromIds }
|
.filter { it.eventId !in derivedFromIds }
|
||||||
|
|||||||
@ -15,12 +15,12 @@ abstract class Event {
|
|||||||
|
|
||||||
fun producedFrom(task: Task): Event = self<Event>().apply {
|
fun producedFrom(task: Task): Event = self<Event>().apply {
|
||||||
referenceId = task.referenceId
|
referenceId = task.referenceId
|
||||||
metadata = Metadata(derivedFromId = task.taskId)
|
metadata = Metadata().derivedFromEventId(task.taskId)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun derivedOf(event: Event) = self<Event>().apply {
|
fun derivedOf(vararg event: Event) = self<Event>().apply {
|
||||||
referenceId = event.referenceId
|
referenceId = event.first().referenceId
|
||||||
metadata = Metadata(derivedFromId = event.eventId)
|
metadata = Metadata().derivedFromEventId(*event.map { it.eventId }.toTypedArray())
|
||||||
}
|
}
|
||||||
|
|
||||||
fun newReferenceId() = self<Event>().apply {
|
fun newReferenceId() = self<Event>().apply {
|
||||||
|
|||||||
@ -3,7 +3,11 @@ package no.iktdev.eventi.models
|
|||||||
import java.time.LocalDateTime
|
import java.time.LocalDateTime
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
open class Metadata(
|
class Metadata {
|
||||||
val created: LocalDateTime = LocalDateTime.now(),
|
val created: LocalDateTime = LocalDateTime.now()
|
||||||
val derivedFromId: UUID? = null
|
var derivedFromId: Set<UUID>? = null
|
||||||
) {}
|
private set
|
||||||
|
fun derivedFromEventId(vararg id: UUID) = apply {
|
||||||
|
derivedFromId = id.toSet()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -20,7 +20,7 @@ abstract class Task {
|
|||||||
|
|
||||||
fun derivedOf(event: Event) = self<Task>().apply {
|
fun derivedOf(event: Event) = self<Task>().apply {
|
||||||
referenceId = event.referenceId
|
referenceId = event.referenceId
|
||||||
metadata = Metadata(derivedFromId = event.eventId)
|
metadata = Metadata().derivedFromEventId(event.eventId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -9,6 +9,7 @@ import no.iktdev.eventi.events.EventTypeRegistry
|
|||||||
import no.iktdev.eventi.models.DeleteEvent
|
import no.iktdev.eventi.models.DeleteEvent
|
||||||
import no.iktdev.eventi.models.Event
|
import no.iktdev.eventi.models.Event
|
||||||
import no.iktdev.eventi.testUtil.wipe
|
import no.iktdev.eventi.testUtil.wipe
|
||||||
|
import org.assertj.core.api.Assertions.assertThat
|
||||||
import org.junit.jupiter.api.Assertions.assertEquals
|
import org.junit.jupiter.api.Assertions.assertEquals
|
||||||
import org.junit.jupiter.api.Assertions.assertFalse
|
import org.junit.jupiter.api.Assertions.assertFalse
|
||||||
import org.junit.jupiter.api.Assertions.assertNotNull
|
import org.junit.jupiter.api.Assertions.assertNotNull
|
||||||
@ -52,7 +53,8 @@ class EventDispatcherTest: TestBase() {
|
|||||||
assertNotNull(produced)
|
assertNotNull(produced)
|
||||||
|
|
||||||
val event = produced!!.toEvent()
|
val event = produced!!.toEvent()
|
||||||
assertEquals(trigger.eventId, event!!.metadata.derivedFromId)
|
assertThat(event!!.metadata.derivedFromId).hasSize(1)
|
||||||
|
assertThat(event!!.metadata.derivedFromId).contains(trigger.eventId)
|
||||||
assertTrue(event is DerivedEvent)
|
assertTrue(event is DerivedEvent)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
package no.iktdev.eventi.tasks
|
package no.iktdev.eventi.tasks
|
||||||
|
|
||||||
|
import io.mockk.mockk
|
||||||
import kotlinx.coroutines.CompletableDeferred
|
import kotlinx.coroutines.CompletableDeferred
|
||||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
import kotlinx.coroutines.test.advanceUntilIdle
|
import kotlinx.coroutines.test.advanceUntilIdle
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
import no.iktdev.eventi.InMemoryTaskStore
|
import no.iktdev.eventi.InMemoryTaskStore
|
||||||
import no.iktdev.eventi.TestBase
|
import no.iktdev.eventi.TestBase
|
||||||
|
import no.iktdev.eventi.events.EventListener
|
||||||
import no.iktdev.eventi.events.EventTypeRegistry
|
import no.iktdev.eventi.events.EventTypeRegistry
|
||||||
import no.iktdev.eventi.models.Event
|
import no.iktdev.eventi.models.Event
|
||||||
import no.iktdev.eventi.models.Task
|
import no.iktdev.eventi.models.Task
|
||||||
@ -58,8 +60,6 @@ class AbstractTaskPollerTest : TestBase() {
|
|||||||
open class EchoListener : TaskListener(TaskType.MIXED) {
|
open class EchoListener : TaskListener(TaskType.MIXED) {
|
||||||
var result: Event? = null
|
var result: Event? = null
|
||||||
|
|
||||||
override var reporter: TaskReporter? = null
|
|
||||||
|
|
||||||
override fun getWorkerId() = this.javaClass.simpleName
|
override fun getWorkerId() = this.javaClass.simpleName
|
||||||
|
|
||||||
override fun supports(task: Task): Boolean {
|
override fun supports(task: Task): Boolean {
|
||||||
@ -98,7 +98,8 @@ class AbstractTaskPollerTest : TestBase() {
|
|||||||
advanceUntilIdle()
|
advanceUntilIdle()
|
||||||
val producedEvent = eventDeferred.await()
|
val producedEvent = eventDeferred.await()
|
||||||
assertThat(producedEvent).isNotNull
|
assertThat(producedEvent).isNotNull
|
||||||
assertThat(producedEvent.metadata.derivedFromId).isEqualTo(task.taskId)
|
assertThat(producedEvent.metadata.derivedFromId).hasSize(1)
|
||||||
|
assertThat(producedEvent.metadata.derivedFromId).contains(task.taskId)
|
||||||
assertThat((listener.result as EchoEvent).data).isEqualTo("Hello Potetmos")
|
assertThat((listener.result as EchoEvent).data).isEqualTo("Hello Potetmos")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user