public ActionResult PostList(int pageIndex, int pageSize, ItemQueryFilter filter) { if (filter == null) { filter = new ItemQueryFilter { MaxPublishAt = DateTimeOffset.Now.AddMonths(1).AsMinutes(), MinPublishAt = DateTimeOffset.Now.AsMinutes(), Status = ItemStatus.Scheduled }; } IPagedResult<PostDto> model = this.postService.GetPosts(1, 5, filter); return this.View(model); }
public IList<CommentDto> GetRecentApprovedComments(int maxNumberOfComments, ItemQueryFilter filters) { IRavenQueryable<PostCommentsCreationDateIndex.ReduceResult> query = this.Session.Query<PostCommentsCreationDateIndex.ReduceResult, PostCommentsCreationDateIndex>(); if (filters != null && filters.Status.HasValue) { query.Where(x => x.Status == filters.Status); } if (filters != null && filters.MinPublishAt.HasValue) { query.Where(x => x.ItemPublishedAt > filters.MaxPublishAt); } if (filters != null && filters.MaxPublishAt.HasValue) { query.Where(x => x.ItemPublishedAt < filters.MaxPublishAt); } List<PostCommentsCreationDateIndex.ReduceResult> data = query.ThenByDescending(x => x.CreatedAt) .AsProjection<PostCommentsCreationDateIndex.ReduceResult>() .Take(maxNumberOfComments) .ToList(); IList<CommentDto> list = new List<CommentDto>(); foreach (PostCommentsCreationDateIndex.ReduceResult commentIdentifier in data) { ItemComments comments = this.Session.Load<ItemComments>(commentIdentifier.PostCommentsId); Comment comment = comments.Approved.FirstOrDefault(x => x.Id == commentIdentifier.CommentId); Item item = this.Session.Load<Post>(commentIdentifier.ItemId); CommentDto c = comment.MapTo<CommentDto>(); c.ItemInfo = item.MapTo<ItemBaseInfo>(); list.Add(c); } return list; }
public IPagedResult<PageDto> GetPages(int pageIndex, int pageSize, ItemQueryFilter filters) { if (pageIndex < 1) { throw new ArgumentException("The page index must be greater than 0", "pageIndex"); } if (pageSize < 1) { throw new ArgumentException("The page size must be greater than 0", "pageSize"); } if (filters == null) { filters = new ItemQueryFilter(); filters.MaxPublishAt = DateTime.Now; filters.Status = ItemStatus.Published; } CancelEventArgsWithOneParameter<Tuple<int, int, ItemQueryFilter>, IPagedResult<PageDto>> e = new CancelEventArgsWithOneParameter<Tuple<int, int, ItemQueryFilter>, IPagedResult<PageDto>>(new Tuple<int, int, ItemQueryFilter>(pageIndex, pageSize, filters), null); this.PagesRetrievingWithFilters.Raise(this, e); if (e.Cancel) { this.logger.DebugAsync("The result of the method 'GetPages' is overridden by the event 'PagesRetrievingWithFilters'."); return e.Result; } IPagedResult<PageDto> result = this.pageDataService.GetPages(pageIndex, pageSize, filters); this.PagesRetrievedWithFilters.Raise(this, new GenericEventArgs<IPagedResult<PageDto>>(result)); return result; }
public IPagedResult<PageDto> GetPages(int pageIndex, int pageSize, ItemQueryFilter filter) { if (pageIndex < 1) { throw new ArgumentException("The page index must be greater than 0", "pageIndex"); } if (pageSize < 1) { throw new ArgumentException("The page size must be greater than 0", "pageSize"); } RavenQueryStatistics stats; return this.Session.Query<Page>() .Statistics(out stats) .ApplyFilterItem(filter) .OrderByDescending(post => post.PublishAt) .ToPagedResult<Page, PageDto>(pageIndex, pageSize, stats); }
public IPagedResult<PostDto> Search(string term, int pageIndex, int pageSize, ItemQueryFilter filters) { RavenQueryStatistics stats; return this.Session.Query<PostFullTextIndex.ReduceResult, PostFullTextIndex>() .Customize(x => x.Highlight("SearchQuery", 128, 1, "Results")) .Search(x => x.SearchQuery, term) .OrderByDescending(post => post.PublishDate) .Statistics(out stats) .As<Post>() .ApplyFilterItem(filters) .ToPagedResult<Post, PostDto>(pageIndex, pageSize, stats); }
public IPagedResult<PostDto> GetPostsByTag(int pageIndex, int pageSize, string tag, ItemQueryFilter filters) { if (pageIndex < 1) { throw new ArgumentException("The page index must be greater than 0", "pageIndex"); } if (pageSize < 1) { throw new ArgumentException("The page size must be greater than 0", "pageSize"); } if (string.IsNullOrEmpty(tag)) { throw new ArgumentException("The tag must contains a valid value.", "tag"); } RavenQueryStatistics stats; return this.Session.Query<Post>() .Statistics(out stats) .ApplyFilterItem(filters) .Where(post => post.Tags.Any(postTag => postTag == tag)) .OrderByDescending(post => post.PublishAt) .ToPagedResult<Post, PostDto>(pageIndex, pageSize, stats); }
public IPagedResult<PostDto> GetPostsByDate(int pageIndex, int pageSize, int year, int? month, int? day, ItemQueryFilter filters) { if (pageIndex < 1) { throw new ArgumentException("The page index must be greater than 0", "pageIndex"); } if (pageSize < 1) { throw new ArgumentException("The page size must be greater than 0", "pageSize"); } if (year < 1700) { throw new ArgumentException("The year value must be greater than 1700. Internet did not exist in 1700!", "year"); } if (month.HasValue && (month.Value < 1 || month.Value > 12)) { throw new ArgumentException("The month value must be greater than 0 and lesser than 12", "month"); } if (day.HasValue && (day.Value < 1 || day.Value > 31)) { throw new ArgumentException("The day value must be greater than 0 and lesser than 31", "month"); } RavenQueryStatistics stats; IQueryable<Post> query = this.Session.Query<Post>() .Statistics(out stats) .Where(post => post.PublishAt.Year == year) .ApplyFilterItem(filters); if (month.HasValue) { query = query.Where(post => post.PublishAt.Month == month.Value); } if (day.HasValue) { query = query.Where(post => post.PublishAt.Day == day.Value); } return query .OrderByDescending(post => post.PublishAt) .ToPagedResult<Post, PostDto>(pageIndex, pageSize, stats); }
public IPagedResult<PostDto> GetPostsByCategory(int pageIndex, int pageSize, string categoryName, ItemQueryFilter filters) { if (pageIndex < 1) { throw new ArgumentException("The page index must be greater than 0.", "pageIndex"); } if (pageSize < 1) { throw new ArgumentException("The page size must be greater than 0.", "pageSize"); } if (string.IsNullOrEmpty(categoryName)) { throw new ArgumentException("The category name must contains a valid value.", "categoryName"); } RavenQueryStatistics stats; return this.Session.Query<Post>() .Statistics(out stats) .ApplyFilterItem(filters) .Where(post => post.Categories.Any(postCategory => postCategory == categoryName)) .OrderByDescending(post => post.PublishAt) .ToPagedResult<Post, PostDto>(pageIndex, pageSize, stats); }