示例#1
0
        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));
        }
示例#2
0
        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));
        }