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
                });
            }
Exemple #2
0
            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
                });
            }
Exemple #3
0
            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
                });
            }