package org.xyzh.usercenter.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.usercenter.TbUserPoints;

import java.util.List;

/**
 * @description UserPointsMapper.java文件描述 用户积分数据访问层
 * @filename UserPointsMapper.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-15
 */
@Mapper
public interface UserPointsMapper extends BaseMapper<TbUserPoints> {

    /**
     * @description 查询用户积分列表
     * @param filter 过滤条件
     * @return List<TbUserPoints> 用户积分列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbUserPoints> selectUserPoints(TbUserPoints filter);

    /**
     * @description 根据用户ID查询积分信息
     * @param userId 用户ID
     * @return TbUserPoints 用户积分信息
     * @author yslg
     * @since 2025-10-15
     */
    TbUserPoints selectByUserId(@Param("userId") String userId);

    /**
     * @description 检查用户积分是否存在
     * @param userId 用户ID
     * @param excludeId 排除的积分ID（用于更新时排除自身）
     * @return int 存在的数量
     * @author yslg
     * @since 2025-10-15
     */
    int countByUserId(@Param("userId") String userId, @Param("excludeId") String excludeId);

    /**
     * @description 根据用户ID查询积分信息（包含用户基本信息）
     * @param userId 用户ID
     * @return TbUserPoints 用户积分信息
     * @author yslg
     * @since 2025-10-15
     */
    TbUserPoints selectUserPointsWithUser(@Param("userId") String userId);

    /**
     * @description 查询积分排行榜
     * @param limit 限制数量
     * @return List<TbUserPoints> 积分排行榜
     * @author yslg
     * @since 2025-10-15
     */
    List<TbUserPoints> selectPointsRanking(@Param("limit") Integer limit);

    /**
     * @description 插入用户积分
     * @param userPoints 用户积分
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int insertUserPoints(TbUserPoints userPoints);

    /**
     * @description 更新用户积分
     * @param userPoints 用户积分
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int updateUserPoints(TbUserPoints userPoints);

    /**
     * @description 删除用户积分
     * @param userPoints 用户积分
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int deleteUserPoints(TbUserPoints userPoints);

    /**
     * @description 批量插入用户积分
     * @param userPointsList 用户积分列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int batchInsertUserPoints(@Param("userPointsList") List<TbUserPoints> userPointsList);

    /**
     * @description 批量删除用户积分
     * @param ids 积分ID列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int batchDeleteUserPoints(@Param("ids") List<String> ids);

    /**
     * @description 分页查询用户积分
     * @param filter 过滤条件
     * @param pageParam 分页参数
     * @return List<TbUserPoints> 用户积分列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbUserPoints> selectUserPointsPage(@Param("filter") TbUserPoints filter, @Param("pageParam") PageParam pageParam);

    /**
     * @description 统计用户积分总数
     * @param filter 过滤条件
     * @return long 总数
     * @author yslg
     * @since 2025-10-15
     */
    long countUserPoints(@Param("filter") TbUserPoints filter);
}