Esempio n. 1
0
        public IEnumerable <News> Find(NewsFindFilter filterModel)
        {
            if (filterModel == null)
            {
                throw new ArgumentNullException(nameof(filterModel));
            }

            if (filterModel.Count <= 0)
            {
                return(Enumerable.Empty <News>());
            }

            var filter = PredicateBuilder.New <News>(n => true);

            if (filterModel.MainCategories != null)
            {
                filter = filter.And(n => filterModel.MainCategories.Contains(n.Category.Title));
            }

            if (filterModel.SubCategories != null)
            {
                filter = filter.And(n => filterModel.SubCategories.Any(c => n.Category.SubCategories.Contains(c)));
            }

            if (filterModel.Sources != null)
            {
                filter = filter.And(n => filterModel.Sources.Contains(n.Source.SiteTitle));
            }

            if (filterModel.KeyWord != null)
            {
                filter = filter.And(n => n.Title.Contains(filterModel.KeyWord) || n.Text.Contains(filterModel.KeyWord));
            }

            if (filterModel.From != null)
            {
                filter = filter.And(n => n.CreatedDate >= filterModel.From);
            }

            if (filterModel.To != null)
            {
                filter = filter.And(n => n.CreatedDate <= filterModel.To);
            }

            var news = _newsRepository.Read(filter)
                       .OrderByDescending(n => n.CreatedDate)
                       .Skip(filterModel.Skip)
                       .Take(filterModel.Count)
                       .ToList();

            return(news);
        }
Esempio n. 2
0
        public IActionResult Search([FromQuery] NewsFindFilter filter)
        {
            var news = _newsService.Find(filter);

            return(Ok(news));
        }