package tech.easyflow.skill.service;

import com.mybatisflex.core.service.IService;
import tech.easyflow.skill.entity.SkillCategory;

import java.math.BigInteger;

/**
 * Skill 分类服务。
 */
public interface SkillCategoryService extends IService<SkillCategory> {

    /**
     * 校验目标分类可作为 Skill 分类。
     *
     * @param categoryId 分类 ID，可为空
     */
    void validateUsableCategory(BigInteger categoryId);

    /**
     * 锁定当前租户完整分类树，并校验目标分类可供 Skill 使用。
     *
     * <p>Skill 新建、改分类和移出分类必须在同一事务内先调用此方法，再写入
     * {@code tb_skill.category_id}，从而与分类删除形成统一的行锁顺序。</p>
     *
     * @param categoryId 分类 ID；为空时仍锁定分类树，以保护从原分类移出的并发操作
     * @throws tech.easyflow.common.web.exceptions.BusinessException 分类不存在、不可用或登录态无效
     */
    void lockAndValidateUsableCategory(BigInteger categoryId);
}
