Пример #1
0
        public IActionResult Archive(int page, [FromQuery] SearchModel data)
        {
            if (page == 0)
            {
                page = 1;
            }

            ArticleSearchType searchType = 0;

            if (data.SearchTitle)
            {
                searchType = searchType | ArticleSearchType.Name;
            }
            if (data.SearchLead)
            {
                searchType = searchType | ArticleSearchType.Lead;
            }
            if (data.SearchContent)
            {
                searchType = searchType | ArticleSearchType.Content;
            }



            ArticleServiceOptions options = new ArticleServiceOptions
            {
                Offset        = (page - 1) * ARCHIVE_LIMIT,
                Limit         = ARCHIVE_LIMIT,
                ArticleType   = ArticleType.Published,
                IncludeAuthor = true,
                SearchType    = searchType,
                SearchString  = data.Search,
                DateStart     = data.DateStart,
                DateEnd       = data.DateEnd
            };

            if (options.DateStart.HasValue && options.DateEnd.HasValue && options.DateStart.Value > options.DateEnd.Value)
            {
                ModelState.AddModelError("DateStart", "Kezdődátum nem lehet nagyobb a végdátumnál");
                ModelState.AddModelError("DateEnd", "Kezdődátum nem lehet nagyobb a végdátumnál");

                var vm = new ArchivePageViewModel
                {
                    Search   = data,
                    Articles = { }
                };
                return(View(vm));
            }

            if (options.DateEnd.HasValue)
            {
                options.DateEnd = options.DateEnd.Value.AddDays(1).Date; //Add one day to include DateEnd in search
            }
            if (options.DateStart.HasValue)
            {
                options.DateStart = options.DateStart.Value.Date; //Set DateTime to midnight;
            }


            List <Article> articles = _newsService.GetArticles(options);
            int            count    = _newsService.GetArticleCount(options);

            int pageCount = options.Limit.Value > 0 ? ((count - 1) / options.Limit.Value) + 1 : 1;

            ArchivePageViewModel viewModel = new ArchivePageViewModel
            {
                Search = new SearchModel
                {
                    Limit     = options.Limit ?? 0,
                    Page      = page,
                    PageCount = pageCount,
                    Search    = options.SearchString ?? "",
                    DateStart = options.DateStart,
                    DateEnd   = data.DateEnd,
                },
                Articles = articles.Select(a => new ArticleViewModel(a)).ToList()
            };

            return(View(viewModel));
        }
Пример #2
0
        public async Task <IActionResult> GetArticles(int page, [FromQuery] SearchParameters parameters)
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(Unauthorized());
            }

            if (parameters == null)
            {
                parameters = new SearchParameters();
            }

            if (page == 0)
            {
                page = 1;
            }

            ArticleSearchType searchType = 0;

            if (parameters.SearchTitle)
            {
                searchType = searchType | ArticleSearchType.Name;
            }
            if (parameters.SearchLead)
            {
                searchType = searchType | ArticleSearchType.Lead;
            }
            if (parameters.SearchContent)
            {
                searchType = searchType | ArticleSearchType.Content;
            }


            ArticleApiOptions options = new ArticleApiOptions
            {
                Offset        = (page - 1) * LIST_LIMIT,
                Limit         = LIST_LIMIT,
                ArticleType   = ArticleType.All,
                IncludeAuthor = true,
                SearchType    = searchType,
                SearchString  = parameters.Search,
                DateStart     = parameters.DateStart,
                DateEnd       = parameters.DateEnd
            };

            if (options.DateEnd.HasValue)
            {
                options.DateEnd = options.DateEnd.Value.AddDays(1).Date; //Add one day to include DateEnd in search
            }
            if (options.DateStart.HasValue)
            {
                options.DateStart = options.DateStart.Value.Date; //Set DateTime to midnight;
            }


            //_newsService.GetArticles(options);

            IQueryable <Article> query = _context.Articles;

            query = RestrictArticleType(query, options.ArticleType.Value);
            query = RestrictDate(query, options);
            query = RestrictSearch(query, options);

            if (options.IncludeAuthor.HasValue && options.IncludeAuthor.Value)
            {
                query = query.Include(a => a.Author);
            }

            query = query.Where(a => a.Author == user);


            int count = query.Count();

            query = query.OrderByDescending(a => a.CreatedAt);

            if (options.Offset.HasValue && options.Offset.Value > 0)
            {
                query = query.Skip(options.Offset.Value);
            }

            if (options.Limit.HasValue && options.Limit.Value > 0)
            {
                query = query.Take(options.Limit.Value);
            }

            int pageCount = options.Limit.Value > 0 ? ((count - 1) / options.Limit.Value) + 1 : 1;

            List <ArticleListElemDTO> list = query.Select <Article, ArticleListElemDTO>(x => new ArticleListElemDTO
            {
                Id            = x.Id,
                Name          = x.Name,
                Lead          = x.Lead,
                ImageCount    = x.Images.Count(),
                Author        = x.Author.Name,
                PublishedAt   = x.PublishedAt,
                IsPublished   = x.IsPublished,
                IsHighlighted = x.IsHighlighted,
                HighlightedAt = x.HighlightedAt,
                CreatedAt     = x.CreatedAt
            }
                                                                                        ).ToList();

            ArticleListDTO result = new ArticleListDTO {
                Limit     = options.Limit.Value,
                Page      = page,
                Count     = count,
                PageCount = pageCount,
                Articles  = list
            };

            return(Ok(result));
        }