using AutoMapper; using IM_API.Application.Interfaces; using IM_API.Domain.Events; using IM_API.Dtos; using IM_API.Exceptions; using IM_API.Interface.Services; using IM_API.Models; using IM_API.Services; using IM_API.Tools; using MassTransit; using Microsoft.EntityFrameworkCore; using Newtonsoft.Json; namespace IM_API.Application.EventHandlers.MessageCreatedHandler { public class ConversationEventHandler : IConsumer { private readonly IConversationService _conversationService; private readonly ILogger _logger; private readonly IUserService _userSerivce; private readonly IGroupService _groupService; public ConversationEventHandler( IConversationService conversationService, ILogger logger, IUserService userService, IGroupService groupService ) { _conversationService = conversationService; _logger = logger; _userSerivce = userService; _groupService = groupService; } public async Task Consume(ConsumeContext context) { var @event = context.Message; if (@event.ChatType == ChatType.GROUP) { var userinfo = await _userSerivce.GetUserInfoAsync(@event.MsgSenderId); await _groupService.UpdateGroupConversationAsync(new Dtos.Group.GroupUpdateConversationDto { GroupId = @event.MsgRecipientId, LastMessage = @event.MessageContent, LastSenderName = userinfo.NickName, LastUpdateTime = @event.MessageCreated, MaxSequenceId = @event.SequenceId }); } else { await _conversationService.UpdateConversationAfterSentAsync(new Dtos.Conversation.UpdateConversationDto { LastMessage = @event.MessageContent, LastSequenceId = @event.SequenceId, ReceiptId = @event.MsgRecipientId, SenderId = @event.MsgSenderId, StreamKey = @event.StreamKey, DateTime = @event.MessageCreated }); } } } }