package com.gxwebsoft.cms.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.gxwebsoft.cms.entity.CmsWebsiteSetting;
import com.gxwebsoft.cms.param.CmsWebsiteSettingParam;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * 网站设置Mapper
 *
 * @author 科技小王子
 * @since 2025-02-19 01:35:44
 */
public interface CmsWebsiteSettingMapper extends BaseMapper<CmsWebsiteSetting> {

    /**
     * 分页查询
     *
     * @param page  分页对象
     * @param param 查询参数
     * @return List<CmsWebsiteSetting>
     */
    List<CmsWebsiteSetting> selectPageRel(@Param("page") IPage<CmsWebsiteSetting> page,
                             @Param("param") CmsWebsiteSettingParam param);

    /**
     * 查询全部
     *
     * @param param 查询参数
     * @return List<User>
     */
    List<CmsWebsiteSetting> selectListRel(@Param("param") CmsWebsiteSettingParam param);

    /**
     * 忽略逻辑删除，按 websiteId 查最新一条记录。
     * 用于「根据id查询」自愈：能捞到 deleted IS NULL 的孤儿记录（旧逻辑遗留），
     * 避免 MP 自带 getOne 因补 deleted=0 而查不到、继而新建时撞 website_id 唯一索引。
     * 注意：自定义 @Select 不被 @TableLogic 自动追加 deleted 过滤（与本项目 XML 自定义查询一致）。
     */
    @Select("SELECT * FROM cms_website_setting WHERE website_id = #{websiteId} ORDER BY id ASC LIMIT 1")
    CmsWebsiteSetting selectByWebsiteIdIgnoreLogic(@Param("websiteId") Integer websiteId);

    /**
     * 将指定记录复活为正常态（deleted=0）。
     * 自定义 @Update 不受 @TableLogic 改写，可修正孤儿记录而不被 WHERE deleted=0 拦截。
     */
    @Update("UPDATE cms_website_setting SET deleted = 0 WHERE id = #{id}")
    void reviveById(@Param("id") Integer id);

}
