public async Task <PageList <Message> > GetMessagesForUser(MessagesParam messagesParam)
        {
            var messages = _context.Messages
                           .Include(u => u.Sender)
                           .ThenInclude(p => p.Photos)
                           .Include(u => u.Recipient)
                           .ThenInclude(p => p.Photos).AsQueryable();

            switch (messagesParam.MessageContainer)
            {
            case "Inbox":
                messages = messages.Where(m => m.RecipientId == messagesParam.UserId && m.RecipientDelete == false);
                break;

            case "Outbox":
                messages = messages.Where(m => m.SenderId == messagesParam.UserId && m.SenderDelete == false);
                break;

            default:
                messages = messages.Where(m => m.RecipientId == messagesParam.UserId &&
                                          m.IsRead == false && m.RecipientDelete == false);
                break;
            }

            messages = messages.OrderByDescending(i => i.MessageSent);
            return(await PageList <Message> .CreateAsync(messages, messagesParam.PageNumber, messagesParam.PageSize));
        }
예제 #2
0
        public async Task <PagedList <Message> > GetMessageForUser(MessagesParam messagesParam)
        {
            var messages = _context.Messages
                           // .Include(u => u.Sender)   // Due to the Lazy Loadiing We can remove Include Statement which produce a warning
                           // .ThenInclude(p => p.Photos) // Which is related to paging With Include Statement if we perform Count function then
                           // .Include(u => u.Recipient)  // the Include statement code is unreachable and unesscary which produre warning
                           // .ThenInclude(p => p.Photos)
                           .AsQueryable();

            switch (messagesParam.MessageContainer)
            {
            case "Inbox":
                messages = messages.Where(q => q.RecipientId == messagesParam.UserID && q.RecipientDeleted == false);
                break;

            case "Outbox":
                messages = messages.Where(q => q.SenderId == messagesParam.UserID && q.SenderDeleted == false);
                break;

            default:
                messages = messages.Where(q => q.RecipientId == messagesParam.UserID && q.RecipientDeleted == false && q.IsRead == false);
                break;
            }

            messages = messages.OrderByDescending(q => q.MessageSent);
            return(await PagedList <Message> .CreateAsync(messages, messagesParam.PageNumber, messagesParam.pageSize));
        }
예제 #3
0
        public async Task <IActionResult> GetMessages(int UserId, [FromQuery] MessagesParam messagesParam)
        {
            if (UserId != int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value))
            {
                return(Unauthorized());
            }
            messagesParam.UserID = UserId;

            var messages = await _repo.GetMessageForUser(messagesParam);

            var MessagesToReturn = _mapper.Map <IEnumerable <MessageToReturnDto> >(messages);

            Response.AddPaginationHeader(messages.CurrentPage, messages.PageSize, messages.TotalCount, messages.TotalPages);
            return(Ok(MessagesToReturn));
        }
예제 #4
0
        public async Task <IActionResult> GetMessages(int userId, [FromQuery] MessagesParam messagesParam)
        {
            if (userId != int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value))
            {
                return(Unauthorized());
            }
            messagesParam.UserId = userId;
            var messageFromRepos = await _repos.GetMessagesForUser(messagesParam);

            if (messagesParam == null)
            {
                return(BadRequest("no message found"));
            }
            var messageToReturn = _mapper.Map <IEnumerable <MessageToReturnDto> >(messageFromRepos);

            Response.AddPagination(messageFromRepos.CurrentPage, messageFromRepos.PageSize,
                                   messageFromRepos.TotalItems, messageFromRepos.TotalPages);
            return(Ok(messageToReturn));
        }
예제 #5
0
        public async Task <IActionResult> GetMessagesForUser(int userId,
                                                             [FromQuery] MessagesParam messagesParam)
        {
            if (userId != int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value))
            {
                return(Unauthorized());
            }

            messagesParam.UserId = userId;

            var messagesFromRepo = await datingRepository.GetMessagesForUser(messagesParam);

            var messages = mapper.Map <IEnumerable <MessageToReturnDto> >(messagesFromRepo);

            Response.AddPagination(messagesParam.PageNumber, messagesParam.PageSize,
                                   messagesFromRepo.TotalCount, messagesFromRepo.TotalPages);

            return(Ok(messages));
        }