Esempio n. 1
0
        public async Task <ActionResult> SendMessageToUser(SendMessageToUserDto sendMessageToUserDto)
        {
            try
            {
                var userId = this.User.Claims.First(c => c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier").Value;
                await _messagesService.SendMessageToUserAsync(sendMessageToUserDto, userId);

                return(Ok(MessageControllerConstants.YouMessageSenddedWithSuccess));
            }
            catch (Exception ex)
            {
                _logger.Error(ex);
                return(StatusCode(StatusCodes.Status500InternalServerError, ex.Message));
            }
        }
Esempio n. 2
0
        public async Task SendMessageToUserAsync(SendMessageToUserDto sendMessageToUserDto, string SenderId)
        {
            User user = null;

            #region find user to send
            if (string.IsNullOrEmpty(sendMessageToUserDto.SendToUserId) && string.IsNullOrEmpty(sendMessageToUserDto.SendToEmail))
            {
                throw new ArgumentException("You need to write userId or email");
            }

            if (!string.IsNullOrEmpty(sendMessageToUserDto.SendToUserId))
            {
                user = await _userManager.FindByIdAsync(sendMessageToUserDto.SendToUserId);

                if (user == null && string.IsNullOrEmpty(sendMessageToUserDto.SendToEmail))
                {
                    throw new ArgumentException("We can't find your user for message");
                }

                if (user == null && !string.IsNullOrEmpty(sendMessageToUserDto.SendToEmail))
                {
                    user = await _userManager.FindByEmailAsync(sendMessageToUserDto.SendToEmail);

                    if (user == null)
                    {
                        throw new ArgumentException("We can't find your user for message");
                    }
                }
            }
            else
            {
                user = await _userManager.FindByEmailAsync(sendMessageToUserDto.SendToEmail);

                if (user == null)
                {
                    throw new ArgumentException("We can't find your user for message");
                }
            }
            #endregion find user to send
            var chatForSend = sendMessageToUserDto.ChatId == null ? null : await _unitOfWork.ChatRepository.GetChatByIdWithAllIncludes(sendMessageToUserDto.ChatId.Value);

            if (chatForSend != null && chatForSend.Public && ChatContainUser(user, chatForSend).Value)
            {
                await SendMessageToChatAsync(
                    new SendMessageToChatDto
                {
                    ChatId  = chatForSend.Id,
                    Message = sendMessageToUserDto.Message
                },
                    SenderId
                    );

                return;
            }

            if (chatForSend != null && !chatForSend.Public && ChatContainUser(SenderId, chatForSend).Value&& ChatContainUser(user, chatForSend).Value)
            {
                await SendMessageToChatAsync(
                    new SendMessageToChatDto
                {
                    ChatId  = chatForSend.Id,
                    Message = sendMessageToUserDto.Message
                },
                    SenderId
                    );

                return;
            }
            chatForSend = _unitOfWork.ChatRepository.Find(ch => ch.DefaultChat && ch.Public == sendMessageToUserDto.PublicSend && (ch.UserChats.Any(uch => uch.UserId == SenderId)) && (ch.UserChats.Any(uch => uch.UserId == user.Id))).FirstOrDefault();

            if (chatForSend != null)
            {
                await SendMessageToChatAsync(
                    new SendMessageToChatDto
                {
                    ChatId  = chatForSend.Id,
                    Message = sendMessageToUserDto.Message
                },
                    SenderId
                    );

                return;
            }
            else
            {
                //create new default  chat with this users
                //add users and send message
                chatForSend = await CreateDefaultChat(sendMessageToUserDto.PublicSend, SenderId, user);

                await SendMessageToChatAsync(
                    new SendMessageToChatDto
                {
                    ChatId  = chatForSend.Id,
                    Message = sendMessageToUserDto.Message
                },
                    SenderId
                    );

                return;
            }
        }