添加项目文件。

This commit is contained in:
2026-05-09 17:06:30 +08:00
parent c60f5fe117
commit 720ef957d4
378 changed files with 14843 additions and 0 deletions
@@ -0,0 +1,55 @@
using IM.Commons.IntegrationEvents;
using MassTransit;
using MessageService.Domain.IReposities;
using MessageService.Infrastructure;
namespace MessageService.WebApi.Application.EventHandlers
{
public class ConversationAddHandler : IConsumer<GroupMemberJoinedEvent>,
IConsumer<FriendAddedEvent>
{
private readonly IConversationReposity reposity;
private readonly MessageDbContext messageDb;
public ConversationAddHandler(IConversationReposity reposity, MessageDbContext messageDb)
{
this.reposity = reposity;
this.messageDb = messageDb;
}
public async Task Consume(ConsumeContext<GroupMemberJoinedEvent> context)
{
var @event = context.Message;
reposity.Create(new Domain.Entities.Conversation(
userId: @event.UserId,
targetId: @event.GroupId,
targetAvatar: @event.Avatar,
targetName: @event.GroupNickName,
lastReadSequenceId: null,
unreadCount:0,
chatType: Domain.Enums.ChatType.GROUP,
lastMessage: string.Empty
));
await messageDb.SaveChangesAsync();
}
public async Task Consume(ConsumeContext<FriendAddedEvent> context)
{
var @event = context.Message;
reposity.Create(new Domain.Entities.Conversation(
userId: @event.OwnerId,
targetId: @event.TargetId,
targetAvatar: @event.TargetAvatar,
targetName: @event.TargetNickName,
lastReadSequenceId: null,
unreadCount: 0,
chatType: Domain.Enums.ChatType.PRIVATE,
lastMessage: string.Empty
));
await messageDb.SaveChangesAsync();
}
}
}
@@ -0,0 +1,49 @@
using IM.Commons.IntegrationEvents;
using MassTransit;
using MediatR;
using MessageService.Domain.Events;
using MessageService.Domain.IReposities;
using MessageService.Infrastructure;
namespace MessageService.WebApi.Application.EventHandlers
{
public class MessageHandler : INotificationHandler<MessageCreatedDomainEvent>, INotificationHandler<MessageWithdrawDomainEvent>
{
private readonly IPublishEndpoint endpoint;
private readonly IConversationReposity reposity;
private readonly MessageDbContext messageDb;
public MessageHandler(IPublishEndpoint endpoint, IConversationReposity reposity, MessageDbContext messageDb)
{
this.endpoint = endpoint;
this.reposity = reposity;
this.messageDb = messageDb;
}
public async Task Handle(MessageCreatedDomainEvent notification, CancellationToken cancellationToken)
{
var message = notification.Message;
if(message.ChatType == Domain.Enums.ChatType.PRIVATE)
{
var list = await reposity.FindByStreamKeyAsync(message.StreamKey);
var owner = list.First(x => x.UserId == message.SenderId);
var target = list.First(x => x.UserId == message.TargetId);
owner.Update(message.SequenceId, 0, message.Content.Fallback);
target.Update(target.LastReadSequenceId, target.UnreadCount + 1, message.Content.Fallback);
messageDb.Conversations.UpdateRange(owner,target);
await messageDb.SaveChangesAsync(cancellationToken);
}
await endpoint.Publish(message.ToIntegrationEvent());
}
public async Task Handle(MessageWithdrawDomainEvent notification, CancellationToken cancellationToken)
{
var message = notification.Message;
await endpoint.Publish(new MsgWithdrawEvent(message.Id, message.State.ToString(), message.StreamKey), cancellationToken);
}
}
}
@@ -0,0 +1,30 @@
using IM.Commons.IntegrationEvents;
using MassTransit;
using MessageService.Domain.IReposities;
using MessageService.Infrastructure;
namespace MessageService.WebApi.Application.EventHandlers
{
public class UserProfileUpdateHandler : IConsumer<UserProfileUpdateEvent>
{
private readonly MessageDbContext db;
private readonly IConversationReposity reposity;
public UserProfileUpdateHandler(MessageDbContext db, IConversationReposity reposity)
{
this.db = db;
this.reposity = reposity;
}
public async Task Consume(ConsumeContext<UserProfileUpdateEvent> context)
{
var @event = context.Message;
var conversations = await reposity.FindByTargetIdAsync(@event.UserId);
foreach (var conversation in conversations)
{
conversation.UpdateProfile(@event.NickName, @event.Avatar);
}
await db.SaveChangesAsync();
}
}
}