225 lines
7.5 KiB
C#
225 lines
7.5 KiB
C#
using FreeSql;
|
|
using LiveForum.IService.Messages;
|
|
using LiveForum.Model;
|
|
using LiveForum.Model.Events;
|
|
using Microsoft.Extensions.Logging;
|
|
using System;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace LiveForum.Service.Messages
|
|
{
|
|
/// <summary>
|
|
/// 消息发布器实现
|
|
/// 轻量级门面,只负责构造事件并发布到队列,不查询数据库
|
|
/// </summary>
|
|
public class MessagePublisher : IMessagePublisher
|
|
{
|
|
private readonly IMessageEventBus _eventBus;
|
|
private readonly IBaseRepository<T_Messages> _messagesRepository;
|
|
private readonly ILogger<MessagePublisher> _logger;
|
|
|
|
public MessagePublisher(
|
|
IMessageEventBus eventBus,
|
|
IBaseRepository<T_Messages> messagesRepository,
|
|
ILogger<MessagePublisher> logger)
|
|
{
|
|
_eventBus = eventBus;
|
|
_messagesRepository = messagesRepository;
|
|
_logger = logger;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 发送系统消息(直接写入数据库,不走队列)
|
|
/// </summary>
|
|
public async Task SendSystemMessageAsync(long receiverId, string title, string content)
|
|
{
|
|
try
|
|
{
|
|
var message = new T_Messages
|
|
{
|
|
ReceiverId = receiverId,
|
|
SenderId = null, // 系统消息没有发送者
|
|
MessageType = 3, // 系统消息
|
|
MessageTitle = title,
|
|
MessageContent = content,
|
|
ContentType = 0,
|
|
ContentId = null,
|
|
IsRead = false,
|
|
CreatedAt = DateTime.Now
|
|
};
|
|
|
|
await _messagesRepository.InsertAsync(message);
|
|
|
|
_logger.LogInformation(
|
|
"[MessagePublisher] 系统消息已创建: ReceiverId={ReceiverId}, Title={Title}",
|
|
receiverId, title);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex,
|
|
"[MessagePublisher] 发送系统消息失败: ReceiverId={ReceiverId}",
|
|
receiverId);
|
|
throw;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 发送回复消息(完整版)
|
|
/// </summary>
|
|
public async Task SendReplyMessageAsync(
|
|
long triggerId,
|
|
long receiverId,
|
|
long commentId,
|
|
string commentContent,
|
|
long postId,
|
|
string postTitle,
|
|
long? parentCommentId = null,
|
|
string myCommentContent = null)
|
|
{
|
|
try
|
|
{
|
|
var evt = new CommentReplyEvent
|
|
{
|
|
TriggerId = triggerId,
|
|
ReceiverId = receiverId,
|
|
CommentId = commentId,
|
|
CommentContent = commentContent,
|
|
PostId = postId,
|
|
PostTitle = postTitle,
|
|
ParentCommentId = parentCommentId,
|
|
MyCommentContent = myCommentContent,
|
|
IsDirectComment = !parentCommentId.HasValue
|
|
};
|
|
|
|
await _eventBus.PublishAsync(evt);
|
|
|
|
_logger.LogInformation(
|
|
"[MessagePublisher] 回复消息事件已发布: EventId={EventId}, ReceiverId={ReceiverId}, CommentId={CommentId}",
|
|
evt.EventId, receiverId, commentId);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex,
|
|
"[MessagePublisher] 发送回复消息失败: TriggerId={TriggerId}, ReceiverId={ReceiverId}",
|
|
triggerId, receiverId);
|
|
throw;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 发送回复消息(简化版)
|
|
/// </summary>
|
|
public async Task SendReplyMessageSimpleAsync(
|
|
long triggerId,
|
|
long receiverId,
|
|
string title,
|
|
string content,
|
|
string myCommentContent = null)
|
|
{
|
|
try
|
|
{
|
|
var evt = new CustomMessageEvent
|
|
{
|
|
TriggerId = triggerId,
|
|
ReceiverId = receiverId,
|
|
MessageType = 1, // 回复消息
|
|
Title = title,
|
|
Content = content,
|
|
MyCommentContent = myCommentContent
|
|
};
|
|
|
|
await _eventBus.PublishAsync(evt);
|
|
|
|
_logger.LogInformation(
|
|
"[MessagePublisher] 自定义回复消息事件已发布: EventId={EventId}, ReceiverId={ReceiverId}",
|
|
evt.EventId, receiverId);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex,
|
|
"[MessagePublisher] 发送简化回复消息失败: TriggerId={TriggerId}, ReceiverId={ReceiverId}",
|
|
triggerId, receiverId);
|
|
throw;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 发送点赞消息(完整版)
|
|
/// </summary>
|
|
public async Task SendLikeMessageAsync(
|
|
long triggerId,
|
|
long receiverId,
|
|
byte contentType,
|
|
long contentId,
|
|
string postTitle = null,
|
|
string commentContent = null)
|
|
{
|
|
try
|
|
{
|
|
var evt = new LikeEvent
|
|
{
|
|
TriggerId = triggerId,
|
|
ReceiverId = receiverId,
|
|
ContentType = contentType,
|
|
ContentId = contentId,
|
|
Content = new ContentSnapshot
|
|
{
|
|
PostTitle = postTitle,
|
|
CommentContent = commentContent
|
|
}
|
|
};
|
|
|
|
await _eventBus.PublishAsync(evt);
|
|
|
|
_logger.LogInformation(
|
|
"[MessagePublisher] 点赞消息事件已发布: EventId={EventId}, ReceiverId={ReceiverId}, ContentType={ContentType}, ContentId={ContentId}",
|
|
evt.EventId, receiverId, contentType, contentId);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex,
|
|
"[MessagePublisher] 发送点赞消息失败: TriggerId={TriggerId}, ReceiverId={ReceiverId}",
|
|
triggerId, receiverId);
|
|
throw;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 发送点赞消息(简化版)
|
|
/// </summary>
|
|
public async Task SendLikeMessageSimpleAsync(
|
|
long triggerId,
|
|
long receiverId,
|
|
string title,
|
|
string content)
|
|
{
|
|
try
|
|
{
|
|
var evt = new CustomMessageEvent
|
|
{
|
|
TriggerId = triggerId,
|
|
ReceiverId = receiverId,
|
|
MessageType = 2, // 点赞消息
|
|
Title = title,
|
|
Content = content,
|
|
MyCommentContent = null
|
|
};
|
|
|
|
await _eventBus.PublishAsync(evt);
|
|
|
|
_logger.LogInformation(
|
|
"[MessagePublisher] 自定义点赞消息事件已发布: EventId={EventId}, ReceiverId={ReceiverId}",
|
|
evt.EventId, receiverId);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex,
|
|
"[MessagePublisher] 发送简化点赞消息失败: TriggerId={TriggerId}, ReceiverId={ReceiverId}",
|
|
triggerId, receiverId);
|
|
throw;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|