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

no.ks.kes.lib.Projections.kt Maven / Gradle / Ivy

package no.ks.kes.lib

import mu.KotlinLogging
import kotlin.system.exitProcess

private val log = KotlinLogging.logger {}

object Projections {
    fun  initialize(
        eventSubscriberFactory: EventSubscriberFactory,
        projections: Set,
        projectionRepository: ProjectionRepository,
        hwmId: String,
        onError: (Exception) -> Unit = defaultOnCloseHandler
    ): S {
        val validatedProjectionConfigurations = projections.map { projection -> projection.getConfiguration { eventSubscriberFactory.getSerializationId(it) } }

        return eventSubscriberFactory.createSubscriber(
                hwmId = hwmId,
                onEvent = { wrapper ->
                    projectionRepository.transactionally {
                        validatedProjectionConfigurations.forEach {
                            it.accept(wrapper)
                        }
                        projectionRepository.hwmTracker.update(hwmId, wrapper.eventNumber)
                    }
                },
                fromEvent = projectionRepository.hwmTracker.getOrInit(hwmId),
                onError = { onError.invoke(it) },
                onLive = { projections.forEach { it.onLive() } }
        )
    }
}

val defaultOnCloseHandler = { exception: Exception ->
    log.error(exception) { "Event subscription was closed. Shutting down." }
    exitProcess(1)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy