public async Task <PagedList <Conversation> > GetConversations(MessengerFiltersParams filters) { var currentUser = await accountManager.GetCurrentUser(); var conversations = currentUser.MessagesSent.Concat(currentUser.MessagesReceived) .OrderByDescending(m => m.DateSent) .GroupBy(m => new { m.SenderId, m.RecipientId }) .Select(g => { var(message, isCurrentUserRecipient) = (g.First(), g.First().RecipientId == currentUser.Id); var conversation = new Conversation ( new LastMessage(message.SenderId, message.Sender.UserName, message.Text, message.DateSent, message.IsRead, message.SenderId == currentUser.Id), isCurrentUserRecipient ? message.SenderId : message.RecipientId, isCurrentUserRecipient ? message.Sender.UserName : message.Recipient.UserName, isCurrentUserRecipient ? message.Sender.AvatarUrl : message.Recipient.AvatarUrl ); return(conversation); }) .GroupBy(c => c.RecipientId) .Distinct() .Select(g => g.First()); if (!string.IsNullOrEmpty(filters.Username)) { conversations = conversations.Where(c => c.RecipientName.ToLower().Contains(filters.Username.ToLower())); } return(conversations.ToPagedList <Conversation>(filters.PageNumber, filters.PageSize)); }
public async Task <IPagedList <Message> > GetMessagesThread(string recipientId, MessengerFiltersParams filters) { var currentUser = await accountManager.GetCurrentUser(); if (currentUser.Id == recipientId) { throw new NoPermissionsException(ErrorMessages.NotAllowedMessage); } await ReadConversation(currentUser.MessagesReceived, recipientId); return(await unitOfWork.MessageRepository.GetMessagesThread(currentUser.Id, recipientId, (filters.PageNumber, filters.PageSize))); }