LocalSpeciesReader.kt

package io.github.lishangbu.avalon.dataset.service.api

import io.github.lishangbu.avalon.dataset.api.model.SpeciesInfo
import io.github.lishangbu.avalon.dataset.api.service.SpeciesReader
import io.github.lishangbu.avalon.dataset.entity.dto.CreatureSpeciesView
import io.github.lishangbu.avalon.dataset.repository.CreatureSpeciesRepository
import org.springframework.stereotype.Service

@Service
class LocalSpeciesReader(
    private val creatureSpeciesRepository: CreatureSpeciesRepository,
) : SpeciesReader {
    override fun findSpeciesById(id: Long): SpeciesInfo? = creatureSpeciesRepository.loadViewById(id)?.toSpeciesInfo()

    private fun CreatureSpeciesView.toSpeciesInfo(): SpeciesInfo =
        SpeciesInfo(
            id = id.toLong(),
            internalName = requireNotNull(internalName) { "Creature species id=$id is missing internalName." },
            name = name ?: requireNotNull(internalName),
            captureRate = captureRate,
        )
}