LocalNatureReader.kt
package io.github.lishangbu.avalon.dataset.service.api
import io.github.lishangbu.avalon.dataset.api.model.NatureInfo
import io.github.lishangbu.avalon.dataset.api.service.NatureReader
import io.github.lishangbu.avalon.dataset.entity.dto.NatureSpecification
import io.github.lishangbu.avalon.dataset.entity.dto.NatureView
import io.github.lishangbu.avalon.dataset.repository.NatureRepository
import org.springframework.stereotype.Service
@Service
class LocalNatureReader(
private val natureRepository: NatureRepository,
) : NatureReader {
override fun findNatureById(id: Long): NatureInfo? = natureRepository.loadViewById(id)?.toNatureInfo()
override fun findNatureByInternalName(internalName: String): NatureInfo? =
natureRepository
.listViews(NatureSpecification(internalName = internalName))
.firstOrNull { nature -> nature.internalName == internalName }
?.toNatureInfo()
private fun NatureView.toNatureInfo(): NatureInfo =
NatureInfo(
id = id.toLong(),
internalName = requireNotNull(internalName) { "Nature id=$id is missing internalName." },
name = name ?: requireNotNull(internalName),
increasedStatInternalName = increasedStat?.internalName,
decreasedStatInternalName = decreasedStat?.internalName,
)
}