LocalAbilityReader.kt
package io.github.lishangbu.avalon.dataset.service.api
import io.github.lishangbu.avalon.dataset.api.model.AbilityInfo
import io.github.lishangbu.avalon.dataset.api.service.AbilityReader
import io.github.lishangbu.avalon.dataset.entity.dto.AbilitySpecification
import io.github.lishangbu.avalon.dataset.entity.dto.AbilityView
import io.github.lishangbu.avalon.dataset.repository.AbilityRepository
import org.springframework.stereotype.Service
@Service
class LocalAbilityReader(
private val abilityRepository: AbilityRepository,
) : AbilityReader {
override fun findAbilityByInternalName(internalName: String): AbilityInfo? =
abilityRepository
.listViews(AbilitySpecification(internalName = internalName))
.firstOrNull { ability -> ability.internalName == internalName }
?.toAbilityInfo()
private fun AbilityView.toAbilityInfo(): AbilityInfo =
AbilityInfo(
id = id.toLong(),
internalName = requireNotNull(internalName) { "Ability id=$id is missing internalName." },
name = name ?: requireNotNull(internalName),
effect = effect,
introduction = introduction,
)
}