EffectDefinitionServiceImpl.kt

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

import io.github.lishangbu.avalon.dataset.entity.dto.EffectDefinitionSpecification
import io.github.lishangbu.avalon.dataset.entity.dto.EffectDefinitionView
import io.github.lishangbu.avalon.dataset.entity.dto.SaveEffectDefinitionInput
import io.github.lishangbu.avalon.dataset.entity.dto.UpdateEffectDefinitionInput
import io.github.lishangbu.avalon.dataset.repository.EffectDefinitionRepository
import io.github.lishangbu.avalon.dataset.service.EffectDefinitionService
import org.babyfish.jimmer.Page
import org.babyfish.jimmer.sql.ast.mutation.SaveMode
import org.springframework.data.domain.Pageable
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional

/** 战斗效果定义应用服务实现。 */
@Service
class EffectDefinitionServiceImpl(
    /** 战斗效果定义仓储。 */
    private val effectDefinitionRepository: EffectDefinitionRepository,
) : EffectDefinitionService {
    override fun getPageByCondition(
        specification: EffectDefinitionSpecification,
        pageable: Pageable,
    ): Page<EffectDefinitionView> = effectDefinitionRepository.pageViews(specification, pageable)

    override fun listByCondition(specification: EffectDefinitionSpecification): List<EffectDefinitionView> = effectDefinitionRepository.listViews(specification)

    @Transactional(rollbackFor = [Exception::class])
    override fun save(command: SaveEffectDefinitionInput): EffectDefinitionView = EffectDefinitionView(effectDefinitionRepository.save(command.toEntity(), SaveMode.INSERT_ONLY))

    @Transactional(rollbackFor = [Exception::class])
    override fun update(command: UpdateEffectDefinitionInput): EffectDefinitionView = EffectDefinitionView(effectDefinitionRepository.save(command.toEntity(), SaveMode.UPDATE_ONLY))

    @Transactional(rollbackFor = [Exception::class])
    override fun removeById(id: Long) {
        effectDefinitionRepository.deleteById(id)
    }
}