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); }
// 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)); }
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)); }