49 lines
2.2 KiB
C#
49 lines
2.2 KiB
C#
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<GroupInvitationAcceptDomainEvent>
|
|
, INotificationHandler<GroupInvitationCreateDomainEvent>
|
|
{
|
|
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);
|
|
}
|
|
}
|
|
}
|