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)); }
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)); }