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 { /// /// 消息发布器实现 /// 轻量级门面,只负责构造事件并发布到队列,不查询数据库 /// public class MessagePublisher : IMessagePublisher { private readonly IMessageEventBus _eventBus; private readonly IBaseRepository _messagesRepository; private readonly ILogger _logger; public MessagePublisher( IMessageEventBus eventBus, IBaseRepository messagesRepository, ILogger logger) { _eventBus = eventBus; _messagesRepository = messagesRepository; _logger = logger; } /// /// 发送系统消息(直接写入数据库,不走队列) /// 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; } } /// /// 发送回复消息(完整版) /// 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; } } /// /// 发送回复消息(简化版) /// 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; } } /// /// 发送点赞消息(完整版) /// 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; } } /// /// 发送点赞消息(简化版) /// 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; } } } }