package com.kexue.skills.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.kexue.skills.entity.CmsTag;
import com.kexue.skills.entity.dto.CmsTagDto;
import com.kexue.skills.mapper.CmsTagMapper;
import com.kexue.skills.service.CmsTagService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 * (CmsTag)表服务实现类
 *
 * @author 王志维
 * @since 2025-02-21 23:01:48
 */
@Service("cmsTagService")
@Transactional(rollbackFor = Exception.class)
public class CmsTagServiceImpl implements CmsTagService {
    @Resource
    private CmsTagMapper cmsTagMapper;

    /**
     * 分页查询
     *
     * @param queryDto 筛选条件
     * @return 查询结果
     */
    @Override
    public PageInfo<CmsTag> getPageList(CmsTagDto queryDto) {
        PageHelper.startPage(queryDto.getPageNum(), queryDto.getPageSize());
        List<CmsTag> list = this.cmsTagMapper.getPageList(queryDto);
        return new PageInfo<>(list);
    }

    /**
     * 查询列表
     *
     * @param queryDto 筛选条件
     * @return 查询结果
     */
    @Override
    public List<CmsTag> getList(CmsTagDto queryDto) {
        return this.cmsTagMapper.getList(queryDto);
    }

    /**
     * 通过主键查询单条数据
     *
     * @param tagId 主键
     * @return 实例对象
     */
    @Override
    public CmsTag queryById(Long tagId) {
        return this.cmsTagMapper.queryById(tagId);
    }

    /**
     * 新增数据
     *
     * @param cmsTag 实例对象
     * @return 实例对象
     */
    @Override
    public CmsTag insert(CmsTag cmsTag) {
        // 设置创建时间和更新时间
        Date now = new Date();
        cmsTag.setCreateTime(now);
        cmsTag.setUpdateTime(now);
        // 设置默认值
        cmsTag.setDeleteFlag(0);
        if (cmsTag.getStatus() == null) {
            cmsTag.setStatus(1);
        }
        if (cmsTag.getUseCount() == null) {
            cmsTag.setUseCount(0);
        }
        // 保存数据
        this.cmsTagMapper.insert(cmsTag);
        return cmsTag;
    }

    /**
     * 更新数据
     *
     * @param cmsTag 实例对象
     * @return 实例对象
     */
    @Override
    public CmsTag update(CmsTag cmsTag) {
        // 设置更新时间
        cmsTag.setUpdateTime(new Date());
        // 更新数据
        this.cmsTagMapper.update(cmsTag);
        return this.queryById(cmsTag.getTagId());
    }

    /**
     * 通过主键逻辑删除
     *
     * @param tagId 主键
     * @param updateBy 更新人
     * @return 影响行数
     */
    @Override
    public int logicDeleteById(Long tagId, String updateBy) {
        return this.cmsTagMapper.logicDeleteById(tagId, updateBy);
    }

    /**
     * 通过主键物理删除
     *
     * @param tagId 主键
     * @return 影响行数
     */
    @Override
    public int deleteById(Long tagId) {
        return this.cmsTagMapper.deleteById(tagId);
    }

    /**
     * 根据分类ID查询标签列表
     *
     * @param categoryId 分类ID
     * @return 标签列表
     */
    @Override
    public List<CmsTag> getTagsByCategoryId(Long categoryId) {
        return this.cmsTagMapper.getTagsByCategoryId(categoryId);
    }
}