Пример #1
0
        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));
            }
        }
Пример #2
0
        //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;
            }
        }
Пример #3
0
        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();
        }