package com.fs.live.mapper;

import com.fs.common.annotation.DataSource;
import com.fs.common.enums.DataSourceType;
import com.fs.live.domain.LiveCompletionPointsRecord;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 直播完课积分记录Mapper接口
 */
public interface LiveCompletionPointsRecordMapper {

    /**
     * 插入完课积分记录
     */
    int insertRecord(LiveCompletionPointsRecord record);

    /**
     * 更新完课积分记录
     */
    int updateRecord(LiveCompletionPointsRecord record);

    /**
     * 查询用户某天的完课记录
     */
    LiveCompletionPointsRecord selectByUserAndDate(@Param("liveId") Long liveId,
                                                     @Param("userId") Long userId,
                                                     @Param("currentDate") Date currentDate);

    /**
     * 查询用户最近一次完课记录（不限直播间，用于计算连续天数）
     */
    LiveCompletionPointsRecord selectLatestByUser(@Param("userId") Long userId);

    /**
     * 查询用户在某直播间最近一次完课记录（不限制日期）
     */
    @DataSource(DataSourceType.SLAVE)
    LiveCompletionPointsRecord selectLatestByUserAndLiveId(@Param("liveId") Long liveId,
                                                            @Param("userId") Long userId);

    /**
     * 查询用户未领取的完课记录列表
     */
    List<LiveCompletionPointsRecord> selectUnreceivedByUser(@Param("liveId") Long liveId,
                                                             @Param("userId") Long userId);

    /**
     * 查询用户的完课积分领取记录列表
     */
    List<LiveCompletionPointsRecord> selectRecordsByUser(@Param("liveId") Long liveId,
                                                          @Param("userId") Long userId);

    /**
     * 根据ID查询
     */
    LiveCompletionPointsRecord selectById(@Param("id") Long id);
}
