public async Task <ActionResult> SendMessageToChat(SendMessageToChatDto sendMessageDto) { try { var userId = this.User.Claims.First(c => c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier").Value; await _messagesService.SendMessageToChatAsync(sendMessageDto, userId); return(Ok(MessageControllerConstants.YouMessageSenddedWithSuccess)); } catch (Exception ex) { _logger.Error(ex); return(StatusCode(StatusCodes.Status500InternalServerError, ex.Message)); } }
//ManualTested public async Task SendMessageToChatAsync(SendMessageToChatDto sendMessageToChat, string SenderId) { using (var transaction = await _unitOfWork.BeginTransactionAsync()) { var chatWhereWeSendMessage = await _unitOfWork.ChatRepository?.GetChatByIdWithAllIncludes(sendMessageToChat.ChatId); if (chatWhereWeSendMessage == null) { throw new ArgumentException("Chat doesn't exist"); } if (chatWhereWeSendMessage.Public) { var senderInChat = chatWhereWeSendMessage.UserChats?.Where(uch => uch.UserId == SenderId).FirstOrDefault(); if (senderInChat == null) { await _unitOfWork.UserChatRepository.AddAsync( new UserChat { ChatId = chatWhereWeSendMessage.Id, UserId = SenderId }); await _unitOfWork.CommitAsync(); } await AttachMessageToChat(sendMessageToChat, SenderId, chatWhereWeSendMessage); } if (!chatWhereWeSendMessage.Public) { var senderInChat = chatWhereWeSendMessage.UserChats?.Where(uch => uch.UserId == SenderId).FirstOrDefault(); if (senderInChat == null) { throw new ArgumentException("You are not in this chat"); } await AttachMessageToChat(sendMessageToChat, SenderId, chatWhereWeSendMessage); } //await _unitOfWork.CommitAsync(); await transaction.CommitAsync(); return; } }
private async Task AttachMessageToChat(SendMessageToChatDto sendMessageToChat, string SenderId, Contracts.Entity.Chat chatWhereWeSendMessage) { var message = await _unitOfWork.MessageRepository?.AddAsync( new Message { SenderId = SenderId, MessageData = sendMessageToChat.Message, DeletedForAll = false, DeletedForSender = false, }); await _unitOfWork.CommitAsync(); await _unitOfWork.ChatMessageRepository?.AddAsync( new ChatMessage { ChatId = chatWhereWeSendMessage.Id, MessageId = message.Id, DateSend = DateTime.UtcNow }); await _unitOfWork.CommitAsync(); }