public async Task <ArticleModel[]> GetAsync(Option <string> viewingUserId, GetArticlesModel request)
        {
            var articlesQueryable = AllArticlesQueryable;

            request.Tag.MatchSome(tagFilter =>
                                  articlesQueryable = articlesQueryable.Where(a => a.TagList.Any(at => at.Tag.Name == tagFilter)));

            request.Author.MatchSome(authorFilter =>
                                     articlesQueryable = articlesQueryable.Where(a => a.Author.UserName == authorFilter));

            request.Favorited.MatchSome(favoritedFilter =>
                                        articlesQueryable = articlesQueryable.Where(a => a.Favorites.Any(af => af.User.UserName == favoritedFilter)));

            articlesQueryable = articlesQueryable
                                .Skip(request.Offset)
                                .Take(request.Limit);

            var articles = await articlesQueryable.ToArrayAsync();

            return(await ToArticleModelsAsync(viewingUserId, articles));
        }
예제 #2
0
        public async Task <IActionResult> Get(GetArticlesModel request)
        {
            var articles = await _articlesService.GetAsync(CurrentUserId.SomeNotNull(), request);

            return(Ok(new { articles, articlesCount = articles.Length }));
        }