DomainEventHandler.kt

package de.pflugradts.passbird.domain.service.eventhandling

import de.pflugradts.passbird.domain.model.ddd.DomainEvent
import de.pflugradts.passbird.domain.model.event.EggDiscarded
import de.pflugradts.passbird.domain.service.password.tree.EggRepository

class DomainEventHandler(private val eggRepositoryProvider: () -> EggRepository) : EventHandler {
    override val eventTypes: Set<Class<out DomainEvent>> = setOf(EggDiscarded::class.java)

    private val eggRepository: EggRepository get() = eggRepositoryProvider()

    override fun handle(domainEvent: DomainEvent) {
        when (domainEvent) {
            is EggDiscarded -> handleEggDiscarded(domainEvent)
        }
    }

    private fun handleEggDiscarded(eggDiscarded: EggDiscarded) {
        eggRepository.delete(eggDiscarded.egg)
    }
}