Set
This commit is contained in:
parent
ceeeddefa1
commit
b7552dbc67
@ -8,7 +8,7 @@ import java.util.UUID
|
||||
class EventDispatcher(val eventStore: EventStore) {
|
||||
|
||||
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 candidates = events
|
||||
.filter { it.eventId !in derivedFromIds }
|
||||
|
||||
@ -15,12 +15,12 @@ abstract class Event {
|
||||
|
||||
fun producedFrom(task: Task): Event = self<Event>().apply {
|
||||
referenceId = task.referenceId
|
||||
metadata = Metadata(derivedFromId = task.taskId)
|
||||
metadata = Metadata().derivedFromEventId(task.taskId)
|
||||
}
|
||||
|
||||
fun derivedOf(event: Event) = self<Event>().apply {
|
||||
referenceId = event.referenceId
|
||||
metadata = Metadata(derivedFromId = event.eventId)
|
||||
fun derivedOf(vararg event: Event) = self<Event>().apply {
|
||||
referenceId = event.first().referenceId
|
||||
metadata = Metadata().derivedFromEventId(*event.map { it.eventId }.toTypedArray())
|
||||
}
|
||||
|
||||
fun newReferenceId() = self<Event>().apply {
|
||||
|
||||
@ -3,7 +3,11 @@ package no.iktdev.eventi.models
|
||||
import java.time.LocalDateTime
|
||||
import java.util.UUID
|
||||
|
||||
open class Metadata(
|
||||
val created: LocalDateTime = LocalDateTime.now(),
|
||||
val derivedFromId: UUID? = null
|
||||
) {}
|
||||
class Metadata {
|
||||
val created: LocalDateTime = LocalDateTime.now()
|
||||
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 {
|
||||
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.Event
|
||||
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.assertFalse
|
||||
import org.junit.jupiter.api.Assertions.assertNotNull
|
||||
@ -52,7 +53,8 @@ class EventDispatcherTest: TestBase() {
|
||||
assertNotNull(produced)
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
|
||||
@ -1,11 +1,13 @@
|
||||
package no.iktdev.eventi.tasks
|
||||
|
||||
import io.mockk.mockk
|
||||
import kotlinx.coroutines.CompletableDeferred
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.test.advanceUntilIdle
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import no.iktdev.eventi.InMemoryTaskStore
|
||||
import no.iktdev.eventi.TestBase
|
||||
import no.iktdev.eventi.events.EventListener
|
||||
import no.iktdev.eventi.events.EventTypeRegistry
|
||||
import no.iktdev.eventi.models.Event
|
||||
import no.iktdev.eventi.models.Task
|
||||
@ -58,8 +60,6 @@ class AbstractTaskPollerTest : TestBase() {
|
||||
open class EchoListener : TaskListener(TaskType.MIXED) {
|
||||
var result: Event? = null
|
||||
|
||||
override var reporter: TaskReporter? = null
|
||||
|
||||
override fun getWorkerId() = this.javaClass.simpleName
|
||||
|
||||
override fun supports(task: Task): Boolean {
|
||||
@ -98,7 +98,8 @@ class AbstractTaskPollerTest : TestBase() {
|
||||
advanceUntilIdle()
|
||||
val producedEvent = eventDeferred.await()
|
||||
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")
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user