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 GroupRequestPassedHandler : INotificationHandler { private readonly IPublishEndpoint endpoint; private readonly Application.GroupMember.GroupMemberService memberService; private readonly ILogger logger; public GroupRequestPassedHandler(IPublishEndpoint endpoint, GroupMemberService memberService, ILogger logger) { this.endpoint = endpoint; this.memberService = memberService; this.logger = logger; } public async Task Handle(GroupJoinRequestPassedDomainEvent notification, CancellationToken cancellationToken) { var request = notification.Request; var memberCreateRes = await memberService.CreateAsync(request.GroupId, request.UserId); await endpoint.Publish(new GroupRequestPassedEvent(request.Id, request.GroupId, request.GroupProfile.GroupName, request.GroupProfile.Avatar, request.UserId, request.UserProfile.NickName, request.UserProfile.Avatar, request.OperatorId.Value, request.OperatorName, request.OperatorAvatar, request.Description, request.CreationTime, request.ModificationTime.Value)); if (!memberCreateRes.Succeeded) { logger.LogError(memberCreateRes.Message); throw new EventHandlerException(memberCreateRes.Message); } } } }