package com.njcn.msgpush.module.push.dal.mysql.retry;

import com.njcn.msgpush.framework.mybatis.core.mapper.BaseMapperX;
import com.njcn.msgpush.module.push.dal.dataobject.retry.MessageRetryQueueDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;

@Mapper
public interface MessageRetryQueueMapper extends BaseMapperX<MessageRetryQueueDO> {

    /**
     * 查询需要重试的消息列表（按下次重试时间升序）
     *
     * @param currentTime 当前时间
     * @param limit       限制数量
     * @return 待重试消息列表
     */
    List<MessageRetryQueueDO> selectNeedRetryMessages(@Param("channel") String channel,
                                                      @Param("currentTime") LocalDateTime currentTime,
                                                      @Param("limit") int limit);

    int claimRetryMessage(@Param("messageId") Long messageId,
                          @Param("channel") String channel,
                          @Param("currentTime") LocalDateTime currentTime,
                          @Param("lockUntil") LocalDateTime lockUntil);
}
