public async Task <(ChatDetailsViewModel chatDetails, List <MessageItemViewModel> messages)> GetChatMessagesAsync(int chatId)
        {
            var chat = await _repository.GetByIdAsync(chatId);

            if (chat == null)
            {
                throw new AwroNoreException("Chat not found");
            }

            var details = new ChatDetailsViewModel
            {
                Doctor        = chat.ServiceSupply.Person.FullName,
                DoctorAvatar  = chat.ServiceSupply.Person.RealAvatar,
                Person        = chat.Person.FullName,
                PersonAvatar  = chat.Person.RealAvatar,
                MessagesCount = chat.ConsultancyMessages.Count,
                Date          = chat.CreatedAt.ToString("yyyy-MM-dd HH:mm"),
                Status        = chat.Status
            };

            var messages = await _messageRepository.Table.Where(x => x.ConsultancyId == chatId).OrderBy(x => x.CreatedAt).Select(x => new MessageItemViewModel
            {
                Doctor       = x.ServiceSupply.Person.FullName,
                Person       = x.Person.FullName,
                Time         = x.CreatedAt.ToString("yyyy-MM-dd HH:mm"),
                DoctorAvatar = x.ServiceSupply.Person.RealAvatar,
                PersonAvatar = x.Person.RealAvatar,
                Content      = x.Content,
                Sender       = x.Sender,
                Status       = x.Status,
                Type         = x.Type
            }).ToListAsync();

            return(details, messages);
        }
Example #2
0
        // GET: Chats/Details/5
        public async Task <ActionResult> Details(string id, string onlyShowUser, bool hideParticipantNames, string newestMessageTimestamp)
        {
            var chat = await _storeRepository.GetChat(id);

            var messageTimes = chat.Messages.Select(o => o.Time).ToList();

            //filter on message time if defined
            var newestMessageTimestampAsDate = DateTime.UtcNow;

            if (!string.IsNullOrEmpty(newestMessageTimestamp))
            {
                newestMessageTimestampAsDate = Convert.ToDateTime(newestMessageTimestamp);
            }

            if (!string.IsNullOrEmpty(newestMessageTimestamp))
            {
                chat.Messages = chat.Messages.Where(o => o.Time <= newestMessageTimestampAsDate).ToList();
            }

            //filter on user if defined
            if (!string.IsNullOrEmpty(onlyShowUser))
            {
                chat.Messages = chat.Messages
                                .Where(o => o.UserId.ToLower() == onlyShowUser.ToLower())
                                .ToList();
            }

            //if hideParticipantNames, replace names with user numbers
            if (hideParticipantNames)
            {
                for (int i = 1; i <= chat.Participants.Count; i++)
                {
                    var originalName = chat.Participants[i - 1];
                    var newName      = $"User {i.ToString()}";
                    foreach (var message in chat.Messages.Where(o => o.UserId == originalName))
                    {
                        message.UserId = newName;
                    }
                }
            }

            var vm = new ChatDetailsViewModel()
            {
                Chat                   = chat,
                MessageTimes           = messageTimes,
                HideParticipantNames   = hideParticipantNames,
                OnlyShowUser           = onlyShowUser,
                NewestMessageTimestamp = newestMessageTimestampAsDate
            };

            return(View(vm));
        }
Example #3
0
        public IActionResult Chat(string receiverId)
        {
            var senderId = this.User.FindFirstValue(ClaimTypes.NameIdentifier);
            var messages = this.messagesService.GetAllMessagesBySenderAndReceiverId(senderId, receiverId);

            var viewModel = new ChatDetailsViewModel()
            {
                ReceiverId = receiverId,
                SenderId   = senderId,
                Messages   = messages,
            };

            var receiverUserName = this.usersService.GetUsernameById(receiverId);

            this.ViewData["ReceiverName"] = receiverUserName;

            return(this.View(viewModel));
        }