public async Task <Response> CreateResponseAsync() { if (!await conversationsService.IsUserInConversationAsync(request.ConversationType, request.ConversationId, clientConnection.UserId.Value)) { return(new ResultResponse(request.RequestId, "The user is not in conversation.", ErrorCode.PermissionDenied)); } var nodesIds = await conversationsService.GetConversationNodesIdsAsync(request.ConversationType, request.ConversationId).ConfigureAwait(false); if (nodesIds.Count > 1) { long?dialogUserId = null; if (request.ConversationType == ConversationType.Dialog) { var users = await loadDialogsService.GetDialogUsersAsync(request.ConversationId).ConfigureAwait(false); dialogUserId = users.FirstOrDefault(user => user.Id != clientConnection.UserId).Id; } nodeNoticeService.SendConverationActionNodeNoticeAsync(clientConnection.UserId.Value, dialogUserId, request.ConversationId, request.ConversationType, request.Action, nodesIds); } if (request.Action != ConversationAction.Screenshot) { conversationsNoticeService.SendConversationActionNoticeAsync(clientConnection.UserId.Value, request.ConversationType, request.ConversationId, request.Action); } if (request.ConversationType != ConversationType.Channel && request.Action == ConversationAction.Screenshot) { var systemMessageInfo = SystemMessageInfoFactory.CreateScreenshotMessageInfo(clientConnection.UserId.Value); var message = await systemMessagesService.CreateMessageAsync(request.ConversationType, request.ConversationId, systemMessageInfo).ConfigureAwait(false); conversationsNoticeService.SendSystemMessageNoticeAsync(message); } return(new ResultResponse(request.RequestId)); }
public async Task GetConversationsNodesIds() { var chat = fillTestDbHelper.Chats.FirstOrDefault(); var chatNodesIds = await conversationsService.GetConversationNodesIdsAsync(ConversationType.Chat, chat.Id); Assert.Equal(chat.NodesId, chatNodesIds); }
public async Task HandleAsync() { try { List <long> nodesIds = await conversationsService.GetConversationNodesIdsAsync(request.ConversationType, request.ConversationId).ConfigureAwait(false); if (!nodesIds.Contains(current.Node.Id)) { NodeWebSocketCommunicationManager.SendResponse(new ResultNodeResponse(request.RequestId, ErrorCode.PermissionDenied, "No rights to load messages."), current); return; } List <MessageDto> messages = await loadMessagesService.GetMessagesAsync( request.ConversationId, request.ConversationType, request.Direction.GetValueOrDefault(true), request.MessageId, request.AttachmentsTypes, request.Length).ConfigureAwait(false); MessagesNodeResponse response = new MessagesNodeResponse(request.RequestId, messages); NodeWebSocketCommunicationManager.SendResponse(response, current); } catch (Exception ex) { Logger.WriteLog(ex); NodeWebSocketCommunicationManager.SendResponse(new ResultNodeResponse(request.RequestId, ErrorCode.UnknownError), current); } }
public async Task <MessageDto> CreateMessageAsync(ConversationType conversationType, long conversationId, SystemMessageInfo systemMessageInfo) { List <long> nodesIds = await conversationsService.GetConversationNodesIdsAsync(conversationType, conversationId).ConfigureAwait(false); using (MessengerDbContext context = contextFactory.Create()) { var messageInfoJson = systemMessageInfo.ToJson(); AttachmentDto attachmentDto = new AttachmentDto { Type = AttachmentType.SystemMessage, Payload = messageInfoJson, Hash = GetHash(messageInfoJson) }; MessageDto messageDto = new MessageDto { ConversationId = conversationId, ConversationType = conversationType, Attachments = new List <AttachmentDto> { attachmentDto }, SendingTime = DateTime.UtcNow.ToUnixTime(), GlobalId = Guid.NewGuid(), NodesIds = nodesIds }; Message message = MessageConverter.GetMessage(messageDto); if (conversationType == ConversationType.Dialog) { var mirrorMessage = (MessageDto)messageDto.Clone(); var mirrodDialogId = await loadDialogsService.GetMirrorDialogIdAsync(conversationId); mirrorMessage.ConversationId = mirrodDialogId; await context.Messages.AddAsync(MessageConverter.GetMessage(mirrorMessage)); } await context.Messages.AddAsync(message).ConfigureAwait(false); await context.SaveChangesAsync().ConfigureAwait(false); return(MessageConverter.GetMessageDto(message)); } }