using F9WebAiTest.Application.Dtos.Notice;
namespace F9WebAiTest.Application.Services.Notice;
///
/// 消息实时推送器(抽象)。
/// 定义在应用层、实现在 Api 层(依赖 SignalR 的 IHubContext 与在线登记表),
/// 避免应用层反向依赖表示层,同时让"创建消息即推送"这一动作可以写在命令处理器里。
///
public interface INotificationPusher
{
///
/// 判断用户当前是否在线。
/// 判定依据:该用户在 SignalR Hub 上是否有活动连接(由 Hub 连接/断开时登记的内存表得出)。
///
bool IsOnline(long userId);
///
/// 推送新消息给指定用户。
/// 返回 true 表示已推送给其在线连接;返回 false 表示用户离线(未推送,消息已落库,上线后从"我的消息"拉取)。
///
Task PushNewMessageAsync(long userId, NotificationMessageDto message, CancellationToken ct = default);
/// 推送未读统计,用于消息角标实时同步(用户离线时无需推送)。
Task PushUnreadCountAsync(long userId, int unreadCount, int todoCount, CancellationToken ct = default);
}