ViewFavoriteCommandHandler.kt
package de.pflugradts.passbird.application.commandhandling.handler.favorite
import de.pflugradts.passbird.application.UserInterfaceAdapterPort
import de.pflugradts.passbird.application.commandhandling.capabilities.CanPrintInfo
import de.pflugradts.passbird.application.commandhandling.command.ViewFavoriteCommand
import de.pflugradts.passbird.application.commandhandling.handler.TypedCommandHandler
import de.pflugradts.passbird.domain.model.shell.Shell
import de.pflugradts.passbird.domain.model.shell.Shell.Companion.shellOf
import de.pflugradts.passbird.domain.model.transfer.Output.Companion.outputOf
import de.pflugradts.passbird.domain.service.password.PasswordService
class ViewFavoriteCommandHandler constructor(
private val canPrintInfo: CanPrintInfo,
private val passwordService: PasswordService,
private val userInterfaceAdapterPort: UserInterfaceAdapterPort,
) : TypedCommandHandler<ViewFavoriteCommand>(ViewFavoriteCommand::class.java) {
override fun handleCommand(@Suppress("UNUSED_PARAMETER") command: ViewFavoriteCommand) {
val favorites = passwordService.viewFavorites()
try {
userInterfaceAdapterPort.sendLineBreak()
with(canPrintInfo) {
if (favorites.any { it.isPresent }) {
favorites.forEachIndexed { index, favorite ->
favorite.ifPresent {
userInterfaceAdapterPort.send(outBold("$index:"), out(" ${it.asString()}"))
}
}
} else {
userInterfaceAdapterPort.send(outputOf(shellOf("Favorite EggIds are empty.")))
}
}
userInterfaceAdapterPort.sendLineBreak()
} finally {
favorites.forEach { it.ifPresent(Shell::scramble) }
}
}
}