![JAR search and dependency download from the Maven repository](/logo.png)
no.ks.kes.lib.AggregateRepository.kt Maven / Gradle / Ivy
package no.ks.kes.lib
import java.util.*
import kotlin.reflect.KClass
abstract class AggregateRepository() {
abstract fun append(aggregateType: String, aggregateId: UUID, expectedEventNumber: ExpectedEventNumber, eventWrappers: List>)
abstract fun getSerializationId(eventDataClass: KClass>): String
fun read(aggregateId: UUID, aggregateConfiguration: ValidatedAggregateConfiguration): AggregateReadResult =
read(
aggregateId = aggregateId,
aggregateType = aggregateConfiguration.aggregateType,
applicator = { s: A?, e -> aggregateConfiguration.applyEvent(e, s) }
)
protected abstract fun read(aggregateId: UUID, aggregateType: String, applicator: (state: A?, event: EventWrapper<*>) -> A?): AggregateReadResult
}
sealed class AggregateReadResult{
data class InitializedAggregate(val aggregateState: A, val eventNumber: Long): AggregateReadResult()
data class UninitializedAggregate(val eventNumber: Long): AggregateReadResult()
object NonExistingAggregate: AggregateReadResult()
}
sealed class ExpectedEventNumber {
object Any : ExpectedEventNumber()
object AggregateDoesNotExist : ExpectedEventNumber()
object AggregateExists : ExpectedEventNumber()
data class Exact(val eventNumber: Long) : ExpectedEventNumber()
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy