示例#1
0
        /// <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);
        }
示例#2
0
        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));
            }
        }
示例#3
0
        public async Task <bool> AddAsync(Messages message)
        {
            try
            {
                await _messagesRepository.AddAsync(message);

                await _unitOfWork.CompleteAsync();

                return(true);
            }
            catch (Exception)
            {
                return(false);
            }
        }