using GroupService.Domain.Events; using GroupService.WebApi.Application.GroupMember; using IM.Commons; using IM.Commons.IntegrationEvents; using MassTransit; using MediatR; namespace GroupService.WebApi.Application.EventHandler { public class GroupInvitationEventHandler : INotificationHandler , INotificationHandler { private readonly IPublishEndpoint endpoint; private readonly GroupMemberService memberService; public GroupInvitationEventHandler(IPublishEndpoint endpoint, GroupMemberService memberService) { this.endpoint = endpoint; this.memberService = memberService; } public async Task Handle(GroupInvitationAcceptDomainEvent notification, CancellationToken cancellationToken) { var invitation = notification.Invitation; // 邀请接受 → 直接加入群聊,不走入群申请审批流程 var res = await memberService.CreateAsync(invitation.GroupId, invitation.UserId); await endpoint.Publish(new GroupInvitationAcceptEvent(invitation.Id, invitation.UserId, invitation.UserProfile.NickName, invitation.UserProfile.Avatar , invitation.GroupId, invitation.GroupProfile.GroupName, invitation.GroupProfile.Avatar, invitation.OperatorId , invitation.OperatorProfile.NickName, invitation.OperatorProfile.Avatar ), cancellationToken); if (!res.Succeeded) { throw new EventHandlerException(res.Message); } } public async Task Handle(GroupInvitationCreateDomainEvent notification, CancellationToken cancellationToken) { var invitation = notification.Invitation; await endpoint.Publish(new GroupInvitationCreateEvent(invitation.Id, invitation.UserId, invitation.UserProfile.NickName, invitation.UserProfile.Avatar , invitation.GroupId, invitation.GroupProfile.GroupName, invitation.GroupProfile.Avatar, invitation.OperatorId , invitation.OperatorProfile.NickName, invitation.OperatorProfile.Avatar), cancellationToken); } } }