package com.kym.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.kym.entity.Message;
import com.kym.entity.queryParams.MessageQueryParams;
import com.kym.mapper.mybatisplus.MyBaseMapper;
import org.apache.ibatis.annotations.Param;

/**
 * 消息通知 Mapper 接口
 *
 * @author skyline
 * @since 2024-01-15
 */
public interface MessageMapper extends MyBaseMapper<Message> {

    /**
     * 分页查询消息列表
     *
     * @param page   分页参数
     * @param params 查询参数
     * @return 消息列表
     */
    IPage<Message> selectMessagePage(IPage<Message> page, @Param("params") MessageQueryParams params);

    /**
     * 统计未读消息数量
     *
     * @param receiverId 接收者ID
     * @return 未读数量
     */
    int countUnread(@Param("receiverId") Long receiverId);

    /**
     * 按类型统计未读消息数量
     *
     * @param receiverId 接收者ID
     * @param type       消息类型
     * @return 未读数量
     */
    int countUnreadByType(@Param("receiverId") Long receiverId, @Param("type") Integer type);

    /**
     * 批量标记已读
     *
     * @param receiverId 接收者ID
     * @param type       消息类型（可选，为null时标记全部）
     * @return 影响行数
     */
    int batchMarkRead(@Param("receiverId") Long receiverId, @Param("type") Integer type);
}
