public override async Task <Response> Handle(Request request) { var source = await Session.LoadAsync <Domain.Entities.Sources.Source>(new Guid(request.Id)); if (source == null) { return(new Response()); } var articles = await Session.Query <Domain.Entities.Articles.Article>().ToListAsync(); articles = articles.OrderByDescending(x => x.UpdatedDate).Where(x => x.SourceId == request.Id).ToList(); var articlesVm = new List <ArticleViewmodel>(); foreach (var article in articles) { var articlevm = new ArticleViewmodel(article); articlesVm.Add(articlevm); } if (!string.IsNullOrEmpty(request.Username)) { var allUsers = await Session.Query <Bloggregator.Domain.Entities.Account.User>().ToListAsync(); var user = allUsers.Where(x => x.UserName == request.Username).FirstOrDefault(); if (user != null) { articlesVm.Where(a => user.SavedArticleIds.Contains(a.Id)).ToList().ForEach(a => a.Favorite = true); } } if (!string.IsNullOrEmpty(request.SearchTerm)) { var toReturnFiltered = new List <ArticleViewmodel>(); foreach (var article in articlesVm) { if (article.Description.ToLower().Contains(request.SearchTerm.ToLower()) || article.Content.ToLower().Contains(request.SearchTerm.ToLower()) || article.Title.ToLower().Contains(request.SearchTerm.ToLower()) || article.SourceName.ToLower().Contains(request.SearchTerm.ToLower())) { toReturnFiltered.Add(article); } } articlesVm = toReturnFiltered; } var total = articlesVm.Count; articlesVm = articlesVm.Skip((request.Page - 1) * request.PageSize).Take(request.PageSize).ToList(); return(new Response { Source = new SourceWithArticlesViewModel { Source = source, Articles = articlesVm }, Page = request.Page, PageSize = request.PageSize, TotalItemCount = total }); }
public override async Task <Response> Handle(Request request) { var categories = await Session.Query <Domain.Entities.Categories.Category>().Where(x => x.IsActive).ToListAsync(); var allowedSources = await Session.Query <Domain.Entities.Sources.Source>().Where(x => x.IsActive).ToListAsync(); var allowdSourcesIds = allowedSources.Select(s => s.Id.ToString()).ToList(); if (!string.IsNullOrEmpty(request.Username)) { var categoryPermissions = await Session.Query <Domain.Entities.Categories.CategoryPermission>().Where(x => x.Username == request.Username && x.Visible).ToListAsync(); categories = categories.Where(c => categoryPermissions.Select(cp => cp.CategoryId).ToList().Contains(c.Id.ToString())).ToList(); var sourceIds = new List <string>(); foreach (var cp in categoryPermissions) { sourceIds.AddRange(cp.Sources.Where(s => s.Visible).Select(s => s.SourceId)); } allowdSourcesIds = sourceIds; } Domain.Entities.Account.User user = null; if (!string.IsNullOrEmpty(request.Username)) { user = await Session.Query <Bloggregator.Domain.Entities.Account.User>().Where(x => x.UserName == request.Username).FirstOrDefaultAsync(); } var toReturn = new List <CategoryWithArticlesViewModel>(); var allArticles = await Session.Query <Domain.Entities.Articles.Article>().ToListAsync(); foreach (var category in categories) { var articles = allArticles.OrderByDescending(x => x.UpdatedDate) .Where(x => allowdSourcesIds.Contains(x.SourceId) && category.SourceIds.Contains(x.SourceId)) .Take(4).ToList(); var articlesVm = new List <ArticleViewmodel>(); foreach (var article in articles) { var articlevm = new ArticleViewmodel(article); articlesVm.Add(articlevm); } if (user != null) { articlesVm.Where(a => user.SavedArticleIds.Contains(a.Id)).ToList().ForEach(a => a.Favorite = true); } toReturn.Add(new CategoryWithArticlesViewModel { Category = category, Articles = articlesVm }); } if (!string.IsNullOrEmpty(request.SearchTerm)) { var toReturnFiltered = new List <CategoryWithArticlesViewModel>(); foreach (var model in toReturn) { if (model.Category.Name.ToLower().Contains(request.SearchTerm.ToLower())) { toReturnFiltered.Add(model); } else { foreach (var article in model.Articles) { if (article.Description.ToLower().Contains(request.SearchTerm.ToLower()) || article.Content.ToLower().Contains(request.SearchTerm.ToLower()) || article.Title.ToLower().Contains(request.SearchTerm.ToLower()) || article.SourceName.ToLower().Contains(request.SearchTerm.ToLower())) { toReturnFiltered.Add(model); break; } } } } toReturn = toReturnFiltered; } return(new Response { Categories = toReturn }); }
public override async Task <Response> Handle(Request request) { var category = await Session.LoadAsync <Domain.Entities.Categories.Category>(new Guid(request.Id)); if (category == null) { return(new Response()); } var allSources = await Session.Query <Domain.Entities.Sources.Source>().ToListAsync(); var sources = allSources.Where(s => category.SourceIds.Contains(s.Id.ToString())).ToList(); // if no user logged in, every source should be visible var visibleSources = sources.Select(s => s.Id.ToString()).ToList(); if (!string.IsNullOrEmpty(request.Username)) { // get user preferences for this category var categoryPermission = await Session.Query <Domain.Entities.Categories.CategoryPermission>() .Where(x => x.Username == request.Username && x.Visible && x.CategoryId == request.Id).FirstOrDefaultAsync(); if (categoryPermission != null) { visibleSources = new List <string>(); foreach (var sourceId in categoryPermission.Sources.Where(s => s.Visible).Select(x => x.SourceId)) { visibleSources.Add(sourceId); } } } var articles = await Session.Query <Domain.Entities.Articles.Article>().ToListAsync(); articles = articles.OrderByDescending(x => x.UpdatedDate).Where(x => visibleSources.Contains(x.SourceId)).ToList(); var articlesVm = new List <ArticleViewmodel>(); foreach (var article in articles) { var articlevm = new ArticleViewmodel(article); articlesVm.Add(articlevm); } if (!string.IsNullOrEmpty(request.Username)) { var allUsers = await Session.Query <Bloggregator.Domain.Entities.Account.User>().ToListAsync(); var user = allUsers.Where(x => x.UserName == request.Username).FirstOrDefault(); if (user != null) { articlesVm.Where(a => user.SavedArticleIds.Contains(a.Id)).ToList().ForEach(a => a.Favorite = true); } } if (!string.IsNullOrEmpty(request.SearchTerm)) { var toReturnFiltered = new List <ArticleViewmodel>(); foreach (var article in articlesVm) { if (article.Description.ToLower().Contains(request.SearchTerm.ToLower()) || article.Content.ToLower().Contains(request.SearchTerm.ToLower()) || article.Title.ToLower().Contains(request.SearchTerm.ToLower()) || article.SourceName.ToLower().Contains(request.SearchTerm.ToLower())) { toReturnFiltered.Add(article); } } articlesVm = toReturnFiltered; } var total = articlesVm.Count; articlesVm = articlesVm.Skip((request.Page - 1) * request.PageSize).Take(request.PageSize).ToList(); return(new Response { Category = new CategoryWithArticlesViewModel { Category = category, Articles = articlesVm }, TotalItemCount = total, PageSize = request.PageSize, Page = request.Page }); }