NatureServiceImpl.kt
package io.github.lishangbu.avalon.dataset.service.impl
import io.github.lishangbu.avalon.dataset.entity.Nature
import io.github.lishangbu.avalon.dataset.entity.dto.NatureSpecification
import io.github.lishangbu.avalon.dataset.entity.dto.NatureView
import io.github.lishangbu.avalon.dataset.entity.dto.SaveNatureInput
import io.github.lishangbu.avalon.dataset.entity.dto.UpdateNatureInput
import io.github.lishangbu.avalon.dataset.repository.NatureRepository
import io.github.lishangbu.avalon.dataset.service.NatureService
import org.babyfish.jimmer.sql.ast.mutation.SaveMode
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
/** 性格服务实现 */
@Service
class NatureServiceImpl(
private val natureRepository: NatureRepository,
) : NatureService {
@Transactional(rollbackFor = [Exception::class])
override fun save(command: SaveNatureInput): NatureView = natureRepository.save(command.toEntity(), SaveMode.INSERT_ONLY).let(::reloadView)
@Transactional(rollbackFor = [Exception::class])
override fun update(command: UpdateNatureInput): NatureView = natureRepository.save(command.toEntity(), SaveMode.UPDATE_ONLY).let(::reloadView)
@Transactional(rollbackFor = [Exception::class])
override fun removeById(id: Long) {
natureRepository.deleteById(id)
}
override fun listByCondition(specification: NatureSpecification): List<NatureView> = natureRepository.listViews(specification)
private fun reloadView(nature: Nature): NatureView = requireNotNull(natureRepository.loadViewById(nature.id)) { "未找到 ID=${nature.id} 对应的性格" }
}