Nest.kt
package de.pflugradts.passbird.domain.model.nest
import de.pflugradts.passbird.domain.model.ddd.AggregateRoot
import de.pflugradts.passbird.domain.model.event.NestCreated
import de.pflugradts.passbird.domain.model.event.NestDiscarded
import de.pflugradts.passbird.domain.model.shell.Shell
import de.pflugradts.passbird.domain.model.shell.Shell.Companion.shellOf
import de.pflugradts.passbird.domain.model.slot.Slot
class Nest private constructor(private val shell: Shell, val slot: Slot) : AggregateRoot() {
init {
registerDomainEvent(NestCreated(this))
}
fun viewNestId() = shell.copy()
fun discard() {
registerDomainEvent(NestDiscarded(this))
}
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
other as Nest
return slot == other.slot
}
override fun hashCode() = slot.hashCode()
companion object {
val DEFAULT = Nest(shellOf("Default"), Slot.DEFAULT)
fun createNest(shell: Shell, slot: Slot) = Nest(shell.copy(), slot)
}
}