public async Task <PagedList <Message> > GetMessagesForUser(MessagesQueryParameters messagesParams) { var messages = _context.Messages .Include(m => m.Recipient).ThenInclude(r => r.Photos) .Include(m => m.Sender).ThenInclude(s => s.Photos) .AsQueryable(); messages = messagesParams.MessageContainer switch { "Inbox" => messages.Where(m => m.RecipientId == messagesParams.UserId && !m.RecipientDeleted), "Outbox" => messages.Where(m => m.SenderId == messagesParams.UserId && !m.SenderDeleted), _ => messages.Where(m => m.RecipientId == messagesParams.UserId && !m.RecipientDeleted && !m.IsRead) }; messages = messages.OrderByDescending(m => m.DateSent); return(await PagedList <Message> .CreateAsync(messages, messagesParams.PageNumber, messagesParams.PageSize)); }
public async Task <IActionResult> GetMessages(int userId, [FromQuery] MessagesQueryParameters messagesParams) { var loggedUserId = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value); if (loggedUserId != userId) { return(Unauthorized()); } messagesParams.UserId = userId; var messagesFromRepo = await _repo.GetMessagesForUser(messagesParams); var messages = _mapper.Map <IEnumerable <MessageToReturnDto> >(messagesFromRepo); Response.AddPagination(messagesFromRepo.PageNumber, messagesFromRepo.PageSize, messagesFromRepo.TotalCount, messagesFromRepo.TotalPages); return(Ok(messages)); }