Exemple #1
0
        public async Task <ServerResponse <List <FeedResponse> > > GetFeedsAsync(long appUserId,
                                                                                 FeedFilterRequest feedFilterRequest, Expression <Func <Feed, bool> > accessPredicate)
        {
            return(await BaseInvokeAsync(async() =>
            {
                var query = DbContext.Feeds
                            .AsQueryable()
                            .Where(x => x.AppUserId == appUserId.ToString())
                            .Where(accessPredicate)
                            .AsEnumerable();

                query = FilterFeeds(query, feedFilterRequest);

                query = query.OrderByDescending(x => x.CreateDate);

                if (feedFilterRequest.Offset.HasValue)
                {
                    query = query.Skip(feedFilterRequest.Offset.Value);
                }

                if (feedFilterRequest.Limit.HasValue)
                {
                    query = query.Take(feedFilterRequest.Limit.Value);
                }

                return ServerResponseBuilder.Build(await query.ToAsyncEnumerable()
                                                   .Select(x => Mapper.Map <Feed, FeedResponse>(x))
                                                   .ToListAsync());
            }));
        }
Exemple #2
0
        private IEnumerable <Feed> FilterFeeds(IEnumerable <Feed> query, FeedFilterRequest feedFilterRequest)
        {
            if (feedFilterRequest.TagIds.Any())
            {
                query = query.Where(x => x.Tags.Any(tag => feedFilterRequest.TagIds.Any(t => t == tag.Id)));
            }

            return(query);
        }