Skip to content

Commit

Permalink
Fixed the issue in querying posts
Browse files Browse the repository at this point in the history
  • Loading branch information
VJAI committed Jul 24, 2014
1 parent d47c0ce commit d9a9744
Show file tree
Hide file tree
Showing 31 changed files with 6,899 additions and 6,326 deletions.
Binary file modified JustBlog.v11.suo
Binary file not shown.
322 changes: 230 additions & 92 deletions src/JustBlog/JustBlog.Core/BlogRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,21 @@ public BlogRepository(ISession session)
/// <returns></returns>
public IList<Post> Posts(int pageNo, int pageSize)
{
var query = _session.Query<Post>()
.Where(p => p.Published)
.OrderByDescending(p => p.PostedOn)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category);
var posts = _session.Query<Post>()
.Where(p => p.Published)
.OrderByDescending(p => p.PostedOn)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category)
.ToList();

query.FetchMany(p => p.Tags).ToFuture();
var postIds = posts.Select(p => p.Id).ToList();

return query.ToFuture().ToList();
return _session.Query<Post>()
.OrderByDescending(p => p.PostedOn)
.Where(p => postIds.Contains(p.Id))
.FetchMany(p => p.Tags)
.ToList();
}

/// <summary>
Expand All @@ -54,16 +59,21 @@ public IList<Post> Posts(int pageNo, int pageSize)
/// <returns></returns>
public IList<Post> PostsForTag(string tagSlug, int pageNo, int pageSize)
{
var query = _session.Query<Post>()
.Where(p => p.Published && p.Tags.Any(t => t.UrlSlug.Equals(tagSlug)))
.OrderByDescending(p => p.PostedOn)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category);
var posts = _session.Query<Post>()
.Where(p => p.Published && p.Tags.Any(t => t.UrlSlug.Equals(tagSlug)))
.OrderByDescending(p => p.PostedOn)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category)
.ToList();

query.FetchMany(p => p.Tags).ToFuture();
var postIds = posts.Select(p => p.Id).ToList();

return query.ToFuture().ToList();
return _session.Query<Post>()
.OrderByDescending(p => p.PostedOn)
.Where(p => postIds.Contains(p.Id))
.FetchMany(p => p.Tags)
.ToList();
}

/// <summary>
Expand All @@ -75,16 +85,21 @@ public IList<Post> PostsForTag(string tagSlug, int pageNo, int pageSize)
/// <returns></returns>
public IList<Post> PostsForCategory(string categorySlug, int pageNo, int pageSize)
{
var query = _session.Query<Post>()
.Where(p => p.Published && p.Category.UrlSlug.Equals(categorySlug))
.OrderByDescending(p => p.PostedOn)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category);
var posts = _session.Query<Post>()
.Where(p => p.Published && p.Category.UrlSlug.Equals(categorySlug))
.OrderByDescending(p => p.PostedOn)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category)
.ToList();

query.FetchMany(p => p.Tags).ToFuture();
var postIds = posts.Select(p => p.Id).ToList();

return query.ToFuture().ToList();
return _session.Query<Post>()
.OrderByDescending(p => p.PostedOn)
.Where(p => postIds.Contains(p.Id))
.FetchMany(p => p.Tags)
.ToList();
}

/// <summary>
Expand All @@ -96,16 +111,21 @@ public IList<Post> PostsForCategory(string categorySlug, int pageNo, int pageSiz
/// <returns></returns>
public IList<Post> PostsForSearch(string search, int pageNo, int pageSize)
{
var query = _session.Query<Post>()
.Where(p => p.Published && (p.Title.Contains(search) || p.Category.Name.Equals(search) || p.Tags.Any(t => t.Name.Equals(search))))
.OrderByDescending(p => p.PostedOn)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category);
var posts = _session.Query<Post>()
.Where(p => p.Published && (p.Title.Contains(search) || p.Category.Name.Equals(search) || p.Tags.Any(t => t.Name.Equals(search))))
.OrderByDescending(p => p.PostedOn)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category)
.ToList();

query.FetchMany(p => p.Tags).ToFuture();
var postIds = posts.Select(p => p.Id).ToList();

return query.ToFuture().ToList();
return _session.Query<Post>()
.OrderByDescending(p => p.PostedOn)
.Where(p => postIds.Contains(p.Id))
.FetchMany(p => p.Tags)
.ToList();
}

/// <summary>
Expand Down Expand Up @@ -164,92 +184,210 @@ public int TotalPostsForSearch(string search)
/// <returns></returns>
public IList<Post> Posts(int pageNo, int pageSize, string sortColumn, bool sortByAscending)
{
IQueryable<Post> query;
IList<Post> posts;
IList<int> postIds;

switch (sortColumn)
{
case "Title":
if(sortByAscending)
query = _session.Query<Post>()
.OrderBy(p => p.Title)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category);
if (sortByAscending)
{
posts = _session.Query<Post>()
.OrderBy(p => p.Title)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category)
.ToList();

postIds = posts.Select(p => p.Id).ToList();

posts = _session.Query<Post>()
.OrderBy(p => p.Title)
.Where(p => postIds.Contains(p.Id))
.FetchMany(p => p.Tags)
.ToList();
}
else
query = _session.Query<Post>()
.OrderByDescending(p => p.Title)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category);
{
posts = _session.Query<Post>()
.OrderByDescending(p => p.Title)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category)
.ToList();

postIds = posts.Select(p => p.Id).ToList();

posts = _session.Query<Post>()
.OrderByDescending(p => p.Title)
.Where(p => postIds.Contains(p.Id))
.FetchMany(p => p.Tags)
.ToList();
}
break;
case "Published":
if (sortByAscending)
query = _session.Query<Post>()
.OrderBy(p => p.Published)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category);
{
posts = _session.Query<Post>()
.OrderBy(p => p.Published)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category)
.ToList();

postIds = posts.Select(p => p.Id).ToList();

posts = _session.Query<Post>()
.OrderBy(p => p.Published)
.Where(p => postIds.Contains(p.Id))
.FetchMany(p => p.Tags)
.ToList();
}
else
query = _session.Query<Post>()
.OrderByDescending(p => p.Published)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category);
{
posts = _session.Query<Post>()
.OrderByDescending(p => p.Published)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category)
.ToList();

postIds = posts.Select(p => p.Id).ToList();

posts = _session.Query<Post>()
.OrderByDescending(p => p.Published)
.Where(p => postIds.Contains(p.Id))
.FetchMany(p => p.Tags)
.ToList();
}
break;
case "PostedOn":
if (sortByAscending)
query = _session.Query<Post>()
.OrderBy(p => p.PostedOn)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category);
{
posts = _session.Query<Post>()
.OrderBy(p => p.PostedOn)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category)
.ToList();

postIds = posts.Select(p => p.Id).ToList();

posts = _session.Query<Post>()
.OrderBy(p => p.PostedOn)
.Where(p => postIds.Contains(p.Id))
.FetchMany(p => p.Tags)
.ToList();
}
else
query = _session.Query<Post>()
.OrderByDescending(p => p.PostedOn)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category);
{
posts = _session.Query<Post>()
.OrderByDescending(p => p.PostedOn)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category)
.ToList();

postIds = posts.Select(p => p.Id).ToList();

posts = _session.Query<Post>()
.OrderByDescending(p => p.PostedOn)
.Where(p => postIds.Contains(p.Id))
.FetchMany(p => p.Tags)
.ToList();
}
break;
case "Modified":
if (sortByAscending)
query = _session.Query<Post>()
.OrderBy(p => p.Modified)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category);
{
posts = _session.Query<Post>()
.OrderBy(p => p.Modified)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category)
.ToList();

postIds = posts.Select(p => p.Id).ToList();

posts = _session.Query<Post>()
.OrderBy(p => p.Modified)
.Where(p => postIds.Contains(p.Id))
.FetchMany(p => p.Tags)
.ToList();
}
else
query = _session.Query<Post>()
.OrderByDescending(p => p.Modified)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category);
{
posts = _session.Query<Post>()
.OrderByDescending(p => p.Modified)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category)
.ToList();

postIds = posts.Select(p => p.Id).ToList();

posts = _session.Query<Post>()
.OrderByDescending(p => p.Modified)
.Where(p => postIds.Contains(p.Id))
.FetchMany(p => p.Tags)
.ToList();
}
break;
case "Category":
if (sortByAscending)
query = _session.Query<Post>()
.OrderBy(p => p.Category.Name)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category);
{
posts = _session.Query<Post>()
.OrderBy(p => p.Category.Name)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category)
.ToList();

postIds = posts.Select(p => p.Id).ToList();

posts = _session.Query<Post>()
.OrderBy(p => p.Category.Name)
.Where(p => postIds.Contains(p.Id))
.FetchMany(p => p.Tags)
.ToList();
}
else
query = _session.Query<Post>()
.OrderByDescending(p => p.Category.Name)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category);
{
posts = _session.Query<Post>()
.OrderByDescending(p => p.Category.Name)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category)
.ToList();

postIds = posts.Select(p => p.Id).ToList();

posts = _session.Query<Post>()
.OrderByDescending(p => p.Category.Name)
.Where(p => postIds.Contains(p.Id))
.FetchMany(p => p.Tags)
.ToList();
}
break;
default:
query = _session.Query<Post>()
.OrderByDescending(p => p.PostedOn)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category);
posts = _session.Query<Post>()
.OrderByDescending(p => p.PostedOn)
.Skip(pageNo * pageSize)
.Take(pageSize)
.Fetch(p => p.Category)
.ToList();

postIds = posts.Select(p => p.Id).ToList();

posts = _session.Query<Post>()
.OrderByDescending(p => p.PostedOn)
.Where(p => postIds.Contains(p.Id))
.FetchMany(p => p.Tags)
.ToList();
break;
}

query.FetchMany(p => p.Tags).ToFuture();

return query.ToFuture().ToList();
return posts;
}

/// <summary>
Expand Down
Binary file modified src/JustBlog/JustBlog.Core/bin/Debug/JustBlog.Core.dll
Binary file not shown.
Binary file modified src/JustBlog/JustBlog.Core/bin/Debug/JustBlog.Core.pdb
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -164,3 +164,4 @@ D:\Git\JustBlog\src\JustBlog\JustBlog.Core\bin\Debug\Ninject.Web.Common.pdb
D:\Git\JustBlog\src\JustBlog\JustBlog.Core\bin\Debug\Ninject.Web.Common.xml
D:\Git\JustBlog\src\JustBlog\JustBlog.Core\obj\Debug\JustBlog.Core.dll
D:\Git\JustBlog\src\JustBlog\JustBlog.Core\obj\Debug\JustBlog.Core.pdb
D:\Git\JustBlog\src\JustBlog\JustBlog.Core\obj\Debug\JustBlog.Core.csprojResolveAssemblyReference.cache
Binary file not shown.
Binary file modified src/JustBlog/JustBlog.Core/obj/Debug/JustBlog.Core.dll
Binary file not shown.
Binary file modified src/JustBlog/JustBlog.Core/obj/Debug/JustBlog.Core.pdb
Binary file not shown.
Binary file modified src/JustBlog/JustBlog/bin/JustBlog.Core.dll
Binary file not shown.
Binary file modified src/JustBlog/JustBlog/bin/JustBlog.Core.pdb
Binary file not shown.
Binary file modified src/JustBlog/JustBlog/bin/JustBlog.dll
Binary file not shown.
Loading

0 comments on commit d9a9744

Please sign in to comment.