package org.xyzh.news.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.xyzh.common.core.page.PageParam;
import org.xyzh.common.dto.resource.TbResourceRecommend;

import java.util.List;

/**
 * @description ResourceRecommendMapper.java文件描述 资源推荐数据访问层
 * @filename ResourceRecommendMapper.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-15
 */
@Mapper
public interface ResourceRecommendMapper extends BaseMapper<TbResourceRecommend> {

    /**
     * @description 查询资源推荐列表
     * @param filter 过滤条件
     * @return List<TbResourceRecommend> 资源推荐列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbResourceRecommend> selectResourceRecommends(TbResourceRecommend filter);

    /**
     * @description 根据推荐ID查询推荐信息
     * @param recommendId 推荐ID
     * @return TbResourceRecommend 推荐信息
     * @author yslg
     * @since 2025-10-15
     */
    TbResourceRecommend selectByRecommendId(@Param("recommendId") String recommendId);

    /**
     * @description 根据资源ID查询推荐列表
     * @param resourceId 资源ID
     * @return List<TbResourceRecommend> 推荐列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbResourceRecommend> selectByResourceId(@Param("resourceId") String resourceId);

    /**
     * @description 根据状态查询推荐列表
     * @param status 状态
     * @return List<TbResourceRecommend> 推荐列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbResourceRecommend> selectByStatus(@Param("status") Integer status);

    /**
     * @description 根据类型查询推荐列表
     * @param type 类型
     * @return List<TbResourceRecommend> 推荐列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbResourceRecommend> selectByType(@Param("type") Integer type);

    /**
     * @description 查询热门推荐列表
     * @param limit 限制数量
     * @return List<TbResourceRecommend> 推荐列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbResourceRecommend> selectHotRecommends(@Param("limit") Integer limit);

    /**
     * @description 查询最新推荐列表
     * @param limit 限制数量
     * @return List<TbResourceRecommend> 推荐列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbResourceRecommend> selectLatestRecommends(@Param("limit") Integer limit);

    /**
     * @description 插入资源推荐
     * @param resourceRecommend 资源推荐
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int insertResourceRecommend(TbResourceRecommend resourceRecommend);

    /**
     * @description 更新资源推荐
     * @param resourceRecommend 资源推荐
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int updateResourceRecommend(TbResourceRecommend resourceRecommend);

    /**
     * @description 删除资源推荐
     * @param resourceRecommend 资源推荐
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int deleteResourceRecommend(TbResourceRecommend resourceRecommend);

    /**
     * @description 批量插入资源推荐
     * @param resourceRecommendList 资源推荐列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int batchInsertResourceRecommends(@Param("resourceRecommendList") List<TbResourceRecommend> resourceRecommendList);

    /**
     * @description 批量删除资源推荐
     * @param ids 推荐ID列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int batchDeleteResourceRecommends(@Param("ids") List<String> ids);

    /**
     * @description 分页查询资源推荐
     * @param filter 过滤条件
     * @param pageParam 分页参数
     * @return List<TbResourceRecommend> 资源推荐列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbResourceRecommend> selectResourceRecommendsPage(@Param("filter") TbResourceRecommend filter, @Param("pageParam") PageParam pageParam);

    /**
     * @description 统计资源推荐总数
     * @param filter 过滤条件
     * @return long 总数
     * @author yslg
     * @since 2025-10-15
     */
    long countResourceRecommends(@Param("filter") TbResourceRecommend filter);
}
