public async Task <ActionResult> GetArticles([FromQuery] PaginationInputModel pagination)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var user = (User)HttpContext.Items["user"];

            var articles = await _context.Subscriptions
                           .Include(sub => sub.Publisher)
                           .ThenInclude(pub => pub.Articles)
                           .Where(sub => sub.UserId == user.Id)
                           .SelectMany(sub => sub.Publisher.Articles)
                           .OrderByDescending(article => article.PublishedAt)
                           .Paginate(pagination)
                           .ToListAsync();

            var models = articles.Select(article => new ArticleViewModel()
            {
                Title       = article.Title,
                Url         = article.Url,
                UrlToImage  = article.UrlToImage,
                PublishedAt = article.PublishedAt,
                PublisherId = article.PublisherId,
                Description = article.Description
            }).ToList();

            return(Ok(new { models.Count, articles = models }));
        }
Exemplo n.º 2
0
 public static IQueryable <T> Paginate <T>(this IOrderedQueryable <T> queryable, PaginationInputModel pagination)
 {
     return(queryable.Skip(pagination.Offset).Take(pagination.Size));
 }