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.TbPointsRecord;

import java.util.List;

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

    /**
     * @description 查询积分记录列表
     * @param filter 过滤条件
     * @return List<TbPointsRecord> 积分记录列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbPointsRecord> selectPointsRecords(TbPointsRecord filter);

    /**
     * @description 根据用户ID查询积分记录
     * @param userId 用户ID
     * @return List<TbPointsRecord> 积分记录列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbPointsRecord> selectByUserId(@Param("userId") String userId);

    /**
     * @description 根据用户ID和类型查询积分记录
     * @param userId 用户ID
     * @param type 积分类型
     * @return List<TbPointsRecord> 积分记录列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbPointsRecord> selectByUserIdAndType(@Param("userId") String userId, @Param("type") Integer type);

    /**
     * @description 根据用户ID查询积分记录（包含用户基本信息）
     * @param userId 用户ID
     * @return List<TbPointsRecord> 积分记录列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbPointsRecord> selectPointsRecordsWithUser(@Param("userId") String userId);

    /**
     * @description 查询用户积分统计
     * @param userId 用户ID
     * @return TbPointsRecord 积分统计信息
     * @author yslg
     * @since 2025-10-15
     */
    TbPointsRecord selectPointsStatistics(@Param("userId") String userId);

    /**
     * @description 插入积分记录
     * @param pointsRecord 积分记录
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int insertPointsRecord(TbPointsRecord pointsRecord);

    /**
     * @description 更新积分记录
     * @param pointsRecord 积分记录
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int updatePointsRecord(TbPointsRecord pointsRecord);

    /**
     * @description 删除积分记录
     * @param pointsRecord 积分记录
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int deletePointsRecord(TbPointsRecord pointsRecord);

    /**
     * @description 批量插入积分记录
     * @param pointsRecordList 积分记录列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int batchInsertPointsRecords(@Param("pointsRecordList") List<TbPointsRecord> pointsRecordList);

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

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

    /**
     * @description 统计积分记录总数
     * @param filter 过滤条件
     * @return long 总数
     * @author yslg
     * @since 2025-10-15
     */
    long countPointsRecords(@Param("filter") TbPointsRecord filter);
}
