Added task id to derived when producing event

This commit is contained in:
Brage Skjønborg 2025-12-15 23:39:38 +01:00
parent 751436a789
commit 0c0a2b5e9a
3 changed files with 10 additions and 3 deletions

View File

@ -15,8 +15,10 @@ 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
val derivedIds = task.metadata.derivedFromId ?: emptySet() val derivedFromIds: MutableList<UUID> = mutableListOf()
metadata = Metadata().derivedFromEventId(derivedIds) task.metadata.derivedFromId?.let { derivedFromIds.addAll(it) }
derivedFromIds.add(task.taskId)
metadata = Metadata().derivedFromEventId(derivedFromIds.toSet())
} }
fun derivedOf(vararg event: Event) = self<Event>().apply { fun derivedOf(vararg event: Event) = self<Event>().apply {

View File

@ -22,6 +22,10 @@ abstract class Task {
referenceId = event.referenceId referenceId = event.referenceId
metadata = Metadata().derivedFromEventId(event.eventId) metadata = Metadata().derivedFromEventId(event.eventId)
} }
fun usingReferenceId(refId: UUID) = self<Task>().apply {
referenceId = refId
}
} }
inline fun <reified T> Task.requireAs(): T { inline fun <reified T> Task.requireAs(): T {

View File

@ -113,8 +113,9 @@ class TaskPollerImplementationTest : TestBase() {
advanceUntilIdle() advanceUntilIdle()
val producedEvent = eventDeferred.await() val producedEvent = eventDeferred.await()
assertThat(producedEvent).isNotNull assertThat(producedEvent).isNotNull
assertThat(producedEvent.metadata.derivedFromId).hasSize(1) assertThat(producedEvent.metadata.derivedFromId).hasSize(2)
assertThat(producedEvent.metadata.derivedFromId).contains(task.metadata.derivedFromId!!.first()) assertThat(producedEvent.metadata.derivedFromId).contains(task.metadata.derivedFromId!!.first())
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")
} }