/// <summary> /// Adds a messages and updates client lastMessageId /// </summary> /// <param name="message"></param> /// <param name="chatId"></param> /// <param name="senderId"></param> /// <returns></returns> /// <exception cref="InvalidDataException"></exception> public async Task <MessageDataModel> AddMessage(Message message, int chatId, string senderId) { var whoSent = await usersRepository.GetByIdAsync(senderId); if (whoSent == null) { throw new InvalidDataException( $"Failed to retrieve user with id {senderId} from database: no such user exists"); } MessageDataModel forwardedMessage = null; if (message.Type == MessageType.Forwarded) { if (!await usersConversationsRepository.Exists(senderId, message.ForwardedMessage.ConversationID)) { throw new UnauthorizedAccessException("Forwarded message id is incorrect."); } var foundMessage = await messagesRepository.GetByIdAsync(message.ForwardedMessage.Id); forwardedMessage = foundMessage ?? throw new InvalidDataException("Forwarded message was not found."); } MessageDataModel model = MessageDataModel.Create(whoSent, chatId); if (forwardedMessage != null) { model.AsForwarded(forwardedMessage); } else { model.AsText(message.MessageContent); } var result = await messagesRepository.AddAsync(model); await unitOfWork.Commit(); await SetLastMessage(senderId, chatId, result.MessageID); return(result); }
public async Task <DataResult <Message> > Handle(AddMessageCommand request, CancellationToken cancellationToken) { var message = _mapper.Map <Message>(request); var resultAddMessage = await _messagesRepository.AddAsync(message); if (resultAddMessage.Success) { return(new DataResult <Message>(resultAddMessage.GetData())); } else { return(new DataResult <Message>(success: false)); } }
public async Task <bool> AddAsync(Messages message) { try { await _messagesRepository.AddAsync(message); await _unitOfWork.CompleteAsync(); return(true); } catch (Exception) { return(false); } }