All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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