package com.kexue.skills.service;

import com.github.pagehelper.PageInfo;
import com.kexue.skills.entity.CmsCategoryTag;
import com.kexue.skills.entity.dto.CmsCategoryTagDto;

import java.util.List;

/**
 * (CmsCategoryTag)表服务接口
 *
 * @author 王志维
 * @since 2025-02-21 23:01:48
 */
public interface CmsCategoryTagService extends BaseService {
    /**
     * 分页查询
     *
     * @param queryDto 筛选条件
     * @return 查询结果
     */
    PageInfo<CmsCategoryTag> getPageList(CmsCategoryTagDto queryDto);

    /**
     * 查询列表
     *
     * @param queryDto 筛选条件
     * @return 查询结果
     */
    List<CmsCategoryTag> getList(CmsCategoryTagDto queryDto);

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    CmsCategoryTag queryById(Long id);

    /**
     * 新增数据
     *
     * @param cmsCategoryTag 实例对象
     * @return 实例对象
     */
    CmsCategoryTag insert(CmsCategoryTag cmsCategoryTag);

    /**
     * 更新数据
     *
     * @param cmsCategoryTag 实例对象
     * @return 实例对象
     */
    CmsCategoryTag update(CmsCategoryTag cmsCategoryTag);

    /**
     * 通过主键逻辑删除
     *
     * @param id 主键
     * @param updateBy 更新人
     * @return 影响行数
     */
    int logicDeleteById(Long id, String updateBy);

    /**
     * 通过主键物理删除
     *
     * @param id 主键
     * @return 影响行数
     */
    int deleteById(Long id);

    /**
     * 根据分类ID删除关联
     *
     * @param categoryId 分类ID
     * @param updateBy 更新人
     * @return 影响行数
     */
    int deleteByCategoryId(Long categoryId, String updateBy);

    /**
     * 根据标签ID删除关联
     *
     * @param tagId 标签ID
     * @param updateBy 更新人
     * @return 影响行数
     */
    int deleteByTagId(Long tagId, String updateBy);

    /**
     * 批量插入关联
     *
     * @param categoryTagList 关联列表
     * @return 影响行数
     */
    int batchInsert(List<CmsCategoryTag> categoryTagList);

    /**
     * 批量设置分类标签关联
     *
     * @param categoryId 分类ID
     * @param tagIds 标签ID列表
     * @param updateBy 更新人
     * @return 影响行数
     */
    int batchSetCategoryTags(Long categoryId, List<Long> tagIds, String updateBy);

    /**
     * 根据分类ID获取标签列表
     *
     * @param categoryId 分类ID
     * @return 标签列表
     */
    List<com.kexue.skills.entity.CmsTag> getTagsByCategoryId(Long categoryId);
} 
