67 lines
2.4 KiB
C#
67 lines
2.4 KiB
C#
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<MessageCreatedEvent>
|
|
{
|
|
private readonly IConversationService _conversationService;
|
|
private readonly ILogger<ConversationEventHandler> _logger;
|
|
private readonly IUserService _userSerivce;
|
|
private readonly IGroupService _groupService;
|
|
public ConversationEventHandler(
|
|
IConversationService conversationService,
|
|
ILogger<ConversationEventHandler> logger,
|
|
IUserService userService,
|
|
IGroupService groupService
|
|
)
|
|
{
|
|
_conversationService = conversationService;
|
|
_logger = logger;
|
|
_userSerivce = userService;
|
|
_groupService = groupService;
|
|
}
|
|
|
|
public async Task Consume(ConsumeContext<MessageCreatedEvent> 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
|
|
});
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|