public async Task <PagedPostResult> GetPosts( string blogId, string category, bool includeUnpublished, int pageNumber, int pageSize, CancellationToken cancellationToken = default(CancellationToken) ) { cancellationToken.ThrowIfCancellationRequested(); var posts = await GetAllPosts(blogId, cancellationToken).ConfigureAwait(false); var totalPosts = posts.Count; if (!string.IsNullOrEmpty(category)) { posts = posts.Where(p => (includeUnpublished || (p.IsPublished && p.PubDate <= DateTime.UtcNow)) && p.Categories.Any( c => string.Equals(c, category, StringComparison.OrdinalIgnoreCase)) ) .OrderByDescending(p => p.PubDate ?? p.LastModified) .ToList <Post>(); totalPosts = posts.Count; } else { posts = posts.Where(p => (includeUnpublished || (p.IsPublished && p.PubDate <= DateTime.UtcNow)) ) .OrderByDescending(p => p.PubDate ?? p.LastModified) .ToList <Post>(); } if (pageSize > 0) { var offset = 0; if (pageNumber > 1) { offset = pageSize * (pageNumber - 1); } posts = posts.Skip(offset).Take(pageSize).ToList <Post>(); } var data = new List <IPost>(); data.AddRange(posts); var result = new PagedPostResult { Data = data, TotalItems = totalPosts }; return(result); }
public async Task <PagedPostResult> GetPosts( string blogId, string category, bool includeUnpublished, int pageNumber, int pageSize, CancellationToken cancellationToken = default(CancellationToken) ) { cancellationToken.ThrowIfCancellationRequested(); int offset = (pageSize * pageNumber) - pageSize; var currentTime = DateTime.UtcNow; var result = new PagedPostResult(); using (var db = _contextFactory.CreateContext()) { var query = db.Posts .Include(p => p.PostComments) .Where(x => x.BlogId == blogId && (includeUnpublished || (x.IsPublished == true && x.PubDate <= currentTime)) && (string.IsNullOrEmpty(category) || x.CategoriesCsv.Contains(category)) ) .OrderByDescending(x => x.PubDate ?? x.LastModified) ; var posts = await query .AsNoTracking() .Skip(offset) .Take(pageSize) .ToListAsync <IPost>(cancellationToken) .ConfigureAwait(false); int totalPosts = await GetCount(blogId, category, includeUnpublished, cancellationToken).ConfigureAwait(false); result.Data = posts; result.TotalItems = totalPosts; return(result); } }
public async Task <PagedPostResult> GetPosts( string blogId, int year, int month = 0, int day = 0, int pageNumber = 1, int pageSize = 10, bool includeUnpublished = false, CancellationToken cancellationToken = default(CancellationToken) ) { cancellationToken.ThrowIfCancellationRequested(); var posts = await GetAllPosts(blogId, cancellationToken).ConfigureAwait(false); var totalItems = posts.Count; if (day > 0 && month > 0) { posts = posts.Where(x => x.PubDate.HasValue && x.PubDate.Value.Year == year && x.PubDate.Value.Month == month && x.PubDate.Value.Day == day && (includeUnpublished || (x.IsPublished && x.PubDate <= DateTime.UtcNow)) ) .OrderByDescending(p => p.PubDate ?? p.LastModified) .ToList <Post>(); } else if (month > 0) { posts = posts.Where(x => x.PubDate.HasValue && x.PubDate.Value.Year == year && x.PubDate.Value.Month == month && (includeUnpublished || (x.IsPublished && x.PubDate <= DateTime.UtcNow)) ) .OrderByDescending(p => p.PubDate ?? p.LastModified) .ToList <Post>(); } else { posts = posts.Where(x => x.PubDate.HasValue && x.PubDate.Value.Year == year ) .OrderByDescending(p => p.PubDate ?? p.LastModified) .ToList <Post>(); } if (pageSize > 0) { var offset = 0; if (pageNumber > 1) { offset = pageSize * (pageNumber - 1); } posts = posts.Skip(offset).Take(pageSize).ToList <Post>(); } var result = new PagedPostResult(); var data = new List <IPost>(); data.AddRange(posts); result.Data = data; result.TotalItems = totalItems; return(result); }
public async Task <PagedPostResult> GetPosts( string blogId, int year, int month = 0, int day = 0, int pageNumber = 1, int pageSize = 10, bool includeUnpublished = false, CancellationToken cancellationToken = default(CancellationToken) ) { cancellationToken.ThrowIfCancellationRequested(); IQueryable <PostEntity> query; var currentTime = DateTime.UtcNow; if (day > 0 && month > 0) { query = _dbContext.Posts .Include(p => p.PostComments) .Where(x => x.BlogId == blogId && x.PubDate.HasValue && x.PubDate.Value.Year == year && x.PubDate.Value.Month == month && x.PubDate.Value.Day == day && (includeUnpublished || (x.IsPublished == true && x.PubDate <= currentTime)) ) .OrderByDescending(p => p.PubDate ?? p.LastModified) ; } else if (month > 0) { query = _dbContext.Posts .Include(p => p.PostComments) .Where(x => x.BlogId == blogId && x.PubDate.HasValue && x.PubDate.Value.Year == year && x.PubDate.Value.Month == month && (includeUnpublished || (x.IsPublished == true && x.PubDate <= currentTime)) ) .OrderByDescending(p => p.PubDate ?? p.LastModified) ; } else { query = _dbContext.Posts .Include(p => p.PostComments) .Where(x => x.BlogId == blogId && x.PubDate.HasValue && x.PubDate.Value.Year == year ).OrderByDescending(p => p.PubDate ?? p.LastModified) ; } int offset = (pageSize * pageNumber) - pageSize; var posts = await query .AsNoTracking() .Skip(offset) .Take(pageSize) .ToListAsync <IPost>(); var result = new PagedPostResult(); result.Data = posts; result.TotalItems = await GetCount(blogId, year, month, day, includeUnpublished, cancellationToken).ConfigureAwait(false); return(result); }