CreatureVariantServiceImpl.kt
package io.github.lishangbu.avalon.dataset.service.impl
import io.github.lishangbu.avalon.dataset.entity.CreatureVariant
import io.github.lishangbu.avalon.dataset.entity.dto.CreatureVariantSpecification
import io.github.lishangbu.avalon.dataset.entity.dto.CreatureVariantView
import io.github.lishangbu.avalon.dataset.entity.dto.SaveCreatureVariantInput
import io.github.lishangbu.avalon.dataset.entity.dto.UpdateCreatureVariantInput
import io.github.lishangbu.avalon.dataset.repository.CreatureVariantRepository
import io.github.lishangbu.avalon.dataset.service.CreatureVariantService
import org.babyfish.jimmer.Page
import org.babyfish.jimmer.sql.ast.mutation.SaveMode
import org.springframework.data.domain.Pageable
import org.springframework.stereotype.Service
@Service
class CreatureVariantServiceImpl(
private val creatureVariantRepository: CreatureVariantRepository,
) : CreatureVariantService {
override fun getPageByCondition(
specification: CreatureVariantSpecification,
pageable: Pageable,
): Page<CreatureVariantView> = creatureVariantRepository.pageViews(specification, pageable)
override fun save(command: SaveCreatureVariantInput): CreatureVariantView = creatureVariantRepository.save(command.toEntity(), SaveMode.INSERT_ONLY).let(::reloadView)
override fun update(command: UpdateCreatureVariantInput): CreatureVariantView = creatureVariantRepository.save(command.toEntity(), SaveMode.UPDATE_ONLY).let(::reloadView)
override fun removeById(id: Long) {
creatureVariantRepository.deleteById(id)
}
private fun reloadView(creatureVariant: CreatureVariant): CreatureVariantView = requireNotNull(creatureVariantRepository.loadViewById(creatureVariant.id)) { "未找到 ID=${creatureVariant.id} 对应的生物变体" }
}